diff options
author | Adam Tkac <atkac@redhat.com> | 2010-10-01 08:33:29 +0000 |
---|---|---|
committer | Adam Tkac <atkac@redhat.com> | 2010-10-01 08:33:29 +0000 |
commit | bfd66c1e8c526dff1757bf349c9bb4d87906265f (patch) | |
tree | 35bc549a432e2b823e215483e666afb2e832ebbe /common/rfb/SecurityClient.cxx | |
parent | ef5e17fe2f7c0ab7b47aa616960dfa9fffd7425a (diff) | |
download | tigervnc-bfd66c1e8c526dff1757bf349c9bb4d87906265f.tar.gz tigervnc-bfd66c1e8c526dff1757bf349c9bb4d87906265f.zip |
[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
Diffstat (limited to 'common/rfb/SecurityClient.cxx')
-rw-r--r-- | common/rfb/SecurityClient.cxx | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/common/rfb/SecurityClient.cxx b/common/rfb/SecurityClient.cxx new file mode 100644 index 00000000..e5e428c6 --- /dev/null +++ b/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"); +} + |