Allow SSecurity to specify AccessRights for SConnection.
SConnection has AccessRights property that specifies what connected client can
do. Set this property to value given by SSecurity after successful
authentication. This way individual SSecurity subclasses can accept clients but
restrict their access.
diff --git a/common/rfb/SConnection.cxx b/common/rfb/SConnection.cxx
index eeaeafe..4bf0f93 100644
--- a/common/rfb/SConnection.cxx
+++ b/common/rfb/SConnection.cxx
@@ -28,6 +28,7 @@
#include <rfb/ServerCore.h>
#include <rfb/encodings.h>
#include <rfb/EncodeManager.h>
+#include <rfb/SSecurity.h>
#include <rfb/LogWriter.h>
@@ -223,6 +224,7 @@
if (done) {
state_ = RFBSTATE_QUERYING;
queryConnection(ssecurity->getUserName());
+ setAccessRights(ssecurity->getAccessRights());
}
} catch (AuthFailureException& e) {
vlog.error("AuthFailureException: %s", e.str());
diff --git a/common/rfb/SConnection.h b/common/rfb/SConnection.h
index 7718f4c..f712417 100644
--- a/common/rfb/SConnection.h
+++ b/common/rfb/SConnection.h
@@ -28,7 +28,6 @@
#include <rdr/OutStream.h>
#include <rfb/SMsgHandler.h>
#include <rfb/SecurityServer.h>
-#include <rfb/SSecurity.h>
namespace rfb {
diff --git a/common/rfb/SSecurity.h b/common/rfb/SSecurity.h
index afc744e..6da63c3 100644
--- a/common/rfb/SSecurity.h
+++ b/common/rfb/SSecurity.h
@@ -44,13 +44,12 @@
#define __RFB_SSECURITY_H__
#include <rdr/types.h>
+#include <rfb/SConnection.h>
#include <rfb/util.h>
#include <list>
namespace rfb {
- class SConnection;
-
class SSecurity {
public:
virtual ~SSecurity() {}
@@ -63,6 +62,8 @@
// necessary. Null may be returned to indicate that there is no user name
// for this security type.
virtual const char* getUserName() const = 0;
+
+ virtual SConnection::AccessRights getAccessRights() const { return SConnection::AccessDefault; }
};
}
diff --git a/common/rfb/Security.h b/common/rfb/Security.h
index 196eb42..85bc325 100644
--- a/common/rfb/Security.h
+++ b/common/rfb/Security.h
@@ -25,7 +25,6 @@
#include <rdr/types.h>
#include <rfb/Configuration.h>
#include <rfb/CSecurity.h>
-#include <rfb/SSecurity.h>
#include <list>
diff --git a/common/rfb/SecurityServer.h b/common/rfb/SecurityServer.h
index 0986619..019d67f 100644
--- a/common/rfb/SecurityServer.h
+++ b/common/rfb/SecurityServer.h
@@ -22,9 +22,10 @@
#include <rfb/Configuration.h>
#include <rfb/Security.h>
-#include <rfb/SSecurity.h>
namespace rfb {
+
+ class SSecurity;
class SecurityServer : public Security {
public: