git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4156 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v1.0.90
@@ -36,7 +36,7 @@ CConnection::CConnection() | |||
shared(false), | |||
state_(RFBSTATE_UNINITIALISED), useProtocol3_3(false) | |||
{ | |||
security = new Security(SecurityViewer); | |||
security = new SecurityClient(); | |||
} | |||
CConnection::~CConnection() |
@@ -28,7 +28,7 @@ | |||
#include <rfb/CMsgHandler.h> | |||
#include <rfb/CSecurity.h> | |||
#include <rfb/util.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/SecurityClient.h> | |||
namespace rfb { | |||
@@ -134,7 +134,7 @@ namespace rfb { | |||
CSecurity *csecurity; /* Windows viewer needs it exported. */ | |||
protected: | |||
void setState(stateEnum s) { state_ = s; } | |||
Security *security; | |||
SecurityClient *security; | |||
private: | |||
void processVersionMsg(); |
@@ -36,7 +36,7 @@ using namespace std; | |||
static LogWriter vlog("CVeNCrypt"); | |||
CSecurityVeNCrypt::CSecurityVeNCrypt(Security* sec) : csecurity(NULL), security(sec) | |||
CSecurityVeNCrypt::CSecurityVeNCrypt(SecurityClient* sec) : csecurity(NULL), security(sec) | |||
{ | |||
haveRecvdMajorVersion = false; | |||
haveRecvdMinorVersion = false; |
@@ -26,7 +26,7 @@ | |||
#define __CSECURITYVENCRYPT_H__ | |||
#include <rfb/CSecurity.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/SecurityClient.h> | |||
#include <rdr/types.h> | |||
namespace rfb { | |||
@@ -34,7 +34,7 @@ namespace rfb { | |||
class CSecurityVeNCrypt : public CSecurity { | |||
public: | |||
CSecurityVeNCrypt(Security* sec); | |||
CSecurityVeNCrypt(SecurityClient* sec); | |||
~CSecurityVeNCrypt(); | |||
virtual bool processMsg(CConnection* cc);// { return true; } | |||
int getType() const {return chosenType;} | |||
@@ -43,7 +43,7 @@ namespace rfb { | |||
static StringParameter secTypesStr; | |||
protected: | |||
CSecurity *csecurity; | |||
Security *security; | |||
SecurityClient *security; | |||
bool haveRecvdMajorVersion; | |||
bool haveRecvdMinorVersion; | |||
bool haveSentVersion; |
@@ -18,7 +18,8 @@ HDRS = Blacklist.h CapsContainer.h CapsList.h CConnection.h \ | |||
PixelFormat.h PixelFormat.inl Pixel.h RawDecoder.h RawEncoder.h \ | |||
Rect.h Region.h rreDecode.h RREDecoder.h rreEncode.h RREEncoder.h \ | |||
ScaledPixelBuffer.h ScaleFilters.h SConnection.h ScreenSet.h \ | |||
screenTypes.h SDesktop.h Security.h ServerCore.h SMsgHandler.h \ | |||
screenTypes.h SDesktop.h Security.h SecurityServer.h SecurityClient.h \ | |||
ServerCore.h SMsgHandler.h \ | |||
SMsgReader.h SMsgReaderV3.h SMsgWriter.h SMsgWriterV3.h SSecurity.h \ | |||
SSecurityNone.h SSecurityPlain.h SSecurityStack.h SSecurityVeNCrypt.h \ | |||
SSecurityVncAuth.h Threading.h tightDecode.h \ | |||
@@ -40,7 +41,8 @@ librfb_la_SOURCES = $(HDRS) Blacklist.cxx CConnection.cxx CMsgHandler.cxx \ | |||
RREEncoder.cxx RREDecoder.cxx RawDecoder.cxx RawEncoder.cxx \ | |||
Region.cxx SConnection.cxx SMsgHandler.cxx \ | |||
SMsgReader.cxx SMsgReaderV3.cxx SMsgWriter.cxx SMsgWriterV3.cxx \ | |||
ServerCore.cxx Security.cxx SSecurityPlain.cxx SSecurityStack.cxx \ | |||
ServerCore.cxx Security.cxx SecurityServer.cxx SecurityClient.cxx \ | |||
SSecurityPlain.cxx SSecurityStack.cxx \ | |||
SSecurityVncAuth.cxx SSecurityVeNCrypt.cxx \ | |||
ScaledPixelBuffer.cxx ScaleFilters.cxx Timer.cxx TightDecoder.cxx \ | |||
TightEncoder.cxx TightPalette.cxx TransImageGetter.cxx \ |
@@ -55,7 +55,7 @@ SConnection::SConnection(bool reverseConnection_) | |||
cp.setVersion(defaultMajorVersion, defaultMinorVersion); | |||
security = new Security(SecurityServer); | |||
security = new SecurityServer(); | |||
} | |||
SConnection::~SConnection() |
@@ -26,7 +26,7 @@ | |||
#include <rdr/InStream.h> | |||
#include <rdr/OutStream.h> | |||
#include <rfb/SMsgHandler.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/SecurityServer.h> | |||
#include <rfb/SSecurity.h> | |||
namespace rfb { | |||
@@ -191,7 +191,7 @@ namespace rfb { | |||
rdr::OutStream* os; | |||
SMsgReader* reader_; | |||
SMsgWriter* writer_; | |||
Security *security; | |||
SecurityServer *security; | |||
SSecurity* ssecurity; | |||
stateEnum state_; | |||
bool reverseConnection; |
@@ -38,7 +38,7 @@ using namespace std; | |||
static LogWriter vlog("SVeNCrypt"); | |||
SSecurityVeNCrypt::SSecurityVeNCrypt(Security *sec) : security(sec) | |||
SSecurityVeNCrypt::SSecurityVeNCrypt(SecurityServer *sec) : security(sec) | |||
{ | |||
ssecurity = NULL; | |||
haveSentVersion = false; |
@@ -36,7 +36,7 @@ namespace rfb { | |||
class SSecurityVeNCrypt : public SSecurity { | |||
public: | |||
SSecurityVeNCrypt(Security *sec); | |||
SSecurityVeNCrypt(SecurityServer *sec); | |||
~SSecurityVeNCrypt(); | |||
virtual bool processMsg(SConnection* sc);// { return true; } | |||
virtual int getType() const { return secTypeVeNCrypt; } | |||
@@ -44,7 +44,7 @@ namespace rfb { | |||
protected: | |||
SSecurity *ssecurity; | |||
Security *security; | |||
SecurityServer *security; | |||
bool haveSentVersion, haveRecvdMajorVersion, haveRecvdMinorVersion; | |||
bool haveSentTypes, haveChosenType; | |||
rdr::U8 majorVersion, minorVersion, numTypes; |
@@ -52,41 +52,11 @@ using namespace std; | |||
static LogWriter vlog("Security"); | |||
UserPasswdGetter *CSecurity::upg = NULL; | |||
StringParameter Security::secTypesViewer | |||
("SecurityTypes", | |||
"Specify which security scheme to use (None, VncAuth)", | |||
#ifdef HAVE_GNUTLS | |||
"VeNCrypt,X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None", | |||
#else | |||
"VncAuth,None", | |||
#endif | |||
ConfViewer); | |||
StringParameter Security::secTypesServer | |||
("SecurityTypes", | |||
"Specify which security scheme to use (None, VncAuth)", | |||
#ifdef HAVE_GNUTLS | |||
"VeNCrypt,TLSVnc,VncAuth", | |||
#else | |||
"VncAuth", | |||
#endif | |||
ConfServer); | |||
Security::Security(SecurityClassType secClassType) | |||
Security::Security(StringParameter &secTypes) | |||
{ | |||
char *secTypesStr; | |||
switch (secClassType) { | |||
case SecurityViewer: | |||
secTypesStr = secTypesViewer.getData(); | |||
break; | |||
case SecurityServer: | |||
secTypesStr = secTypesServer.getData(); | |||
break; | |||
}; | |||
secTypesStr = secTypes.getData(); | |||
enabledSecTypes = parseSecTypes(secTypesStr); | |||
delete secTypesStr; | |||
@@ -138,74 +108,6 @@ bool Security::IsSupported(U32 secType) | |||
return false; | |||
} | |||
SSecurity* Security::GetSSecurity(U32 secType) | |||
{ | |||
if (!IsSupported(secType)) | |||
goto bail; | |||
switch (secType) { | |||
case secTypeNone: return new SSecurityNone(); | |||
case secTypeVncAuth: return new SSecurityVncAuth(); | |||
case secTypeVeNCrypt: return new SSecurityVeNCrypt(this); | |||
case secTypePlain: return new SSecurityPlain(); | |||
#ifdef HAVE_GNUTLS | |||
case secTypeTLSNone: | |||
return new SSecurityStack(secTypeTLSNone, new SSecurityTLS(true)); | |||
case secTypeTLSVnc: | |||
return new SSecurityStack(secTypeTLSVnc, new SSecurityTLS(true), new SSecurityVncAuth()); | |||
case secTypeTLSPlain: | |||
return new SSecurityStack(secTypeTLSPlain, new SSecurityTLS(true), new SSecurityPlain()); | |||
case secTypeX509None: | |||
return new SSecurityStack(secTypeX509None, new SSecurityTLS(false)); | |||
case secTypeX509Vnc: | |||
return new SSecurityStack(secTypeX509None, new SSecurityTLS(false), new SSecurityVncAuth()); | |||
case secTypeX509Plain: | |||
return new SSecurityStack(secTypeX509Plain, new SSecurityTLS(false), new SSecurityPlain()); | |||
#endif | |||
} | |||
bail: | |||
throw Exception("Security type not supported"); | |||
} | |||
CSecurity* Security::GetCSecurity(U32 secType) | |||
{ | |||
assert (CSecurity::upg != NULL); /* (upg == NULL) means bug in the viewer */ | |||
if (!IsSupported(secType)) | |||
goto bail; | |||
switch (secType) { | |||
case secTypeNone: return new CSecurityNone(); | |||
case secTypeVncAuth: return new CSecurityVncAuth(); | |||
case secTypeVeNCrypt: return new CSecurityVeNCrypt(this); | |||
case secTypePlain: return new CSecurityPlain(); | |||
#ifdef HAVE_GNUTLS | |||
case secTypeTLSNone: | |||
return new CSecurityStack(secTypeTLSNone, "TLS with no password", | |||
new CSecurityTLS(true)); | |||
case secTypeTLSVnc: | |||
return new CSecurityStack(secTypeTLSVnc, "TLS with VNCAuth", | |||
new CSecurityTLS(true), new CSecurityVncAuth()); | |||
case secTypeTLSPlain: | |||
return new CSecurityStack(secTypeTLSPlain, "TLS with Username/Password", | |||
new CSecurityTLS(true), new CSecurityPlain()); | |||
case secTypeX509None: | |||
return new CSecurityStack(secTypeX509None, "X509 with no password", | |||
new CSecurityTLS(false)); | |||
case secTypeX509Vnc: | |||
return new CSecurityStack(secTypeX509None, "X509 with VNCAuth", | |||
new CSecurityTLS(false), new CSecurityVncAuth()); | |||
case secTypeX509Plain: | |||
return new CSecurityStack(secTypeX509Plain, "X509 with Username/Password", | |||
new CSecurityTLS(false), new CSecurityPlain()); | |||
#endif | |||
} | |||
bail: | |||
throw Exception("Security type not supported"); | |||
} | |||
rdr::U32 rfb::secTypeNum(const char* name) | |||
{ | |||
if (strcasecmp(name, "None") == 0) return secTypeNone; |
@@ -60,14 +60,12 @@ namespace rfb { | |||
const rdr::U32 secResultFailed = 1; | |||
const rdr::U32 secResultTooMany = 2; // deprecated | |||
enum SecurityClassType { SecurityViewer, SecurityServer }; | |||
class Security { | |||
public: | |||
/* | |||
* Create Security instance. | |||
*/ | |||
Security(SecurityClassType secClassType); | |||
Security(StringParameter &secTypes); | |||
/* | |||
* Note about security types. | |||
@@ -90,15 +88,6 @@ namespace rfb { | |||
/* Get list of enabled VeNCrypt subtypes */ | |||
const std::list<rdr::U32> GetEnabledExtSecTypes(void); | |||
/* Create server side SSecurity class instance */ | |||
SSecurity* GetSSecurity(rdr::U32 secType); | |||
/* Create client side CSecurity class instance */ | |||
CSecurity* GetCSecurity(rdr::U32 secType); | |||
static StringParameter secTypesViewer; | |||
static StringParameter secTypesServer; | |||
private: | |||
std::list<rdr::U32> enabledSecTypes; | |||
}; |
@@ -0,0 +1,88 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* Copyright (C) 2010 TigerVNC Team | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This software is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this software; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
* USA. | |||
*/ | |||
#ifdef HAVE_CONFIG_H | |||
#include <config.h> | |||
#endif | |||
#include <assert.h> | |||
#include <rfb/CSecurityNone.h> | |||
#include <rfb/CSecurityStack.h> | |||
#include <rfb/CSecurityVeNCrypt.h> | |||
#include <rfb/CSecurityVncAuth.h> | |||
#include <rfb/CSecurityPlain.h> | |||
#include <rdr/Exception.h> | |||
#include <rfb/Security.h> | |||
#ifdef HAVE_GNUTLS | |||
#include <rfb/CSecurityTLS.h> | |||
#endif | |||
using namespace rdr; | |||
using namespace rfb; | |||
UserPasswdGetter *CSecurity::upg = NULL; | |||
StringParameter SecurityClient::secTypes | |||
("SecurityTypes", | |||
"Specify which security scheme to use (None, VncAuth)", | |||
#ifdef HAVE_GNUTLS | |||
"VeNCrypt,X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None", | |||
#else | |||
"VncAuth,None", | |||
#endif | |||
ConfViewer); | |||
CSecurity* SecurityClient::GetCSecurity(U32 secType) | |||
{ | |||
assert (CSecurity::upg != NULL); /* (upg == NULL) means bug in the viewer */ | |||
if (!IsSupported(secType)) | |||
goto bail; | |||
switch (secType) { | |||
case secTypeNone: return new CSecurityNone(); | |||
case secTypeVncAuth: return new CSecurityVncAuth(); | |||
case secTypeVeNCrypt: return new CSecurityVeNCrypt(this); | |||
case secTypePlain: return new CSecurityPlain(); | |||
#ifdef HAVE_GNUTLS | |||
case secTypeTLSNone: | |||
return new CSecurityStack(secTypeTLSNone, "TLS with no password", | |||
new CSecurityTLS(true)); | |||
case secTypeTLSVnc: | |||
return new CSecurityStack(secTypeTLSVnc, "TLS with VNCAuth", | |||
new CSecurityTLS(true), new CSecurityVncAuth()); | |||
case secTypeTLSPlain: | |||
return new CSecurityStack(secTypeTLSPlain, "TLS with Username/Password", | |||
new CSecurityTLS(true), new CSecurityPlain()); | |||
case secTypeX509None: | |||
return new CSecurityStack(secTypeX509None, "X509 with no password", | |||
new CSecurityTLS(false)); | |||
case secTypeX509Vnc: | |||
return new CSecurityStack(secTypeX509None, "X509 with VNCAuth", | |||
new CSecurityTLS(false), new CSecurityVncAuth()); | |||
case secTypeX509Plain: | |||
return new CSecurityStack(secTypeX509Plain, "X509 with Username/Password", | |||
new CSecurityTLS(false), new CSecurityPlain()); | |||
#endif | |||
} | |||
bail: | |||
throw Exception("Security type not supported"); | |||
} | |||
@@ -0,0 +1,43 @@ | |||
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This software is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this software; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
* USA. | |||
*/ | |||
// | |||
// secTypes.h - constants for the various security types. | |||
// | |||
#ifndef __RFB_SECURITYCLIENT_H__ | |||
#define __RFB_SECURITYCLIENT_H__ | |||
#include <rfb/Configuration.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/CSecurity.h> | |||
namespace rfb { | |||
class SecurityClient : public Security { | |||
public: | |||
SecurityClient(void) : Security(secTypes) {} | |||
/* Create client side CSecurity class instance */ | |||
CSecurity* GetCSecurity(rdr::U32 secType); | |||
static StringParameter secTypes; | |||
}; | |||
} | |||
#endif |
@@ -0,0 +1,77 @@ | |||
/* | |||
* Copyright (C) 2010 TigerVNC Team | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This software is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this software; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
* USA. | |||
*/ | |||
#ifdef HAVE_CONFIG_H | |||
#include <config.h> | |||
#endif | |||
#include <rdr/Exception.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/SSecurityNone.h> | |||
#include <rfb/SSecurityStack.h> | |||
#include <rfb/SSecurityPlain.h> | |||
#include <rfb/SSecurityVncAuth.h> | |||
#include <rfb/SSecurityVeNCrypt.h> | |||
#ifdef HAVE_GNUTLS | |||
#include <rfb/SSecurityTLS.h> | |||
#endif | |||
using namespace rdr; | |||
using namespace rfb; | |||
StringParameter SecurityServer::secTypes | |||
("SecurityTypes", | |||
"Specify which security scheme to use (None, VncAuth)", | |||
#ifdef HAVE_GNUTLS | |||
"VeNCrypt,TLSVnc,VncAuth", | |||
#else | |||
"VncAuth", | |||
#endif | |||
ConfServer); | |||
SSecurity* SecurityServer::GetSSecurity(U32 secType) | |||
{ | |||
if (!IsSupported(secType)) | |||
goto bail; | |||
switch (secType) { | |||
case secTypeNone: return new SSecurityNone(); | |||
case secTypeVncAuth: return new SSecurityVncAuth(); | |||
case secTypeVeNCrypt: return new SSecurityVeNCrypt(this); | |||
case secTypePlain: return new SSecurityPlain(); | |||
#ifdef HAVE_GNUTLS | |||
case secTypeTLSNone: | |||
return new SSecurityStack(secTypeTLSNone, new SSecurityTLS(true)); | |||
case secTypeTLSVnc: | |||
return new SSecurityStack(secTypeTLSVnc, new SSecurityTLS(true), new SSecurityVncAuth()); | |||
case secTypeTLSPlain: | |||
return new SSecurityStack(secTypeTLSPlain, new SSecurityTLS(true), new SSecurityPlain()); | |||
case secTypeX509None: | |||
return new SSecurityStack(secTypeX509None, new SSecurityTLS(false)); | |||
case secTypeX509Vnc: | |||
return new SSecurityStack(secTypeX509None, new SSecurityTLS(false), new SSecurityVncAuth()); | |||
case secTypeX509Plain: | |||
return new SSecurityStack(secTypeX509Plain, new SSecurityTLS(false), new SSecurityPlain()); | |||
#endif | |||
} | |||
bail: | |||
throw Exception("Security type not supported"); | |||
} | |||
@@ -0,0 +1,41 @@ | |||
/* | |||
* Copyright (C) 2010 TigerVNC Team | |||
* | |||
* This is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This software is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this software; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
* USA. | |||
*/ | |||
#ifndef __RFB_SECURITYSERVER_H__ | |||
#define __RFB_SECURITYSERVER_H__ | |||
#include <rfb/Configuration.h> | |||
#include <rfb/Security.h> | |||
#include <rfb/SSecurity.h> | |||
namespace rfb { | |||
class SecurityServer : public Security { | |||
public: | |||
SecurityServer(void) : Security(secTypes) {} | |||
/* Create server side SSecurity class instance */ | |||
SSecurity* GetSSecurity(rdr::U32 secType); | |||
static StringParameter secTypes; | |||
}; | |||
} | |||
#endif |
@@ -40,7 +40,7 @@ namespace rfb { | |||
AuthenticationPage(const RegKey& rk) | |||
: PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_AUTHENTICATION)), regKey(rk) {} | |||
void initDialog() { | |||
CharArray sec_types_str(Security::secTypesServer.getData()); | |||
CharArray sec_types_str(SecurityServer::secTypes.getData()); | |||
std::list<rdr::U32> sec_types = parseSecTypes(sec_types_str.buf); | |||
useNone = useVNC = false; |