diff options
author | Adam Tkac <atkac@redhat.com> | 2010-04-23 14:06:38 +0000 |
---|---|---|
committer | Adam Tkac <atkac@redhat.com> | 2010-04-23 14:06:38 +0000 |
commit | 1d15e2d60a171a43c83e51a1343727701ac34f4b (patch) | |
tree | 01eebc9a1baf00ade1c7fe2495c16cd3abc08113 /common/rfb/Security.cxx | |
parent | b6eb3990a15e32e7d506ef713da51ca0305ef4a9 (diff) | |
download | tigervnc-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.cxx | 61 |
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; |