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();
}
}