diff options
author | Constantin Kaplinsky <const@tightvnc.com> | 2006-05-11 05:29:14 +0000 |
---|---|---|
committer | Constantin Kaplinsky <const@tightvnc.com> | 2006-05-11 05:29:14 +0000 |
commit | 7f8d774eab739271839b4b5c266263009a086595 (patch) | |
tree | 69e2245559bfacc5f9a685dd3190c13266226fad | |
parent | 7d86cd1590412b3fb019be341172f8d696216463 (diff) | |
download | tigervnc-7f8d774eab739271839b4b5c266263009a086595.tar.gz tigervnc-7f8d774eab739271839b4b5c266263009a086595.zip |
Win32 vncconfig utility merged with VNC 4.1.1 code.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/branches/merge-with-vnc-4.1.1@547 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r-- | vncconfig/Authentication.h | 119 | ||||
-rw-r--r-- | vncconfig/Connections.h | 98 | ||||
-rw-r--r-- | vncconfig/Desktop.h | 7 | ||||
-rw-r--r-- | vncconfig/Hooking.h | 43 | ||||
-rw-r--r-- | vncconfig/Inputs.h | 10 | ||||
-rw-r--r-- | vncconfig/Legacy.cxx | 12 | ||||
-rw-r--r-- | vncconfig/Legacy.h | 11 | ||||
-rw-r--r-- | vncconfig/PasswordDialog.cxx | 52 | ||||
-rw-r--r-- | vncconfig/PasswordDialog.h | 40 | ||||
-rw-r--r-- | vncconfig/Sharing.h | 6 | ||||
-rw-r--r-- | vncconfig/resource.h | 22 | ||||
-rw-r--r-- | vncconfig/vncconfig.cxx | 28 | ||||
-rw-r--r-- | vncconfig/vncconfig.dsp | 8 | ||||
-rw-r--r-- | vncconfig/vncconfig.rc | 159 |
14 files changed, 397 insertions, 218 deletions
diff --git a/vncconfig/Authentication.h b/vncconfig/Authentication.h index 5923c2cb..f4b38f8c 100644 --- a/vncconfig/Authentication.h +++ b/vncconfig/Authentication.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -18,62 +18,28 @@ #ifndef WINVNCCONF_AUTHENTICATION #define WINVNCCONF_AUTHENTICATION +#include <vncconfig/PasswordDialog.h> #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> -#include <rfb_win32/Win32Util.h> +#include <rfb_win32/OSVersion.h> +#include <rfb_win32/MsgBox.h> #include <rfb/ServerCore.h> #include <rfb/secTypes.h> -#include <rfb/vncAuth.h> - +#include <rfb/Password.h> -extern rfb::VncAuthPasswdConfigParameter vncAuthPasswd; +static rfb::BoolParameter queryOnlyIfLoggedOn("QueryOnlyIfLoggedOn", + "Only prompt for a local user to accept incoming connections if there is a user logged on", false); namespace rfb { namespace win32 { - class VncPasswdDialog : public Dialog { - public: - VncPasswdDialog(const RegKey& rk) : Dialog(GetModuleHandle(0)), regKey(rk), warnPasswdInsecure(false) {} - bool showDialog() { - return Dialog::showDialog(MAKEINTRESOURCE(IDD_AUTH_VNC_PASSWD)); - } - bool onOk() { - TCharArray password1 = getItemString(IDC_PASSWORD1); - TCharArray password2 = getItemString(IDC_PASSWORD2);; - if (_tcscmp(password1.buf, password2.buf) != 0) { - MsgBox(0, _T("The supplied passwords do not match"), - MB_ICONEXCLAMATION | MB_OK); - return false; - } - if (warnPasswdInsecure && - (MsgBox(0, _T("Please note that your VNC password cannot be stored securely on this system. ") - _T("Are you sure you wish to continue?"), - MB_YESNO | MB_ICONWARNING) == IDNO)) - return false; - char passwd[9]; - memset(passwd, 0, sizeof(passwd)); - strCopy(passwd, CStr(password1.buf), sizeof(passwd)); - vncAuthObfuscatePasswd(passwd); - regKey.setBinary(_T("Password"), passwd, 8); - return true; - } - void setWarnPasswdInsecure(bool warn) { - warnPasswdInsecure = warn; - } - protected: - const RegKey& regKey; - bool warnPasswdInsecure; - }; - class AuthenticationPage : public PropSheetPage { public: AuthenticationPage(const RegKey& rk) - : PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_AUTHENTICATION)), - passwd(rk), regKey(rk) {} + : PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_AUTHENTICATION)), regKey(rk) {} void initDialog() { - CharArray sec_types_str; - sec_types_str.buf = rfb::Server::sec_types.getData(); + CharArray sec_types_str(SSecurityFactoryStandard::sec_types.getData()); std::list<int> sec_types = parseSecTypes(sec_types_str.buf); useNone = useVNC = false; @@ -83,55 +49,94 @@ namespace rfb { else if ((*i) == secTypeVncAuth) useVNC = true; } + HWND security = GetDlgItem(handle, IDC_ENCRYPTION); + SendMessage(security, CB_ADDSTRING, 0, (LPARAM)_T("Always Off")); + SendMessage(security, CB_SETCURSEL, 0, 0); + enableItem(IDC_AUTH_NT, false); enableItem(IDC_AUTH_NT_CONF, false); + enableItem(IDC_ENCRYPTION, false); enableItem(IDC_AUTH_RA2_CONF, false); + setItemChecked(IDC_AUTH_NONE, useNone); setItemChecked(IDC_AUTH_VNC, useVNC); setItemChecked(IDC_QUERY_CONNECT, rfb::Server::queryConnect); + setItemChecked(IDC_QUERY_LOGGED_ON, queryOnlyIfLoggedOn); + onCommand(IDC_AUTH_NONE, 0); } bool onCommand(int id, int cmd) { switch (id) { case IDC_AUTH_VNC_PASSWD: - passwd.showDialog(); + { + PasswordDialog passwdDlg(regKey, registryInsecure); + passwdDlg.showDialog(handle); + } return true; case IDC_AUTH_NONE: case IDC_AUTH_VNC: + enableItem(IDC_AUTH_VNC_PASSWD, isItemChecked(IDC_AUTH_VNC)); case IDC_QUERY_CONNECT: - setChanged((rfb::Server::queryConnect != isItemChecked(IDC_QUERY_CONNECT)) || - (useNone != isItemChecked(IDC_AUTH_NONE)) || - (useVNC != isItemChecked(IDC_AUTH_VNC))); + case IDC_QUERY_LOGGED_ON: + setChanged((useNone != isItemChecked(IDC_AUTH_NONE)) || + (useVNC != isItemChecked(IDC_AUTH_VNC)) || + (rfb::Server::queryConnect != isItemChecked(IDC_QUERY_CONNECT)) || + (queryOnlyIfLoggedOn != isItemChecked(IDC_QUERY_LOGGED_ON))); + enableItem(IDC_QUERY_LOGGED_ON, enableQueryOnlyIfLoggedOn()); return false; }; return false; } bool onOk() { + bool useVncChanged = useVNC != isItemChecked(IDC_AUTH_VNC); useVNC = isItemChecked(IDC_AUTH_VNC); useNone = isItemChecked(IDC_AUTH_NONE); if (useVNC) { - CharArray password = vncAuthPasswd.getVncAuthPasswd(); - if (!password.buf || strlen(password.buf) == 0) { - MsgBox(0, _T("The VNC authentication method is enabled, but no password is specified! ") - _T("The password dialog will now be shown."), MB_ICONEXCLAMATION | MB_OK); - passwd.showDialog(); - } + verifyVncPassword(regKey); regKey.setString(_T("SecurityTypes"), _T("VncAuth")); - } else if (useNone) { + } else { + if (haveVncPassword() && useVncChanged && + MsgBox(0, _T("The VNC authentication method is disabled, but a password is still stored for it.\n") + _T("Do you want to remove the VNC authentication password from the registry?"), + MB_ICONWARNING | MB_YESNO) == IDYES) { + regKey.setBinary(_T("Password"), 0, 0); + } regKey.setString(_T("SecurityTypes"), _T("None")); } regKey.setString(_T("ReverseSecurityTypes"), _T("None")); regKey.setBool(_T("QueryConnect"), isItemChecked(IDC_QUERY_CONNECT)); + regKey.setBool(_T("QueryOnlyIfLoggedOn"), isItemChecked(IDC_QUERY_LOGGED_ON)); return true; } void setWarnPasswdInsecure(bool warn) { - passwd.setWarnPasswdInsecure(warn); + registryInsecure = warn; + } + bool enableQueryOnlyIfLoggedOn() { + return isItemChecked(IDC_QUERY_CONNECT) && osVersion.isPlatformNT && (osVersion.dwMajorVersion >= 5); } + + + static bool haveVncPassword() { + PlainPasswd password(SSecurityFactoryStandard::vncAuthPasswd.getVncAuthPasswd()); + return password.buf && strlen(password.buf) != 0; + } + + static void verifyVncPassword(const RegKey& regKey) { + if (!haveVncPassword()) { + MsgBox(0, _T("The VNC authentication method is enabled, but no password is specified.\n") + _T("The password dialog will now be shown."), MB_ICONINFORMATION | MB_OK); + PasswordDialog passwd(regKey, registryInsecure); + passwd.showDialog(); + } + } + protected: RegKey regKey; - VncPasswdDialog passwd; + static bool registryInsecure; bool useNone; bool useVNC; }; }; + bool AuthenticationPage::registryInsecure = false; + }; #endif diff --git a/vncconfig/Connections.h b/vncconfig/Connections.h index 133e81c1..7512cc65 100644 --- a/vncconfig/Connections.h +++ b/vncconfig/Connections.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -22,6 +22,7 @@ #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> +#include <rfb_win32/ModuleFileName.h> #include <rfb/Configuration.h> #include <rfb/Blacklist.h> #include <network/TcpSocket.h> @@ -43,42 +44,37 @@ namespace rfb { public: ConnHostDialog() : Dialog(GetModuleHandle(0)) {} bool showDialog(const TCHAR* pat) { - delete [] pattern.buf; - pattern.buf = tstrDup(pat); + pattern.replaceBuf(tstrDup(pat)); return Dialog::showDialog(MAKEINTRESOURCE(IDD_CONN_HOST)); } void initDialog() { - if (_tcslen(pattern.buf) == 0) { - delete [] pattern.buf; - pattern.buf = tstrDup(_T("+")); - } + if (_tcslen(pattern.buf) == 0) + pattern.replaceBuf(tstrDup("+")); if (pattern.buf[0] == _T('+')) setItemChecked(IDC_ALLOW, true); + else if (pattern.buf[0] == _T('?')) + setItemChecked(IDC_QUERY, true); else setItemChecked(IDC_DENY, true); setItemString(IDC_HOST_PATTERN, &pattern.buf[1]); - - delete [] pattern.buf; - pattern.buf = 0; + pattern.replaceBuf(0); } bool onOk() { - delete [] pattern.buf; - pattern.buf = 0; - TCharArray host = getItemString(IDC_HOST_PATTERN); - TCharArray newPat(_tcslen(host.buf)+2); if (isItemChecked(IDC_ALLOW)) newPat.buf[0] = _T('+'); + else if (isItemChecked(IDC_QUERY)) + newPat.buf[0] = _T('?'); else newPat.buf[0] = _T('-'); newPat.buf[1] = 0; _tcscat(newPat.buf, host.buf); - network::TcpFilter::Pattern pat = network::TcpFilter::parsePattern(CStr(newPat.buf)); - pattern.buf = TCharArray(network::TcpFilter::patternToStr(pat)).takeBuf(); + network::TcpFilter::Pattern pat(network::TcpFilter::parsePattern(CStr(newPat.buf))); + pattern.replaceBuf(TCharArray(network::TcpFilter::patternToStr(pat)).takeBuf()); return true; } const TCHAR* getPattern() {return pattern.buf;} @@ -92,10 +88,11 @@ namespace rfb { : PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_CONNECTIONS)), regKey(rk) {} void initDialog() { vlog.debug("set IDC_PORT %d", (int)port_number); - setItemInt(IDC_PORT, port_number); + setItemInt(IDC_PORT, port_number ? port_number : 5900); + setItemChecked(IDC_RFB_ENABLE, port_number != 0); setItemInt(IDC_IDLE_TIMEOUT, rfb::Server::idleTimeout); vlog.debug("set IDC_HTTP_PORT %d", (int)http_port); - setItemInt(IDC_HTTP_PORT, http_port); + setItemInt(IDC_HTTP_PORT, http_port ? http_port : 5800); setItemChecked(IDC_HTTP_ENABLE, http_port != 0); enableItem(IDC_HTTP_PORT, http_port != 0); setItemChecked(IDC_LOCALHOST, localHost); @@ -113,7 +110,7 @@ namespace rfb { SendMessage(listBox, LB_ADDSTRING, 0, (LPARAM)(const TCHAR*)TStr(first.buf)); } - onCommand(IDC_HOSTS, EN_CHANGE); + onCommand(IDC_RFB_ENABLE, EN_CHANGE); } bool onCommand(int id, int cmd) { switch (id) { @@ -133,8 +130,7 @@ namespace rfb { case IDC_PORT: if (cmd == EN_CHANGE) { try { - if (getItemInt(IDC_PORT) > 100) - setItemInt(IDC_HTTP_PORT, getItemInt(IDC_PORT)-100); + setItemInt(IDC_HTTP_PORT, rfbPortToHTTP(getItemInt(IDC_PORT))); } catch (...) { } } @@ -145,19 +141,33 @@ namespace rfb { return false; case IDC_HTTP_ENABLE: - enableItem(IDC_HTTP_PORT, isItemChecked(IDC_HTTP_ENABLE)); - setChanged(isChanged()); - return false; - + case IDC_RFB_ENABLE: case IDC_LOCALHOST: - enableItem(IDC_HOSTS, !isItemChecked(IDC_LOCALHOST)); - enableItem(IDC_HOST_REMOVE, !isItemChecked(IDC_LOCALHOST)); - enableItem(IDC_HOST_UP, !isItemChecked(IDC_LOCALHOST)); - enableItem(IDC_HOST_DOWN, !isItemChecked(IDC_LOCALHOST)); - enableItem(IDC_HOST_EDIT, !isItemChecked(IDC_LOCALHOST)); - enableItem(IDC_HOST_ADD, !isItemChecked(IDC_LOCALHOST)); - setChanged(isChanged()); - return false; + { + // HTTP port + enableItem(IDC_HTTP_PORT, isItemChecked(IDC_HTTP_ENABLE) && isItemChecked(IDC_RFB_ENABLE)); + enableItem(IDC_HTTP_ENABLE, isItemChecked(IDC_RFB_ENABLE)); + + // RFB port + enableItem(IDC_PORT, isItemChecked(IDC_RFB_ENABLE)); + + // Hosts + enableItem(IDC_LOCALHOST, isItemChecked(IDC_RFB_ENABLE)); + + bool enableHosts = !isItemChecked(IDC_LOCALHOST) && isItemChecked(IDC_RFB_ENABLE); + enableItem(IDC_HOSTS, enableHosts); + enableItem(IDC_HOST_ADD, enableHosts); + if (!enableHosts) { + enableItem(IDC_HOST_REMOVE, enableHosts); + enableItem(IDC_HOST_UP, enableHosts); + enableItem(IDC_HOST_DOWN, enableHosts); + enableItem(IDC_HOST_EDIT, enableHosts); + } else { + onCommand(IDC_HOSTS, EN_CHANGE); + } + setChanged(isChanged()); + return false; + } case IDC_HOST_ADD: if (hostDialog.showDialog(_T(""))) @@ -228,11 +238,11 @@ namespace rfb { return false; } bool onOk() { - regKey.setInt(_T("PortNumber"), getItemInt(IDC_PORT)); - regKey.setInt(_T("LocalHost"), isItemChecked(IDC_LOCALHOST)); + regKey.setInt(_T("PortNumber"), isItemChecked(IDC_RFB_ENABLE) ? getItemInt(IDC_PORT) : 0); regKey.setInt(_T("IdleTimeout"), getItemInt(IDC_IDLE_TIMEOUT)); - regKey.setInt(_T("HTTPPortNumber"), isItemChecked(IDC_HTTP_ENABLE) ? getItemInt(IDC_HTTP_PORT) : 0); - + regKey.setInt(_T("HTTPPortNumber"), isItemChecked(IDC_HTTP_ENABLE) && isItemChecked(IDC_RFB_ENABLE) + ? getItemInt(IDC_HTTP_PORT) : 0); + regKey.setInt(_T("LocalHost"), isItemChecked(IDC_LOCALHOST)); regKey.setString(_T("Hosts"), TCharArray(getHosts()).buf); return true; } @@ -266,6 +276,16 @@ namespace rfb { } return strDup(hosts_str.buf); } + int rfbPortToHTTP(int rfbPort) { + int offset = -100; + if (http_port) + offset = http_port - port_number; + int httpPort = rfbPort + offset; + if (httpPort <= 0) + httpPort = rfbPort; + return httpPort; + } + protected: RegKey regKey; ConnHostDialog hostDialog; @@ -275,4 +295,4 @@ namespace rfb { }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/Desktop.h b/vncconfig/Desktop.h index a0a325a3..164269a2 100644 --- a/vncconfig/Desktop.h +++ b/vncconfig/Desktop.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -21,6 +21,7 @@ #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> #include <rfb_win32/SDisplay.h> +#include <rfb_win32/DynamicFn.h> namespace rfb { @@ -90,4 +91,4 @@ namespace rfb { }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/Hooking.h b/vncconfig/Hooking.h index b9bec15a..9be82f3a 100644 --- a/vncconfig/Hooking.h +++ b/vncconfig/Hooking.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -21,6 +21,7 @@ #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> #include <rfb_win32/SDisplay.h> +#include <rfb_win32/WMPoller.h> #include <rfb/ServerCore.h> namespace rfb { @@ -32,26 +33,48 @@ namespace rfb { HookingPage(const RegKey& rk) : PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_HOOKING)), regKey(rk) {} void initDialog() { - setItemChecked(IDC_USEHOOKS, rfb::win32::SDisplay::use_hooks); + setItemChecked(IDC_USEPOLLING, rfb::win32::SDisplay::updateMethod == 0); + setItemChecked(IDC_USEHOOKS, (rfb::win32::SDisplay::updateMethod == 1) && + rfb::win32::SDisplay::areHooksAvailable()); + enableItem(IDC_USEHOOKS, rfb::win32::SDisplay::areHooksAvailable()); + setItemChecked(IDC_USEDRIVER, (rfb::win32::SDisplay::updateMethod == 2) && + rfb::win32::SDisplay::isDriverAvailable()); + enableItem(IDC_USEDRIVER, rfb::win32::SDisplay::isDriverAvailable()); setItemChecked(IDC_POLLCONSOLES, rfb::win32::WMPoller::poll_console_windows); - setItemChecked(IDC_COMPAREFB, rfb::Server::compareFB); + setItemChecked(IDC_CAPTUREBLT, osVersion.isPlatformNT && + rfb::win32::DeviceFrameBuffer::useCaptureBlt); + enableItem(IDC_CAPTUREBLT, osVersion.isPlatformNT); + onCommand(IDC_USEHOOKS, 0); } bool onCommand(int id, int cmd) { switch (id) { + case IDC_USEPOLLING: case IDC_USEHOOKS: + case IDC_USEDRIVER: case IDC_POLLCONSOLES: - case IDC_COMPAREFB: - setChanged((rfb::win32::SDisplay::use_hooks != isItemChecked(IDC_USEHOOKS)) || + case IDC_CAPTUREBLT: + setChanged(((rfb::win32::SDisplay::updateMethod == 0) != isItemChecked(IDC_USEPOLLING)) || + ((rfb::win32::SDisplay::updateMethod == 1) != isItemChecked(IDC_USEHOOKS)) || + ((rfb::win32::SDisplay::updateMethod == 2) != isItemChecked(IDC_USEDRIVER)) || (rfb::win32::WMPoller::poll_console_windows != isItemChecked(IDC_POLLCONSOLES)) || - (rfb::Server::compareFB != isItemChecked(IDC_COMPAREFB))); + (rfb::win32::DeviceFrameBuffer::useCaptureBlt != isItemChecked(IDC_CAPTUREBLT))); + enableItem(IDC_POLLCONSOLES, isItemChecked(IDC_USEHOOKS)); break; } return false; } bool onOk() { - regKey.setBool(_T("UseHooks"), isItemChecked(IDC_USEHOOKS)); + if (isItemChecked(IDC_USEPOLLING)) + regKey.setInt(_T("UpdateMethod"), 0); + if (isItemChecked(IDC_USEHOOKS)) + regKey.setInt(_T("UpdateMethod"), 1); + if (isItemChecked(IDC_USEDRIVER)) + regKey.setInt(_T("UpdateMethod"), 2); regKey.setBool(_T("PollConsoleWindows"), isItemChecked(IDC_POLLCONSOLES)); - regKey.setBool(_T("CompareFB"), isItemChecked(IDC_COMPAREFB)); + regKey.setBool(_T("UseCaptureBlt"), isItemChecked(IDC_CAPTUREBLT)); + + // *** LEGACY compatibility *** + regKey.setBool(_T("UseHooks"), isItemChecked(IDC_USEHOOKS)); return true; } protected: @@ -62,4 +85,4 @@ namespace rfb { }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/Inputs.h b/vncconfig/Inputs.h index 2735d24a..1e0b4bac 100644 --- a/vncconfig/Inputs.h +++ b/vncconfig/Inputs.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -25,10 +25,10 @@ #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> +#include <rfb_win32/OSVersion.h> #include <rfb/ServerCore.h> namespace rfb { - namespace win32 { class InputsPage : public PropSheetPage { @@ -42,6 +42,7 @@ namespace rfb { setItemChecked(IDC_ACCEPT_CUTTEXT, rfb::Server::acceptCutText); setItemChecked(IDC_SEND_CUTTEXT, rfb::Server::sendCutText); setItemChecked(IDC_DISABLE_LOCAL_INPUTS, SDisplay::disableLocalInputs); + enableItem(IDC_DISABLE_LOCAL_INPUTS, !osVersion.isPlatformWindows); BOOL blocked = FALSE; if (SystemParametersInfo(SPI_GETBLOCKSENDINPUTRESETS, 0, &blocked, 0)) setItemChecked(IDC_AFFECT_SCREENSAVER, !blocked); @@ -78,7 +79,6 @@ namespace rfb { }; }; - }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/Legacy.cxx b/vncconfig/Legacy.cxx index 59266514..ae5d7166 100644 --- a/vncconfig/Legacy.cxx +++ b/vncconfig/Legacy.cxx @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -19,6 +19,7 @@ #include <vncconfig/Legacy.h> #include <rfb/LogWriter.h> +#include <rfb/Password.h> #include <rfb_win32/CurrentUser.h> using namespace rfb; @@ -216,10 +217,9 @@ void LegacyPage::LoadPrefs() } regKey.setInt(_T("QueryTimeout"), key.getInt(_T("QueryTimeout"), 10)); - rfb::CharArray passwd; - int length; - key.getBinary(_T("Password"), (void**)&passwd.buf, &length, 0, 0); - regKey.setBinary(_T("Password"), passwd.buf, length); + ObfuscatedPasswd passwd; + key.getBinary(_T("Password"), (void**)&passwd.buf, &passwd.length, 0, 0); + regKey.setBinary(_T("Password"), passwd.buf, passwd.length); bool enableInputs = key.getBool(_T("InputsEnabled"), true); regKey.setBool(_T("AcceptKeyEvents"), enableInputs); diff --git a/vncconfig/Legacy.h b/vncconfig/Legacy.h index e66dc56b..02059a64 100644 --- a/vncconfig/Legacy.h +++ b/vncconfig/Legacy.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -19,15 +19,14 @@ #ifndef WINVNCCONF_LEGACY #define WINVNCCONF_LEGACY -#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <lmcons.h> - #include <vncconfig/resource.h> #include <rfb_win32/Registry.h> #include <rfb_win32/Dialog.h> -#include <rfb_win32/Win32Util.h> +#include <rfb_win32/MsgBox.h> #include <rfb/ServerCore.h> +#include <rfb/secTypes.h> namespace rfb { @@ -83,4 +82,4 @@ namespace rfb { }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/PasswordDialog.cxx b/vncconfig/PasswordDialog.cxx new file mode 100644 index 00000000..d26d86f6 --- /dev/null +++ b/vncconfig/PasswordDialog.cxx @@ -0,0 +1,52 @@ +/* Copyright (C) 2004-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. + */ + +#include <vncconfig/resource.h> +#include <vncconfig/PasswordDialog.h> +#include <rfb_win32/MsgBox.h> +#include <rfb/Password.h> + +using namespace rfb; +using namespace win32; + +PasswordDialog::PasswordDialog(const RegKey& rk, bool registryInsecure_) + : Dialog(GetModuleHandle(0)), regKey(rk), registryInsecure(registryInsecure_) { +} + +bool PasswordDialog::showDialog(HWND owner) { + return Dialog::showDialog(MAKEINTRESOURCE(IDD_AUTH_VNC_PASSWD), owner); +} + +bool PasswordDialog::onOk() { + TPlainPasswd password1(getItemString(IDC_PASSWORD1)); + TPlainPasswd password2(getItemString(IDC_PASSWORD2)); + if (_tcscmp(password1.buf, password2.buf) != 0) { + MsgBox(0, _T("The supplied passwords do not match"), + MB_ICONEXCLAMATION | MB_OK); + return false; + } + if (registryInsecure && + (MsgBox(0, _T("Please note that your password cannot be stored securely on this system. ") + _T("Are you sure you wish to continue?"), + MB_YESNO | MB_ICONWARNING) == IDNO)) + return false; + PlainPasswd password(strDup(password1.buf)); + ObfuscatedPasswd obfPwd(password); + regKey.setBinary(_T("Password"), obfPwd.buf, obfPwd.length); + return true; +} diff --git a/vncconfig/PasswordDialog.h b/vncconfig/PasswordDialog.h new file mode 100644 index 00000000..dd23f8e3 --- /dev/null +++ b/vncconfig/PasswordDialog.h @@ -0,0 +1,40 @@ +/* Copyright (C) 2004-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. + */ +#ifndef WINVNCCONF_PASSWORD_DIALOG +#define WINVNCCONF_PASSWORD_DIALOG + +#include <rfb_win32/Registry.h> +#include <rfb_win32/Dialog.h> + +namespace rfb { + namespace win32 { + + class PasswordDialog : public Dialog { + public: + PasswordDialog(const RegKey& rk, bool registryInsecure_); + bool showDialog(HWND owner=0); + bool onOk(); + protected: + const RegKey& regKey; + bool registryInsecure; + }; + + }; +}; + +#endif
\ No newline at end of file diff --git a/vncconfig/Sharing.h b/vncconfig/Sharing.h index b63b39ad..872ae133 100644 --- a/vncconfig/Sharing.h +++ b/vncconfig/Sharing.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -56,4 +56,4 @@ namespace rfb { }; -#endif
\ No newline at end of file +#endif diff --git a/vncconfig/resource.h b/vncconfig/resource.h index 99e2cea3..ca1fbf5a 100644 --- a/vncconfig/resource.h +++ b/vncconfig/resource.h @@ -37,6 +37,7 @@ #define IDC_HOST_UP 1019 #define IDC_BUTTON4 1020 #define IDC_HOST_DOWN 1020 +#define IDC_AUTH_INPUTONLY_PASSWD 1020 #define IDC_HOST_EDIT 1021 #define IDC_PASSWORD2 1022 #define IDC_LEGACY_IMPORT 1023 @@ -57,19 +58,34 @@ #define IDC_COPYRIGHT 1042 #define IDC_HTTP_ENABLE 1043 #define IDC_HTTP_PORT 1044 -#define A 1045 #define IDC_BL_THRESHOLD 1046 #define IDC_BL_TIMEOUT 1047 #define IDC_AFFECT_SCREENSAVER 1048 #define IDC_LOCALHOST 1049 #define IDC_DISABLE_LOCAL_INPUTS 1050 -#define IDC_QUERY_CONNECT 1051 +#define IDC_AUTH_NT 1051 +#define IDC_AUTH_NT_CONF 1052 +#define IDC_AUTH_RA2_CONF 1053 +#define IDC_QUERY_CONNECT 1055 #define IDC_DISCONNECT_NONE 1056 #define IDC_DISCONNECT_LOCK 1057 #define IDC_DISCONNECT_LOGOFF 1058 #define IDC_REMOVE_WALLPAPER 1059 #define IDC_REMOVE_PATTERN 1060 #define IDC_DISABLE_EFFECTS 1061 +#define IDC_CAPTUREBLT 1062 +#define IDC_ENCRYPTION 1063 +#define IDC_QUERY 1064 +#define IDC_USEPOLLING 1066 +#define IDC_USEDRIVER 1068 +#define IDC_QUERY_LOGGED_ON 1069 +#define IDC_AUTH_ADMIN_PASSWD 1076 +#define IDC_AUTH_VIEWONLY_PASSWD 1077 +#define IDC_AUTH_ADMIN_ENABLE 1078 +#define IDC_AUTH_VIEWONLY_ENABLE 1079 +#define IDC_AUTH_INPUTONLY_ENABLE 1080 +#define IDC_AUTH_VNC_EXT 1081 +#define IDC_RFB_ENABLE 1082 #define ID_OPTIONS 40001 #define ID_CLOSE 40002 #define ID_ABOUT 40003 @@ -80,7 +96,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 117 #define _APS_NEXT_COMMAND_VALUE 40004 -#define _APS_NEXT_CONTROL_VALUE 1062 +#define _APS_NEXT_CONTROL_VALUE 1083 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/vncconfig/vncconfig.cxx b/vncconfig/vncconfig.cxx index b03f47a9..6c9e1c5a 100644 --- a/vncconfig/vncconfig.cxx +++ b/vncconfig/vncconfig.cxx @@ -1,5 +1,5 @@ -/* Copyright (C) 2002-2004 RealVNC Ltd. All Rights Reserved. - * +/* 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 @@ -16,7 +16,6 @@ * USA. */ -#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <commctrl.h> #include <string.h> @@ -50,8 +49,6 @@ static LogWriter vlog("main"); TStr rfb::win32::AppName("VNC Config"); -VncAuthPasswdConfigParameter vncAuthPasswd; - #ifdef _DEBUG BoolParameter captureDialogs("CaptureDialogs", "", false); #endif @@ -119,14 +116,14 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, char* cmdLine, int cmdShow) { bool warnOnChangePassword = false; try { AccessEntries access; - Sid adminSID = Sid::Administrators(); - Sid systemSID = Sid::SYSTEM(); + Sid::Administrators adminSID; + Sid::SYSTEM systemSID; access.addEntry(adminSID, KEY_ALL_ACCESS, GRANT_ACCESS); access.addEntry(systemSID, KEY_ALL_ACCESS, GRANT_ACCESS); - UserName user; + UserSID userSID; if (configKey == HKEY_CURRENT_USER) - access.addEntry(user.buf, KEY_ALL_ACCESS, GRANT_ACCESS); - AccessControlList acl = CreateACL(access); + access.addEntry(userSID, KEY_ALL_ACCESS, GRANT_ACCESS); + AccessControlList acl(CreateACL(access)); // Set the DACL, and don't allow the key to inherit its parent's DACL rootKey.setDACL(acl, false); @@ -145,9 +142,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, char* cmdLine, int cmdShow) { warnOnChangePassword = true; } - // Start the RegConfig reader, to load in existing settings - RegistryReader config; - config.setKey(configKey, _T("Software\\TightVNC\\WinVNC4")); + // Start a RegConfig thread, to load in existing settings + RegConfigThread config; + config.start(configKey, _T("Software\\TightVNC\\WinVNC4")); // Build the dialog std::list<PropSheetPage*> pages; @@ -175,8 +172,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, char* cmdLine, int cmdShow) { #else sheet.showPropSheet(0, true, false); #endif - - return 0; } catch (rdr::SystemException& e) { switch (e.err) { case ERROR_ACCESS_DENIED: @@ -186,8 +181,11 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, char* cmdLine, int cmdShow) { }; throw; } + } catch (rdr::Exception& e) { MsgBox(NULL, TStr(e.str()), MB_ICONEXCLAMATION | MB_OK); return 1; } + + return 0; } diff --git a/vncconfig/vncconfig.dsp b/vncconfig/vncconfig.dsp index 8181fe70..42d3bb28 100644 --- a/vncconfig/vncconfig.dsp +++ b/vncconfig/vncconfig.dsp @@ -125,6 +125,10 @@ SOURCE=.\Legacy.cxx # End Source File
# Begin Source File
+SOURCE=.\PasswordDialog.cxx
+# End Source File
+# Begin Source File
+
SOURCE=.\vncconfig.cxx
# End Source File
# End Group
@@ -157,6 +161,10 @@ SOURCE=.\Legacy.h # End Source File
# Begin Source File
+SOURCE=.\PasswordDialog.h
+# End Source File
+# Begin Source File
+
SOURCE=.\resource.h
# End Source File
# Begin Source File
diff --git a/vncconfig/vncconfig.rc b/vncconfig/vncconfig.rc index b4018929..bf2f9696 100644 --- a/vncconfig/vncconfig.rc +++ b/vncconfig/vncconfig.rc @@ -61,19 +61,29 @@ IDI_ICON ICON DISCARDABLE "vncconfig.ico" // Dialog // -IDD_AUTHENTICATION DIALOG DISCARDABLE 0, 0, 225, 86 +IDD_AUTHENTICATION DIALOG DISCARDABLE 0, 0, 193, 135 STYLE DS_MODALFRAME | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Authentication" FONT 8, "MS Sans Serif" BEGIN - CONTROL "No Authentication or Encryption",IDC_AUTH_NONE,"Button", - BS_AUTORADIOBUTTON | WS_GROUP,7,10,143,15 - CONTROL "VNC 3.3 Authentication, no Encryption",IDC_AUTH_VNC, - "Button",BS_AUTORADIOBUTTON,7,30,143,15 - PUSHBUTTON "Set Password",IDC_AUTH_VNC_PASSWD,155,30,55,15 - CONTROL "Prompt local user to accept incoming connections", + CONTROL "No Authentication",IDC_AUTH_NONE,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,7,10,113,15 + CONTROL "VNC Password Authentication",IDC_AUTH_VNC,"Button", + BS_AUTORADIOBUTTON,7,30,113,15 + PUSHBUTTON "Configure",IDC_AUTH_VNC_PASSWD,125,30,61,15 + CONTROL "NT Logon Authentication",IDC_AUTH_NT,"Button", + BS_AUTORADIOBUTTON,7,50,113,15 + PUSHBUTTON "Configure",IDC_AUTH_NT_CONF,125,50,61,15 + LTEXT "Encryption:",IDC_STATIC,7,70,42,15,SS_CENTERIMAGE + COMBOBOX IDC_ENCRYPTION,49,70,71,50,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "Generate Keys",IDC_AUTH_RA2_CONF,125,70,61,15 + CONTROL "Prompt local user to accept connections", IDC_QUERY_CONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 7,50,211,15 + 7,95,181,15 + CONTROL "Only prompt when there is a user logged on", + IDC_QUERY_LOGGED_ON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,20,110,166,15 END IDD_CONNECTIONS DIALOG DISCARDABLE 0, 0, 218, 198 @@ -81,11 +91,11 @@ STYLE DS_MODALFRAME | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Connections" FONT 8, "MS Sans Serif" BEGIN - LTEXT "Accept connections on port:",IDC_STATIC,7,10,138,15, - SS_CENTERIMAGE + CONTROL "Accept connections on port:",IDC_RFB_ENABLE,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,10,138,15 + EDITTEXT IDC_PORT,150,10,61,15,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Disconnect idle clients after (seconds):",IDC_STATIC,7, 25,138,15,SS_CENTERIMAGE - EDITTEXT IDC_PORT,150,10,61,15,ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_IDLE_TIMEOUT,150,25,61,15,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Serve Java viewer via HTTP on port:",IDC_HTTP_ENABLE, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,40,138,15 @@ -103,32 +113,35 @@ BEGIN PUSHBUTTON "&Edit",IDC_HOST_EDIT,150,170,55,15 END -IDD_HOOKING DIALOG DISCARDABLE 0, 0, 198, 95 +IDD_HOOKING DIALOG DISCARDABLE 0, 0, 197, 101 STYLE DS_MODALFRAME | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Hooks" +CAPTION "Capture Method" FONT 8, "MS Sans Serif" BEGIN - CONTROL "Use VNC hooks to track graphical updates",IDC_USEHOOKS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,10,184,15 + CONTROL "Poll for changes to the desktop",IDC_USEPOLLING,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,7,10,183,15 + CONTROL "Use VNC hooks to track changes",IDC_USEHOOKS,"Button", + BS_AUTORADIOBUTTON,7,25,183,15 CONTROL "Poll console windows for updates",IDC_POLLCONSOLES, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,25,184,15 - CONTROL "Filter out updates that have no effect (recommended)", - IDC_COMPAREFB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,40, - 184,15 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,40,165,15 + CONTROL "Use VNC Mirror driver to track changes",IDC_USEDRIVER, + "Button",BS_AUTORADIOBUTTON,7,55,183,15 + CONTROL "Capture alpha-blended windows",IDC_CAPTUREBLT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,70,183,15 END IDD_AUTH_VNC_PASSWD DIALOG DISCARDABLE 0, 0, 212, 70 STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "WinVNC Password" +CAPTION "VNC Server Password" FONT 8, "MS Sans Serif" BEGIN + LTEXT "New Password:",IDC_STATIC,7,10,63,15 EDITTEXT IDC_PASSWORD1,75,10,130,15,ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Confirm Password:",IDC_STATIC,7,30,63,14 EDITTEXT IDC_PASSWORD2,75,30,130,14,ES_PASSWORD | ES_AUTOHSCROLL - LTEXT "New Password:",IDC_STATIC,7,10,63,15 DEFPUSHBUTTON "OK",IDOK,100,50,50,15 PUSHBUTTON "Cancel",IDCANCEL,155,50,50,15 - LTEXT "Confirm Password:",IDC_STATIC,7,30,63,14 END IDD_LEGACY DIALOG DISCARDABLE 0, 0, 166, 92 @@ -141,18 +154,19 @@ BEGIN BS_AUTOCHECKBOX | WS_TABSTOP,7,35,152,15 END -IDD_CONN_HOST DIALOG DISCARDABLE 0, 0, 225, 47 +IDD_CONN_HOST DIALOG DISCARDABLE 0, 0, 225, 57 STYLE DS_SYSMODAL | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION CAPTION "Specify Host IP Address Pattern" FONT 8, "MS Sans Serif" BEGIN - DEFPUSHBUTTON "OK",IDOK,168,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,168,24,50,14 + EDITTEXT IDC_HOST_PATTERN,65,5,100,15,ES_AUTOHSCROLL CONTROL "&Allow",IDC_ALLOW,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,7,7,53,16 - CONTROL "&Deny",IDC_DENY,"Button",BS_AUTORADIOBUTTON,7,23,53,15 - EDITTEXT IDC_HOST_PATTERN,65,7,100,16,ES_AUTOHSCROLL - LTEXT "e.g. 192.168.0.0/255.255.0.0",IDC_STATIC,65,25,100,15 + WS_GROUP,7,5,53,15 + CONTROL "&Deny",IDC_DENY,"Button",BS_AUTORADIOBUTTON,7,20,53,15 + CONTROL "Query",IDC_QUERY,"Button",BS_AUTORADIOBUTTON,7,35,53,15 + DEFPUSHBUTTON "OK",IDOK,115,35,50,15 + PUSHBUTTON "Cancel",IDCANCEL,170,35,50,15 + LTEXT "e.g. 192.168.0.0/255.255.0.0",IDC_STATIC,65,20,100,15 END IDD_SHARING DIALOG DISCARDABLE 0, 0, 186, 95 @@ -177,10 +191,10 @@ STYLE DS_MODALFRAME | DS_CONTROL | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inputs" FONT 8, "MS Sans Serif" BEGIN - CONTROL "Accept keyboard events from clients",IDC_ACCEPT_KEYS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,25,172,15 CONTROL "Accept pointer events from clients",IDC_ACCEPT_PTR, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,10,172,15 + CONTROL "Accept keyboard events from clients",IDC_ACCEPT_KEYS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,25,172,15 CONTROL "Accept clipboard updates from clients", IDC_ACCEPT_CUTTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 7,40,172,15 @@ -216,13 +230,6 @@ STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CONTROL | WS_POPUP | WS_CAPTION | CAPTION "Desktop" FONT 8, "MS Sans Serif" BEGIN - CONTROL "Do nothing",IDC_DISCONNECT_NONE,"Button", - BS_AUTORADIOBUTTON,15,80,155,15 - CONTROL "Lock workstation",IDC_DISCONNECT_LOCK,"Button", - BS_AUTORADIOBUTTON,15,95,155,15 - CONTROL "Logoff user",IDC_DISCONNECT_LOGOFF,"Button", - BS_AUTORADIOBUTTON,15,110,155,15 - GROUPBOX "When last client disconnects",IDC_STATIC,7,70,171,60 GROUPBOX "While connected",IDC_STATIC,7,5,171,60 CONTROL "Remove wallpaper",IDC_REMOVE_WALLPAPER,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,15,15,155,15 @@ -230,6 +237,13 @@ BEGIN BS_AUTOCHECKBOX | WS_TABSTOP,15,30,155,15 CONTROL "Disable user interface effects",IDC_DISABLE_EFFECTS, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,46,155,14 + GROUPBOX "When last client disconnects",IDC_STATIC,7,70,171,60 + CONTROL "Do nothing",IDC_DISCONNECT_NONE,"Button", + BS_AUTORADIOBUTTON,15,80,155,15 + CONTROL "Lock workstation",IDC_DISCONNECT_LOCK,"Button", + BS_AUTORADIOBUTTON,15,95,155,15 + CONTROL "Logoff user",IDC_DISCONNECT_LOGOFF,"Button", + BS_AUTORADIOBUTTON,15,110,155,15 END @@ -244,18 +258,25 @@ BEGIN IDD_AUTHENTICATION, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 218 - VERTGUIDE, 150 - VERTGUIDE, 155 - VERTGUIDE, 210 + RIGHTMARGIN, 186 + VERTGUIDE, 20 + VERTGUIDE, 49 + VERTGUIDE, 120 + VERTGUIDE, 125 TOPMARGIN, 7 - BOTTOMMARGIN, 79 + BOTTOMMARGIN, 128 HORZGUIDE, 10 HORZGUIDE, 25 HORZGUIDE, 30 HORZGUIDE, 45 HORZGUIDE, 50 HORZGUIDE, 65 + HORZGUIDE, 70 + HORZGUIDE, 85 + HORZGUIDE, 90 + HORZGUIDE, 105 + HORZGUIDE, 110 + HORZGUIDE, 125 END IDD_CONNECTIONS, DIALOG @@ -290,13 +311,16 @@ BEGIN IDD_HOOKING, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 191 + RIGHTMARGIN, 190 + VERTGUIDE, 25 TOPMARGIN, 7 - BOTTOMMARGIN, 88 + BOTTOMMARGIN, 94 HORZGUIDE, 10 HORZGUIDE, 25 HORZGUIDE, 40 HORZGUIDE, 55 + HORZGUIDE, 70 + HORZGUIDE, 85 END IDD_AUTH_VNC_PASSWD, DIALOG @@ -305,6 +329,7 @@ BEGIN RIGHTMARGIN, 205 VERTGUIDE, 70 VERTGUIDE, 75 + VERTGUIDE, 90 VERTGUIDE, 100 VERTGUIDE, 150 VERTGUIDE, 155 @@ -334,12 +359,16 @@ BEGIN IDD_CONN_HOST, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 218 + RIGHTMARGIN, 220 VERTGUIDE, 60 VERTGUIDE, 65 + VERTGUIDE, 115 VERTGUIDE, 165 - TOPMARGIN, 7 - BOTTOMMARGIN, 40 + VERTGUIDE, 170 + TOPMARGIN, 5 + BOTTOMMARGIN, 50 + HORZGUIDE, 20 + HORZGUIDE, 35 END IDD_SHARING, DIALOG @@ -390,21 +419,9 @@ BEGIN IDD_DESKTOP, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 178 - VERTGUIDE, 15 - VERTGUIDE, 170 - TOPMARGIN, 5 - BOTTOMMARGIN, 130 - HORZGUIDE, 15 - HORZGUIDE, 30 - HORZGUIDE, 45 - HORZGUIDE, 60 - HORZGUIDE, 65 - HORZGUIDE, 70 - HORZGUIDE, 80 - HORZGUIDE, 95 - HORZGUIDE, 110 - HORZGUIDE, 125 + RIGHTMARGIN, 182 + TOPMARGIN, 7 + BOTTOMMARGIN, 32 END END #endif // APSTUDIO_INVOKED @@ -417,8 +434,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,0,0,26 - PRODUCTVERSION 4,0,0,26 + FILEVERSION 4,1,1,0 + PRODUCTVERSION 4,1,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -435,15 +452,15 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Constantin Kaplinsky\0" - VALUE "FileDescription", "VNC Server Configuration Applet for Win32\0" - VALUE "FileVersion", "4.0\0" - VALUE "InternalName", "VNC Config 4.0\0" - VALUE "LegalCopyright", "Copyright (C) 1998-2004 [many holders]\0" + VALUE "FileDescription", "TightVNC Server Configuration Applet for Win32\0" + VALUE "FileVersion", "4.1.1\0" + VALUE "InternalName", "vncconfig\0" + VALUE "LegalCopyright", "Copyright (C) 1998-2005 [many holders]\0" VALUE "LegalTrademarks", "TightVNC\0" VALUE "OriginalFilename", "vncconfig.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "TightVNC Config 4.0\0" - VALUE "ProductVersion", "4.0\0" + VALUE "ProductName", "TightVNC Configurator\0" + VALUE "ProductVersion", "4.1.1\0" VALUE "SpecialBuild", "\0" END END |