Преглед изворни кода

[Development] Move Get{C,S}Security from Security class to separate classes.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4156 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.0.90
Adam Tkac пре 13 година
родитељ
комит
bfd66c1e8c

+ 1
- 1
common/rfb/CConnection.cxx Прегледај датотеку

@@ -36,7 +36,7 @@ CConnection::CConnection()
shared(false),
state_(RFBSTATE_UNINITIALISED), useProtocol3_3(false)
{
security = new Security(SecurityViewer);
security = new SecurityClient();
}

CConnection::~CConnection()

+ 2
- 2
common/rfb/CConnection.h Прегледај датотеку

@@ -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();

+ 1
- 1
common/rfb/CSecurityVeNCrypt.cxx Прегледај датотеку

@@ -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;

+ 3
- 3
common/rfb/CSecurityVeNCrypt.h Прегледај датотеку

@@ -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;

+ 4
- 2
common/rfb/Makefile.am Прегледај датотеку

@@ -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 \

+ 1
- 1
common/rfb/SConnection.cxx Прегледај датотеку

@@ -55,7 +55,7 @@ SConnection::SConnection(bool reverseConnection_)

cp.setVersion(defaultMajorVersion, defaultMinorVersion);

security = new Security(SecurityServer);
security = new SecurityServer();
}

SConnection::~SConnection()

+ 2
- 2
common/rfb/SConnection.h Прегледај датотеку

@@ -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;

+ 1
- 1
common/rfb/SSecurityVeNCrypt.cxx Прегледај датотеку

@@ -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;

+ 2
- 2
common/rfb/SSecurityVeNCrypt.h Прегледај датотеку

@@ -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;

+ 2
- 100
common/rfb/Security.cxx Прегледај датотеку

@@ -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;

+ 1
- 12
common/rfb/Security.h Прегледај датотеку

@@ -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;
};

+ 88
- 0
common/rfb/SecurityClient.cxx Прегледај датотеку

@@ -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");
}


+ 43
- 0
common/rfb/SecurityClient.h Прегледај датотеку

@@ -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

+ 77
- 0
common/rfb/SecurityServer.cxx Прегледај датотеку

@@ -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");
}


+ 41
- 0
common/rfb/SecurityServer.h Прегледај датотеку

@@ -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

+ 1
- 1
win/vncconfig/Authentication.h Прегледај датотеку

@@ -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;

Loading…
Откажи
Сачувај