From 8c0483823727cb6e1e94ea9b12fc4b65a4b5204a Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Thu, 2 Sep 2010 12:37:00 +0000 Subject: [PATCH] [Development] Implement *Plain types on the client side. Signed-off-by: Martin Koegler git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4127 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- common/rfb/CSecurityPlain.cxx | 43 +++++++++++++++++++++++++++++++++++ common/rfb/CSecurityPlain.h | 35 ++++++++++++++++++++++++++++ common/rfb/Makefile.am | 4 ++-- common/rfb/Security.cxx | 10 +++++++- 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 common/rfb/CSecurityPlain.cxx create mode 100644 common/rfb/CSecurityPlain.h diff --git a/common/rfb/CSecurityPlain.cxx b/common/rfb/CSecurityPlain.cxx new file mode 100644 index 00000000..8aec0def --- /dev/null +++ b/common/rfb/CSecurityPlain.cxx @@ -0,0 +1,43 @@ +/* Copyright (C) 2005 Martin Koegler + * 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. + */ + +#include +#include +#include +#include + +using namespace rfb; + +bool CSecurityPlain::processMsg(CConnection* cc) +{ + rdr::OutStream* os = cc->getOutStream(); + + CharArray username; + CharArray password; + + (CSecurity::upg)->getUserPasswd(&username.buf, &password.buf); + + // Return the response to the server + os->writeU32(strlen(username.buf)); + os->writeU32(strlen(password.buf)); + os->writeBytes(username.buf,strlen(username.buf)); + os->writeBytes(password.buf,strlen(password.buf)); + os->flush(); + return true; +} diff --git a/common/rfb/CSecurityPlain.h b/common/rfb/CSecurityPlain.h new file mode 100644 index 00000000..fb0d7a5f --- /dev/null +++ b/common/rfb/CSecurityPlain.h @@ -0,0 +1,35 @@ +/* Copyright (C) 2005 Martin Koegler + * 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_CSECURITYPLAIN_H__ +#define __RFB_CSECURITYPLAIN_H__ + +#include +#include + +namespace rfb { + + class CSecurityPlain : public CSecurity { + public: + CSecurityPlain() {} + virtual bool processMsg(CConnection* cc); + virtual int getType() const { return secTypePlain; } + virtual const char* description() const { return "ask for username and password"; } + }; +} +#endif diff --git a/common/rfb/Makefile.am b/common/rfb/Makefile.am index 78c959f0..4e5bbd7f 100644 --- a/common/rfb/Makefile.am +++ b/common/rfb/Makefile.am @@ -8,7 +8,7 @@ HDRS = Blacklist.h CapsContainer.h CapsList.h CConnection.h \ CMsgHandler.h CMsgReader.h CMsgReaderV3.h CMsgWriter.h \ CMsgWriterV3.h ColourCube.h ColourMap.h ComparingUpdateTracker.h \ Configuration.h ConnParams.h CSecurity.h CSecurityNone.h \ - CSecurityStack.h CSecurityVeNCrypt.h \ + CSecurityPlain.h CSecurityStack.h CSecurityVeNCrypt.h \ CSecurityVncAuth.h Cursor.h Decoder.h d3des.h Encoder.h \ encodings.h Exception.h hextileConstants.h hextileDecode.h \ HextileDecoder.h hextileEncodeBetter.h hextileEncode.h \ @@ -30,7 +30,7 @@ HDRS = Blacklist.h CapsContainer.h CapsList.h CConnection.h \ librfb_la_SOURCES = $(HDRS) Blacklist.cxx CConnection.cxx CMsgHandler.cxx \ CMsgReader.cxx CMsgReaderV3.cxx CMsgWriter.cxx CMsgWriterV3.cxx \ - CSecurityStack.cxx CSecurityVeNCrypt.cxx \ + CSecurityPlain.cxx CSecurityStack.cxx CSecurityVeNCrypt.cxx \ CSecurityVncAuth.cxx CapsContainer.cxx CapsList.cxx \ ComparingUpdateTracker.cxx Configuration.cxx ConnParams.cxx \ Cursor.cxx Decoder.cxx d3des.c Encoder.cxx \ diff --git a/common/rfb/Security.cxx b/common/rfb/Security.cxx index 71e45de8..874c346f 100644 --- a/common/rfb/Security.cxx +++ b/common/rfb/Security.cxx @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -56,7 +57,7 @@ StringParameter Security::secTypesViewer ("SecurityTypes", "Specify which security scheme to use (None, VncAuth)", #ifdef HAVE_GNUTLS - "VeNCrypt,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None", + "VeNCrypt,X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None", #else "VncAuth,None", #endif @@ -172,6 +173,7 @@ CSecurity* Security::GetCSecurity(U32 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", @@ -179,12 +181,18 @@ CSecurity* Security::GetCSecurity(U32 secType) 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 } -- 2.39.5