]> source.dussan.org Git - tigervnc.git/commitdiff
Add AccessSetDesktopSize right.
authorMichal Srb <michalsrb@gmail.com>
Mon, 24 Nov 2014 11:18:28 +0000 (13:18 +0200)
committerMichal Srb <michalsrb@gmail.com>
Mon, 24 Nov 2014 11:18:28 +0000 (13:18 +0200)
So clients with limited access rights can not affect it.

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

index 4bf0f932e147eaf62944853466c810c97ddea770..20182a0780d7f1e225c5ff3896dd6b9155cf1066 100644 (file)
@@ -37,13 +37,14 @@ using namespace rfb;
 static LogWriter vlog("SConnection");
 
 // AccessRights values
-const SConnection::AccessRights SConnection::AccessView       = 0x0001;
-const SConnection::AccessRights SConnection::AccessKeyEvents  = 0x0002;
-const SConnection::AccessRights SConnection::AccessPtrEvents  = 0x0004;
-const SConnection::AccessRights SConnection::AccessCutText    = 0x0008;
-const SConnection::AccessRights SConnection::AccessDefault    = 0x03ff;
-const SConnection::AccessRights SConnection::AccessNoQuery    = 0x0400;
-const SConnection::AccessRights SConnection::AccessFull       = 0xffff;
+const SConnection::AccessRights SConnection::AccessView           = 0x0001;
+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::AccessDefault        = 0x03ff;
+const SConnection::AccessRights SConnection::AccessNoQuery        = 0x0400;
+const SConnection::AccessRights SConnection::AccessFull           = 0xffff;
 
 
 SConnection::SConnection(bool reverseConnection_)
index f712417398851708d8c5633290b42f4e505fd3e0..0379b17f09cccaf701602dacb3f953fd1968ce38 100644 (file)
@@ -122,13 +122,14 @@ namespace rfb {
     // is up to the derived class.
 
     typedef rdr::U16 AccessRights;
-    static const AccessRights AccessView;         // View display contents
-    static const AccessRights AccessKeyEvents;    // Send key events
-    static const AccessRights AccessPtrEvents;    // Send pointer events
-    static const AccessRights AccessCutText;      // Send/receive clipboard events
-    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
+    static const AccessRights AccessView;           // View display contents
+    static const AccessRights AccessKeyEvents;      // Send key events
+    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 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
     virtual void setAccessRights(AccessRights ar) = 0;
 
     // Other methods
index ae2fd2474de5287527a48d0b64bf617264eb2498..b11a352a9ad55046c1388562711d12b7b5871be8 100644 (file)
@@ -89,6 +89,10 @@ rfb::BoolParameter rfb::Server::sendCutText
 ("SendCutText",
  "Send clipboard changes to clients.",
  true);
+rfb::BoolParameter rfb::Server::acceptSetDesktopSize
+("AcceptSetDesktopSize",
+ "Accept set desktop size events from clients.",
+ true);
 rfb::BoolParameter rfb::Server::queryConnect
 ("QueryConnect",
  "Prompt the local user to accept or reject incoming connections.",
index e12a8bc8a57e3d6b441842364406f13cb60e3265..5fc996ff1b6244dcf76f5c929ac05f465cd3e5c7 100644 (file)
@@ -46,6 +46,7 @@ namespace rfb {
     static BoolParameter acceptPointerEvents;
     static BoolParameter acceptCutText;
     static BoolParameter sendCutText;
+    static BoolParameter acceptSetDesktopSize;
     static BoolParameter queryConnect;
 
   };
index 618048a5504c627414df60d3e29b62f36f293c7b..274c496b8d43e5a785469e2858de2a98fa0c9f0a 100644 (file)
@@ -584,6 +584,9 @@ void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
 {
   unsigned int result;
 
+  if (!(accessRights & AccessSetDesktopSize)) return;
+  if (!rfb::Server::acceptSetDesktopSize) return;
+
   // Don't bother the desktop with an invalid configuration
   if (!layout.validate(fb_width, fb_height)) {
     writer()->writeExtendedDesktopSize(reasonClient, resultInvalid,