]> source.dussan.org Git - tigervnc.git/commitdiff
Limit access to non-shared mode
authorPierre Ossman <ossman@cendio.se>
Tue, 2 Dec 2014 13:33:17 +0000 (14:33 +0100)
committerPierre Ossman <ossman@cendio.se>
Tue, 2 Dec 2014 13:33:17 +0000 (14:33 +0100)
A read-only client should not be allowed to kick out other clients.
It will be forced into shared mode, or refused the connection, depending
on the neverShared parameter.

common/rfb/SConnection.cxx
common/rfb/SConnection.h
common/rfb/VNCSConnectionST.cxx

index 20182a0780d7f1e225c5ff3896dd6b9155cf1066..99a4850cef9bfbbf436f90251fe80b52bee7b683 100644 (file)
@@ -42,6 +42,7 @@ const SConnection::AccessRights SConnection::AccessKeyEvents      = 0x0002;
 const SConnection::AccessRights SConnection::AccessPtrEvents      = 0x0004;
 const SConnection::AccessRights SConnection::AccessCutText        = 0x0008;
 const SConnection::AccessRights SConnection::AccessSetDesktopSize = 0x0010;
+const SConnection::AccessRights SConnection::AccessNonShared      = 0x0020;
 const SConnection::AccessRights SConnection::AccessDefault        = 0x03ff;
 const SConnection::AccessRights SConnection::AccessNoQuery        = 0x0400;
 const SConnection::AccessRights SConnection::AccessFull           = 0xffff;
index 0379b17f09cccaf701602dacb3f953fd1968ce38..005a7a854cbdd50f299e2dc6e2d987f1bc09579c 100644 (file)
@@ -127,6 +127,7 @@ namespace rfb {
     static const AccessRights AccessPtrEvents;      // Send pointer events
     static const AccessRights AccessCutText;        // Send/receive clipboard events
     static const AccessRights AccessSetDesktopSize; // Change desktop size
+    static const AccessRights AccessNonShared;      // Exclusive access to the server
     static const AccessRights AccessDefault;        // The default rights, INCLUDING FUTURE ONES
     static const AccessRights AccessNoQuery;        // Connect without local user accepting
     static const AccessRights AccessFull;           // All of the available AND FUTURE rights
index 274c496b8d43e5a785469e2858de2a98fa0c9f0a..e30b4f429d0b7038e21923b7f443f1cf247abb0d 100644 (file)
@@ -445,9 +445,10 @@ void VNCSConnectionST::clientInit(bool shared)
 {
   lastEventTime = time(0);
   if (rfb::Server::alwaysShared || reverseConnection) shared = true;
+  if (!(accessRights & AccessNonShared)) shared = true;
   if (rfb::Server::neverShared) shared = false;
   if (!shared) {
-    if (rfb::Server::disconnectClients) {
+    if (rfb::Server::disconnectClients && (accessRights & AccessNonShared)) {
       // - Close all the other connected clients
       vlog.debug("non-shared connection - closing clients");
       server->closeClients("Non-shared connection requested", getSock());