From aea462f777680f3dd68968a32b309aa069b75a98 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 25 Jan 2013 23:28:10 -0600 Subject: [PATCH] Add ability to set maximum terminal service users in group --- .../src/part/adminusermgmt/groupauthdlg.cpp | 17 ++++++++++ .../tde/src/part/adminusermgmt/groupauthdlg.h | 2 ++ .../part/adminusermgmt/groupauthdlgbase.ui | 24 +++++++++++++- clients/tde/src/part/adminusermgmt/layout.ui | 11 +++++++ clients/tde/src/part/adminusermgmt/part.cpp | 7 +++++ lib/libtqtrla/src/tqtrla.cpp | 2 ++ lib/libtqtrla/src/tqtrla.h | 1 + .../src/admin_user_mgmt.cpp | 31 +++++++++++++++++++ 8 files changed, 94 insertions(+), 1 deletion(-) diff --git a/clients/tde/src/part/adminusermgmt/groupauthdlg.cpp b/clients/tde/src/part/adminusermgmt/groupauthdlg.cpp index 3633332..7832b10 100644 --- a/clients/tde/src/part/adminusermgmt/groupauthdlg.cpp +++ b/clients/tde/src/part/adminusermgmt/groupauthdlg.cpp @@ -129,6 +129,23 @@ TQKeyedStringList GroupPermissionsDialog::selectedServers() { return list; } +void GroupPermissionsDialog::setSessionLimit(int limit, bool visible) { + if (visible) { + m_base->m_sessionLimitLabel->show(); + m_base->m_sessionLimit->show(); + } + else { + m_base->m_sessionLimitLabel->hide(); + m_base->m_sessionLimit->hide(); + } + + m_base->m_sessionLimit->setValue(limit); +} + +int GroupPermissionsDialog::sessionLimit() { + return m_base->m_sessionLimit->value(); +} + void GroupPermissionsDialog::slotOk() { accept(); } diff --git a/clients/tde/src/part/adminusermgmt/groupauthdlg.h b/clients/tde/src/part/adminusermgmt/groupauthdlg.h index 3290c7f..1c3498d 100644 --- a/clients/tde/src/part/adminusermgmt/groupauthdlg.h +++ b/clients/tde/src/part/adminusermgmt/groupauthdlg.h @@ -59,6 +59,8 @@ class GroupPermissionsDialog : public KDialogBase void setAvailableServers(TQKeyedStringList list); void setSelectedServers(TQKeyedStringList list); TQKeyedStringList selectedServers(); + void setSessionLimit(int limit, bool visible); + int sessionLimit(); public slots: void slotOk(); diff --git a/clients/tde/src/part/adminusermgmt/groupauthdlgbase.ui b/clients/tde/src/part/adminusermgmt/groupauthdlgbase.ui index ced61a0..cf28002 100644 --- a/clients/tde/src/part/adminusermgmt/groupauthdlgbase.ui +++ b/clients/tde/src/part/adminusermgmt/groupauthdlgbase.ui @@ -41,7 +41,29 @@ - + + + m_sessionLimitLabel + + + Maximum Simultaneous Users: + + + + + m_sessionLimit + + + 0 + + + 65535 + + + 0 + + + groupPermissionsSelector diff --git a/clients/tde/src/part/adminusermgmt/layout.ui b/clients/tde/src/part/adminusermgmt/layout.ui index bc11742..104134a 100644 --- a/clients/tde/src/part/adminusermgmt/layout.ui +++ b/clients/tde/src/part/adminusermgmt/layout.ui @@ -57,6 +57,17 @@ true + + + Maximum Simultaneous Users + + + true + + + true + + ts_list diff --git a/clients/tde/src/part/adminusermgmt/part.cpp b/clients/tde/src/part/adminusermgmt/part.cpp index 98a97ab..37b0b4d 100644 --- a/clients/tde/src/part/adminusermgmt/part.cpp +++ b/clients/tde/src/part/adminusermgmt/part.cpp @@ -240,6 +240,7 @@ void UserManagementPart::terminalServiceAddGroupButtonClicked() { keyedServerList.append(TQKeyedStringPair(TQString("%1").arg(*it2), 0)); } groupauthdlg.setAvailableServers(keyedServerList); + groupauthdlg.setSessionLimit(0, true); } if (groupauthdlg.exec() == TQDialog::Accepted) { m_updateTerminalServiceAuthGroupList.clear(); @@ -251,6 +252,7 @@ void UserManagementPart::terminalServiceAddGroupButtonClicked() { for (TQKeyedStringList::Iterator it = selectedServers.begin(); it != selectedServers.end(); ++it) { agt.allowedServerNames.append((*it).first); } + agt.maximumActiveSessionCount = groupauthdlg.sessionLimit(); m_updateTerminalServiceAuthGroupList.append(agt); m_commHandlerNextState = ModeUpdate_TerminalServices; m_commHandlerNextMode = ModeUpdate; @@ -278,6 +280,7 @@ void UserManagementPart::terminalServiceModifyGroupButtonClicked() { keyedServerList.append(TQKeyedStringPair(TQString("%1").arg(*it2), 0)); } groupauthdlg.setSelectedServers(keyedServerList); + groupauthdlg.setSessionLimit((*it).maximumActiveSessionCount, true); } groupauthdlg.setGroupName(item->text(0), false); if (groupauthdlg.exec() == TQDialog::Accepted) { @@ -289,6 +292,7 @@ void UserManagementPart::terminalServiceModifyGroupButtonClicked() { for (TQKeyedStringList::Iterator it = selectedServers.begin(); it != selectedServers.end(); ++it) { agt.allowedServerNames.append((*it).first); } + agt.maximumActiveSessionCount = groupauthdlg.sessionLimit(); m_updateTerminalServiceAuthGroupList.append(agt); m_commHandlerNextState = ModeUpdate_TerminalServices; m_commHandlerNextMode = ModeUpdate; @@ -315,6 +319,7 @@ void UserManagementPart::terminalServiceDeleteGroupButtonClicked() { void UserManagementPart::workspaceAddGroupButtonClicked() { GroupPermissionsDialog groupauthdlg(0); groupauthdlg.setPermissionsSelectorLabel(i18n("Allowed Stations")); + groupauthdlg.setSessionLimit(-1, false); { TQKeyedStringList friendlyStations; for (StationList::iterator it = m_availableWorkspaceStationsList.begin(); it != m_availableWorkspaceStationsList.end(); ++it) { @@ -344,6 +349,7 @@ void UserManagementPart::workspaceModifyGroupButtonClicked() { GroupPermissionsDialog groupauthdlg(0); groupauthdlg.setPermissionsSelectorLabel(i18n("Allowed Stations")); + groupauthdlg.setSessionLimit(-1, false); { TQKeyedStringList friendlyStations; for (StationList::iterator it = m_availableWorkspaceStationsList.begin(); it != m_availableWorkspaceStationsList.end(); ++it) { @@ -633,6 +639,7 @@ void UserManagementPart::mainEventLoop() { } item->setText(0, TQString("%1").arg(info.groupName)); item->setText(1, info.allowedServerNames.join(", ")); + item->setText(2, TQString("%1").arg(info.maximumActiveSessionCount)); } it2 = TQListViewItemIterator(m_base->ts_list); while (it2.current()) { diff --git a/lib/libtqtrla/src/tqtrla.cpp b/lib/libtqtrla/src/tqtrla.cpp index 50cb025..3c00bcf 100644 --- a/lib/libtqtrla/src/tqtrla.cpp +++ b/lib/libtqtrla/src/tqtrla.cpp @@ -633,6 +633,7 @@ TQDataStream &operator<<( TQDataStream &s, const TerminalServiceAuthGroupType &a s << agt.protocolVersion; s << agt.groupName; s << agt.allowedServerNames; + s << agt.maximumActiveSessionCount; return s; } @@ -649,6 +650,7 @@ TQDataStream &operator>>( TQDataStream &s, TerminalServiceAuthGroupType &agt ) s >> agt.protocolVersion; s >> agt.groupName; s >> agt.allowedServerNames; + s >> agt.maximumActiveSessionCount; return s; } diff --git a/lib/libtqtrla/src/tqtrla.h b/lib/libtqtrla/src/tqtrla.h index b649c4d..4bca5bd 100644 --- a/lib/libtqtrla/src/tqtrla.h +++ b/lib/libtqtrla/src/tqtrla.h @@ -253,6 +253,7 @@ class TerminalServiceAuthGroupType TQ_UINT32 protocolVersion; TQString groupName; TQStringList allowedServerNames; + TQ_UINT32 maximumActiveSessionCount; }; #ifndef QT_NO_DATASTREAM diff --git a/servers/admin_user_mgmt_server_lin/src/admin_user_mgmt.cpp b/servers/admin_user_mgmt_server_lin/src/admin_user_mgmt.cpp index 687a1e5..7779bed 100644 --- a/servers/admin_user_mgmt_server_lin/src/admin_user_mgmt.cpp +++ b/servers/admin_user_mgmt_server_lin/src/admin_user_mgmt.cpp @@ -263,12 +263,32 @@ void SysCtlSocket::commandLoop() { else { agt.protocolVersion = 1; agt.groupName = databasePermissionsCursor.value("groupname").toString(); + agt.maximumActiveSessionCount = 0; } agt.allowedServerNames.append(databasePermissionsCursor.value("server").toString()); list.append(agt); } + // ...then search the session limit database for groups... + TQSqlCursor databaseLimitsCursor("groups", TRUE, m_terminals_database); + databaseLimitsCursor.select(); + while (databaseLimitsCursor.next()) { + TerminalServiceAuthGroupType agt; + TerminalServiceAuthGroupList::iterator it = list.findByName(databaseLimitsCursor.value("groupname").toString()); + if (it != list.end()) { + agt = *it; + list.remove(it); + } + else { + agt.protocolVersion = 1; + agt.groupName = databaseLimitsCursor.value("groupname").toString(); + } + agt.maximumActiveSessionCount = databaseLimitsCursor.value("sesslimit").toUInt(); + + list.append(agt); + } + // ...then search LDAP for groups that were not already in the database struct group* group; setgrent(); @@ -279,6 +299,7 @@ void SysCtlSocket::commandLoop() { if (it == list.end()) { agt.protocolVersion = 1; agt.groupName = TQString(group->gr_name); + agt.maximumActiveSessionCount = 0; list.append(agt); } } @@ -348,6 +369,7 @@ void SysCtlSocket::commandLoop() { bool success = true; TQSqlCursor databasePermissionsCursor("allowed_servers", TRUE, m_terminals_database); + TQSqlCursor databaseLimitsCursor("groups", TRUE, m_terminals_database); TerminalServiceAuthGroupList::iterator it; for (it = list.begin(); it != list.end(); ++it) { TerminalServiceAuthGroupType agt = *it; @@ -358,6 +380,11 @@ void SysCtlSocket::commandLoop() { databasePermissionsCursor.primeDelete(); databasePermissionsCursor.del(false); } + databaseLimitsCursor.select(TQString("groupname='%1'").arg(agt.groupName)); + while (databaseLimitsCursor.next()) { + databaseLimitsCursor.primeDelete(); + databaseLimitsCursor.del(false); + } // Insert all entries for this group from the information structure TQStringList::iterator it2; @@ -366,6 +393,10 @@ void SysCtlSocket::commandLoop() { buffer->setValue("groupname", agt.groupName); buffer->setValue("server", *it2); databasePermissionsCursor.insert(); + buffer = databaseLimitsCursor.primeInsert(); + buffer->setValue("groupname", agt.groupName); + buffer->setValue("sesslimit", agt.maximumActiveSessionCount); + databaseLimitsCursor.insert(); } }