summaryrefslogtreecommitdiffstats
path: root/common/rfb/Security.cxx
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2010-04-23 14:06:38 +0000
committerAdam Tkac <atkac@redhat.com>2010-04-23 14:06:38 +0000
commit1d15e2d60a171a43c83e51a1343727701ac34f4b (patch)
tree01eebc9a1baf00ade1c7fe2495c16cd3abc08113 /common/rfb/Security.cxx
parentb6eb3990a15e32e7d506ef713da51ca0305ef4a9 (diff)
downloadtigervnc-1d15e2d60a171a43c83e51a1343727701ac34f4b.tar.gz
tigervnc-1d15e2d60a171a43c83e51a1343727701ac34f4b.zip
[Development] Implement Security class. This class will be used to create
CSecurity/SSecurity objects for authentication purposes. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4038 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'common/rfb/Security.cxx')
-rw-r--r--common/rfb/Security.cxx61
1 files changed, 61 insertions, 0 deletions
diff --git a/common/rfb/Security.cxx b/common/rfb/Security.cxx
index d6a9cac7..a38029a5 100644
--- a/common/rfb/Security.cxx
+++ b/common/rfb/Security.cxx
@@ -15,13 +15,74 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
+#include <assert.h>
+#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#define strcasecmp _stricmp
#endif
+#include <rdr/Exception.h>
+#include <rfb/LogWriter.h>
#include <rfb/Security.h>
+#include <rfb/SSecurityNone.h>
+#include <rfb/SSecurityFactoryStandard.h>
+#include <rfb/SSecurityVncAuth.h>
#include <rfb/util.h>
+using namespace rdr;
+using namespace rfb;
+using namespace std;
+
+static LogWriter vlog("Security");
+
+Security::Security(void)
+{
+ char *secTypesStr = SSecurityFactoryStandard::sec_types.getData();
+
+ enabledSecTypes = parseSecTypes(secTypesStr);
+
+ delete secTypesStr;
+}
+
+void Security::EnableSecType(U8 secType)
+{
+ list<U8>::iterator i;
+
+ for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++)
+ if (*i == secType)
+ return;
+
+ enabledSecTypes.push_back(secType);
+}
+
+bool Security::IsSupported(U8 secType)
+{
+ list<U8>::iterator i;
+
+ for (i = enabledSecTypes.begin(); i != enabledSecTypes.end(); i++)
+ if (*i == secType)
+ return true;
+
+ return false;
+}
+
+SSecurity* Security::GetSSecurity(U8 secType)
+{
+ if (!IsSupported(secType))
+ goto bail;
+
+ switch (secType) {
+ case secTypeNone: return new SSecurityNone();
+ case secTypeVncAuth: return new SSecurityVncAuth();
+ default:
+ vlog.error("Undefined security type %d, aborting");
+ abort();
+ }
+
+bail:
+ throw Exception("Security type not supported");
+}
+
rdr::U8 rfb::secTypeNum(const char* name)
{
if (strcasecmp(name, "None") == 0) return secTypeNone;