summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2010-12-08 13:47:41 +0000
committerAdam Tkac <atkac@redhat.com>2010-12-08 13:47:41 +0000
commit243fd7c5046857f05eb13b646bbafdbe314db09f (patch)
tree39160a426122d5abc725835aaea41ce7087a04bb /win
parentd3b4deac38b30dcd692bff14ca9066127dd2a797 (diff)
downloadtigervnc-243fd7c5046857f05eb13b646bbafdbe314db09f.tar.gz
tigervnc-243fd7c5046857f05eb13b646bbafdbe314db09f.zip
[Development] Add glue code for -SecurityTypes option and GUI Security dialog.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4216 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'win')
-rw-r--r--win/vncviewer/CConn.cxx38
-rw-r--r--win/vncviewer/CConn.h7
-rw-r--r--win/vncviewer/OptionsDialog.cxx124
3 files changed, 154 insertions, 15 deletions
diff --git a/win/vncviewer/CConn.cxx b/win/vncviewer/CConn.cxx
index f289d384..6a6561d7 100644
--- a/win/vncviewer/CConn.cxx
+++ b/win/vncviewer/CConn.cxx
@@ -16,6 +16,10 @@
* USA.
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <winsock2.h>
#include <vncviewer/UserPasswdDialog.h>
#include <vncviewer/CConn.h>
@@ -25,6 +29,9 @@
#include <rfb/Security.h>
#include <rfb/CMsgWriter.h>
#include <rfb/Configuration.h>
+#ifdef HAVE_GNUTLS
+#include <rfb/CSecurityTLS.h>
+#endif
#include <rfb/LogWriter.h>
#include <rfb_win32/AboutDialog.h>
@@ -97,6 +104,9 @@ bool CConn::initialise(network::Socket* s, bool reverse) {
applyOptions(options);
CSecurity::upg = this;
+#ifdef HAVE_GNUTLS
+ CSecurityTLS::msg = this;
+#endif
// Start the RFB protocol
sock = s;
@@ -473,6 +483,34 @@ CConn::close(const char* reason) {
sock->shutdown();
}
+bool CConn::showMsgBox(int flags, const char* title, const char* text)
+{
+ UINT winflags = 0;
+ int ret;
+
+ /* Translate flags */
+ if ((flags & M_OK) != 0)
+ winflags |= MB_OK;
+ if ((flags & M_OKCANCEL) != 0)
+ winflags |= MB_OKCANCEL;
+ if ((flags & M_YESNO) != 0)
+ winflags |= MB_YESNO;
+ if ((flags & M_ICONERROR) != 0)
+ winflags |= MB_ICONERROR;
+ if ((flags & M_ICONQUESTION) != 0)
+ winflags |= MB_ICONQUESTION;
+ if ((flags & M_ICONWARNING) != 0)
+ winflags |= MB_ICONWARNING;
+ if ((flags & M_ICONINFORMATION) != 0)
+ winflags |= MB_ICONINFORMATION;
+ if ((flags & M_DEFBUTTON1) != 0)
+ winflags |= MB_DEFBUTTON1;
+ if ((flags & M_DEFBUTTON2) != 0)
+ winflags |= MB_DEFBUTTON2;
+
+ ret = MessageBox(NULL, text, title, flags);
+ return (ret == IDOK || ret == IDYES) ? true : false;
+}
void
CConn::showOptionsDialog() {
diff --git a/win/vncviewer/CConn.h b/win/vncviewer/CConn.h
index 37711540..62b131e1 100644
--- a/win/vncviewer/CConn.h
+++ b/win/vncviewer/CConn.h
@@ -26,6 +26,7 @@
#include <network/Socket.h>
#include <rfb/CConnection.h>
#include <rfb/Cursor.h>
+#include <rfb/UserMsgBox.h>
#include <rfb/UserPasswdGetter.h>
#include <rfb_win32/Registry.h>
#include <rfb_win32/Handle.h>
@@ -43,7 +44,8 @@ namespace rfb {
class CConn : public CConnection,
UserPasswdGetter,
DesktopWindow::Callback,
- rdr::FdInStreamBlockCallback
+ rdr::FdInStreamBlockCallback,
+ UserMsgBox
{
public:
CConn();
@@ -77,6 +79,9 @@ namespace rfb {
// - Get the server's preferred format
const PixelFormat& getServerDefaultPF() const { return serverDefaultPF; }
+ // - Display message box
+ virtual bool showMsgBox(int flags, const char* title, const char* text);
+
// Global user-config registry key
static RegKey userConfigKey;
diff --git a/win/vncviewer/OptionsDialog.cxx b/win/vncviewer/OptionsDialog.cxx
index b3d72f2e..abdd921c 100644
--- a/win/vncviewer/OptionsDialog.cxx
+++ b/win/vncviewer/OptionsDialog.cxx
@@ -354,6 +354,8 @@ protected:
OptionsInfo* dlg;
};
+#ifdef HAVE_GNUTLS
+/* XXX: This class contains bunch of similar code to unix/vncviewer/CConn.cxx */
class SecurityPage : public PropSheetPage {
public:
SecurityPage(OptionsInfo* dlg_, Security *security_)
@@ -369,18 +371,18 @@ public:
for (i = secTypes.begin(); i != secTypes.end(); i++) {
switch (*i) {
- case secTypeVeNCrypt:
- enableVeNCryptFeatures(true);
- setItemChecked(IDC_VENCRYPT, true);
- break;
- case secTypeNone:
- setItemChecked(IDC_ENC_NONE, true);
- setItemChecked(IDC_AUTH_NONE, true);
- break;
- case secTypeVncAuth:
- setItemChecked(IDC_ENC_NONE, true);
- setItemChecked(IDC_AUTH_VNC, true);
- break;
+ case secTypeVeNCrypt:
+ enableVeNCryptFeatures(true);
+ setItemChecked(IDC_VENCRYPT, true);
+ break;
+ case secTypeNone:
+ setItemChecked(IDC_ENC_NONE, true);
+ setItemChecked(IDC_AUTH_NONE, true);
+ break;
+ case secTypeVncAuth:
+ setItemChecked(IDC_ENC_NONE, true);
+ setItemChecked(IDC_AUTH_VNC, true);
+ break;
}
}
@@ -428,34 +430,126 @@ public:
}
}
}
+
virtual bool onCommand(int id, int cmd) {
switch (id) {
case IDC_VENCRYPT:
- enableVeNCryptFeatures(isItemChecked(IDC_VENCRYPT));
+ if (isItemChecked(IDC_VENCRYPT)) {
+ enableVeNCryptFeatures(true);
+ security->EnableSecType(secTypeVeNCrypt);
+ } else {
+ enableVeNCryptFeatures(false);
+ security->DisableSecType(secTypeVeNCrypt);
+ }
break;
+
+ /* Process types without encryption */
case IDC_ENC_NONE:
+ if (isItemChecked(IDC_ENC_NONE)) {
+ vlog.debug("here");
+ if (isItemChecked(IDC_AUTH_NONE))
+ security->EnableSecType(secTypeNone);
+ if (isItemChecked(IDC_AUTH_VNC))
+ security->EnableSecType(secTypeVncAuth);
+ if (isItemChecked(IDC_AUTH_PLAIN))
+ security->EnableSecType(secTypePlain);
+ } else {
+ security->DisableSecType(secTypeNone);
+ security->DisableSecType(secTypeVncAuth);
+ security->DisableSecType(secTypePlain);
+ }
break;
+
+ /* Process security types which use TLS encryption */
case IDC_ENC_TLS:
+ if (isItemChecked(IDC_ENC_TLS)) {
+ if (isItemChecked(IDC_AUTH_NONE))
+ security->EnableSecType(secTypeTLSNone);
+ if (isItemChecked(IDC_AUTH_VNC))
+ security->EnableSecType(secTypeTLSVnc);
+ if (isItemChecked(IDC_AUTH_PLAIN))
+ security->EnableSecType(secTypeTLSPlain);
+ } else {
+ security->DisableSecType(secTypeTLSNone);
+ security->DisableSecType(secTypeTLSVnc);
+ security->DisableSecType(secTypeTLSPlain);
+ }
break;
+
+ /* Process security types which use X509 encryption */
case IDC_ENC_X509:
if (isItemChecked(IDC_ENC_X509)) {
enableItem(IDC_LOAD_CACERT, true);
enableItem(IDC_LOAD_CRLCERT, true);
+ if (isItemChecked(IDC_AUTH_NONE))
+ security->EnableSecType(secTypeX509None);
+ if (isItemChecked(IDC_AUTH_VNC))
+ security->EnableSecType(secTypeX509Vnc);
+ if (isItemChecked(IDC_AUTH_PLAIN))
+ security->EnableSecType(secTypeX509Plain);
} else {
enableItem(IDC_LOAD_CACERT, false);
enableItem(IDC_LOAD_CRLCERT, false);
+ security->DisableSecType(secTypeX509None);
+ security->DisableSecType(secTypeX509Vnc);
+ security->DisableSecType(secTypeX509Plain);
}
break;
+
case IDC_LOAD_CACERT:
break;
+
case IDC_LOAD_CRLCERT:
break;
+
+ /* Process *None security types */
case IDC_AUTH_NONE:
+ if (isItemChecked(IDC_AUTH_NONE)) {
+ if (isItemChecked(IDC_ENC_NONE))
+ security->EnableSecType(secTypeNone);
+ if (isItemChecked(IDC_ENC_TLS))
+ security->EnableSecType(secTypeTLSNone);
+ if (isItemChecked(IDC_ENC_X509))
+ security->EnableSecType(secTypeX509None);
+ } else {
+ security->DisableSecType(secTypeNone);
+ security->DisableSecType(secTypeTLSNone);
+ security->DisableSecType(secTypeX509None);
+ }
break;
+
+ /* Process *Vnc security types */
case IDC_AUTH_VNC:
+ if (isItemChecked(IDC_AUTH_VNC)) {
+ if (isItemChecked(IDC_ENC_NONE))
+ security->EnableSecType(secTypeVncAuth);
+ if (isItemChecked(IDC_ENC_TLS))
+ security->EnableSecType(secTypeTLSVnc);
+ if (isItemChecked(IDC_ENC_X509))
+ security->EnableSecType(secTypeX509Vnc);
+ } else {
+ security->DisableSecType(secTypeVncAuth);
+ security->DisableSecType(secTypeTLSVnc);
+ security->DisableSecType(secTypeX509Vnc);
+ }
break;
+
+ /* Process *Plain security types */
case IDC_AUTH_PLAIN:
+ if (isItemChecked(IDC_AUTH_PLAIN)) {
+ if (isItemChecked(IDC_ENC_NONE))
+ security->EnableSecType(secTypePlain);
+ if (isItemChecked(IDC_ENC_TLS))
+ security->EnableSecType(secTypeTLSPlain);
+ if (isItemChecked(IDC_ENC_X509))
+ security->EnableSecType(secTypeX509Plain);
+ } else {
+ security->DisableSecType(secTypePlain);
+ security->DisableSecType(secTypeTLSPlain);
+ security->DisableSecType(secTypeX509Plain);
+ }
break;
+
default:
throw rdr::Exception("Unhandled action in SecurityPage");
}
@@ -485,7 +579,7 @@ private:
setItemChecked(id, false);
}
};
-
+#endif
OptionsDialog::OptionsDialog() : visible(false) {
}
@@ -506,7 +600,9 @@ bool OptionsDialog::showDialog(CConn* view, bool capture) {
InputsPage inputsPage(&info); pages.push_back(&inputsPage);
MiscPage miscPage(&info); pages.push_back(&miscPage);
DefaultsPage defPage(&info); if (view) pages.push_back(&defPage);
+#ifdef HAVE_GNUTLS
SecurityPage secPage(&info, view->security); pages.push_back(&secPage);
+#endif
// Show the property sheet
ViewerOptions dialog(info, pages);