pull/24/merge
jaiabishek 2016-03-03 11:48:14 +00:00
commit 81144da3df
32 changed files with 705 additions and 31 deletions

View File

@ -98,7 +98,8 @@ openvpn_gui_LDADD = \
-lws2_32 \
-lcomctl32 \
-lwinhttp \
-lwtsapi32
-lwtsapi32 \
-lcrypt32
openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h
$(RCCOMPILE) -i $< -o $@

View File

@ -19,7 +19,7 @@ dnl distribution); if not, write to the Free Software Foundation, Inc.,
dnl 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
AC_PREREQ(2.59)
define([_GUI_VERSION], [10])
define([_GUI_VERSION], [11])
AC_INIT([OpenVPN GUI],[_GUI_VERSION],[openvpn-devel@lists.sourceforge.net],[openvpn-gui],[https://github.com/openvpn/openvpn-gui/])
AC_DEFINE([PACKAGE_VERSION_RESOURCE], [_GUI_VERSION,0,0,0], [Version in windows resource format])
AC_CONFIG_AUX_DIR([.])

70
main.c
View File

@ -28,6 +28,7 @@
#include <wtsapi32.h>
#include <prsht.h>
#include <pbt.h>
#include <commdlg.h>
#include "tray.h"
#include "openvpn.h"
@ -53,6 +54,7 @@
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
static void ShowSettingsDialog();
void CloseApplication(HWND hwnd);
void ImportConfigFile();
/* Class name and window title */
TCHAR szClassName[ ] = _T("OpenVPN-GUI");
@ -178,6 +180,9 @@ int WINAPI _tWinMain (HINSTANCE hThisInstance,
exit(1);
}
if (!IsUserAdmin())
CheckIServiceStatus();
BuildFileList();
if (!VerifyAutoConnections()) {
exit(1);
@ -349,6 +354,9 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
ShowChangePassphraseDialog(&o.conn[LOWORD(wParam) - IDM_PASSPHRASEMENU]);
}
#endif
if (LOWORD(wParam) == IDM_IMPORT) {
ImportConfigFile();
}
if (LOWORD(wParam) == IDM_SETTINGS) {
ShowSettingsDialog();
}
@ -525,6 +533,68 @@ CloseApplication(HWND hwnd)
DestroyWindow(hwnd);
}
void
ImportConfigFile()
{
TCHAR filter[37];
_sntprintf_0(filter, _T("*.%s%c*.%s%c"), o.ext_string, _T('\0'), o.ext_string, _T('\0'));
OPENFILENAME fn;
TCHAR source[MAX_PATH] = _T("");
fn.lStructSize = sizeof(OPENFILENAME);
fn.hwndOwner = NULL;
fn.lpstrFilter = filter;
fn.lpstrCustomFilter = NULL;
fn.nFilterIndex = 1;
fn.lpstrFile = source;
fn.nMaxFile = MAX_PATH;
fn.lpstrFileTitle = NULL;
fn.lpstrInitialDir = NULL;
fn.lpstrTitle = NULL;
fn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST;
fn.lpstrDefExt = NULL;
if (GetOpenFileName(&fn))
{
TCHAR destination[MAX_PATH];
PTCHAR fileName = source + fn.nFileOffset;
_sntprintf_0(destination, _T("%s\\%s"), o.config_dir, fileName);
destination[_tcslen(destination) - _tcslen(o.ext_string) - 1] = _T('\0');
if (EnsureDirExists(destination))
{
_sntprintf_0(destination, _T("%s\\%s"), destination, fileName);
if (!CopyFile(source, destination, TRUE))
{
if (GetLastError() == ERROR_FILE_EXISTS)
{
fileName[_tcslen(fileName) - _tcslen(o.ext_string) - 1] = _T('\0');
ShowLocalizedMsg(IDS_ERR_IMPORT_EXISTS, fileName);
return;
}
}
else
{
ShowLocalizedMsg(IDS_NFO_IMPORT_SUCCESS);
return;
}
}
ShowLocalizedMsg(IDS_ERR_IMPORT_FAILED, destination);
}
}
#ifdef DEBUG
void PrintDebugMsg(TCHAR *msg)
{

View File

@ -54,7 +54,6 @@ InitManagement(const mgmt_rtmsg_handler *handler)
}
}
/*
* Connect to the OpenVPN management interface and register
* asynchronous socket event notification for it
@ -205,7 +204,11 @@ OnManagement(SOCKET sk, LPARAM lParam)
if (time(NULL) < c->manage.timeout)
connect(c->manage.sk, (SOCKADDR *)&c->manage.skaddr, sizeof(c->manage.skaddr));
else
{
/* Connection to MI timed out. */
c->state = timedout;
rtmsg_handler[stop](c, "");
}
}
break;

132
misc.c
View File

@ -24,6 +24,7 @@
#endif
#include <windows.h>
#include <wincrypt.h>
#include <tchar.h>
#include <string.h>
#include <stdlib.h>
@ -33,6 +34,35 @@
#include "manage.h"
#include "misc.h"
/*
* Helper function to do base64 conversion through CryptoAPI
*/
static void
Base64Encode(const char *input, int input_len, char **output)
{
DWORD output_len;
if (!CryptBinaryToStringA((const BYTE *) input, (DWORD) input_len,
CRYPT_STRING_BASE64, NULL, &output_len) || output_len == 0)
{
*output = NULL;
return;
}
*output = (char *)malloc(output_len);
if (!CryptBinaryToStringA((const BYTE *) input, (DWORD) input_len,
CRYPT_STRING_BASE64, *output, &output_len))
{
free(*output);
*output = NULL;
return;
}
/* Trim trailing "\r\n" manually.
Actually they can be stripped by adding CRYPT_STRING_NOCRLF to dwFlags,
but Windows XP/2003 does not support this flag. */
if(output_len > 1 && (*output)[output_len - 1] == '\x0A'
&& (*output)[output_len - 2] == '\x0D')
(*output)[output_len - 2] = 0;
}
/*
* Helper function to convert UCS-2 text from a dialog item to UTF-8.
* Caller must free *str if *len != 0.
@ -125,6 +155,83 @@ out:
}
/*
* Generate a management command from double user inputs and send it
*/
BOOL
ManagementCommandFromInputBase64(connection_t *c, LPCSTR fmt, HWND hDlg,int id, int id2)
{
BOOL retval = FALSE;
LPSTR input, input2, input_b64, input2_b64, cmd;
int input_len, input2_len, cmd_len, pos;
GetDlgItemTextUtf8(hDlg, id, &input, &input_len);
GetDlgItemTextUtf8(hDlg, id2, &input2, &input2_len);
/* Escape input if needed */
for (pos = 0; pos < input_len; ++pos)
{
if (input[pos] == '\\' || input[pos] == '"')
{
LPSTR buf = realloc(input, ++input_len + 1);
if (buf == NULL)
goto out;
input = buf;
memmove(input + pos + 1, input + pos, input_len - pos + 1);
input[pos] = '\\';
pos += 1;
}
}
for (pos = 0; pos < input2_len; ++pos)
{
if (input2[pos] == '\\' || input2[pos] == '"')
{
LPSTR buf = realloc(input2, ++input2_len + 1);
if (buf == NULL)
goto out;
input2 = buf;
memmove(input2 + pos + 1, input2 + pos, input2_len - pos + 1);
input2[pos] = '\\';
pos += 1;
}
}
Base64Encode(input, input_len, &input_b64);
Base64Encode(input2, input2_len, &input2_b64);
cmd_len = input_len * 2 + input2_len * 2 + strlen(fmt);
cmd = malloc(cmd_len);
if (cmd)
{
snprintf(cmd, cmd_len, fmt, input_b64, input2_b64);
retval = ManagementCommand(c, cmd, NULL, regular);
free(cmd);
}
free(input_b64);
free(input2_b64);
out:
/* Clear buffers with potentially secret content */
if (input_len)
{
memset(input, 'x', input_len);
SetDlgItemTextA(hDlg, id, input);
free(input);
}
if (input2_len)
{
memset(input2, 'x', input2_len);
SetDlgItemTextA(hDlg, id2, input2);
free(input2);
}
return retval;
}
/*
* Ensures the given directory exists, by checking for and
* creating missing parts of the path.
@ -190,3 +297,28 @@ ForceForegroundWindow(HWND hWnd)
return ret;
}
/*
* Check user has admin rights
* Taken from https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx
* Returns true if the calling process token has the local Administrators group enabled
* in its SID. Assumes the caller is not impersonating and has access to open its own
* process token.
*/
BOOL IsUserAdmin(VOID)
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY};
PSID AdministratorsGroup;
b = AllocateAndInitializeSid (&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if(b)
{
CheckTokenMembership(NULL, AdministratorsGroup, &b);
FreeSid(AdministratorsGroup);
}
return(b);
}

3
misc.h
View File

@ -23,6 +23,7 @@
#define MISC_H
BOOL ManagementCommandFromInput(connection_t *, LPCSTR, HWND, int);
BOOL ManagementCommandFromInputBase64(connection_t *, LPCSTR, HWND, int, int);
BOOL EnsureDirExists(LPTSTR);
@ -30,4 +31,6 @@ BOOL streq(LPCSTR, LPCSTR);
BOOL wcsbegins(LPCWSTR, LPCWSTR);
BOOL ForceForegroundWindow(HWND);
BOOL IsUserAdmin(VOID);
#endif

View File

@ -56,6 +56,11 @@
#define ID_EDT_AUTH_USER 181
#define ID_EDT_AUTH_PASS 182
/* Auth Username/Password/Challenge Dialog */
#define ID_DLG_AUTH_CHALLENGE 183
#define ID_TXT_AUTH_CHALLENGE 184
#define ID_EDT_AUTH_CHALLENGE 185
/* Proxy Settings Dialog */
#define ID_DLG_PROXY 200
#define ID_RB_PROXY_OPENVPN 210
@ -107,6 +112,7 @@
#define IDS_MENU_SERVICEONLY_STOP 1020
#define IDS_MENU_SERVICEONLY_RESTART 1021
#define IDS_MENU_ASK_STOP_SERVICE 1022
#define IDS_MENU_IMPORT 1023
/* LogViewer Dialog */
#define IDS_ERR_START_LOG_VIEWER 1101
@ -156,6 +162,8 @@
#define IDS_ERR_CONN_SCRIPT_FAILED 1248
#define IDS_ERR_RUN_CONN_SCRIPT_TIMEOUT 1249
#define IDS_ERR_CONFIG_EXIST 1251
#define IDS_NFO_CONN_TIMEOUT 1252
#define IDS_NFO_NO_CONFIGS 1253
/* Program Startup Related */
#define IDS_ERR_OPEN_DEBUG_FILE 1301
@ -225,6 +233,10 @@
#define IDS_ERR_OPEN_SCMGR 1706
#define IDS_ERR_STOP_SERVICE 1707
#define IDS_NFO_RESTARTED 1708
#define IDS_ERR_ACCESS_SERVICE_PIPE 1709
#define IDS_ERR_WRITE_SERVICE_PIPE 1710
#define IDS_ERR_NOTSTARTED_ISERVICE 1711
#define IDS_ERR_INSTALL_ISERVICE 1712
/* Registry Related */
#define IDS_ERR_GET_WINDOWS_DIR 1801
@ -239,5 +251,12 @@
#define IDS_ERR_OPEN_WRITE_REG 1810
#define IDS_ERR_READ_SET_KEY 1811
#define IDS_ERR_WRITE_REGVALUE 1812
#define IDS_ERR_GET_PROFILE_DIR 1813
/* Importation Related */
#define IDS_ERR_IMPORT_EXISTS 1901
#define IDS_ERR_IMPORT_FAILED 1902
#define IDS_NFO_IMPORT_SUCCESS 1903
#endif

View File

@ -52,6 +52,12 @@ extern options_t o;
const TCHAR *cfgProp = _T("conn");
typedef struct {
connection_t *c;
int challenge_echo;
char *challenge_str;
} auth_param_t;
/*
* Receive banner on connection to management interface
* Format: <BANNER>
@ -202,27 +208,41 @@ OnStateChange(connection_t *c, char *data)
/*
* DialogProc for OpenVPN username/password auth dialog windows
* DialogProc for OpenVPN username/password/challenge auth dialog windows
*/
INT_PTR CALLBACK
UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
connection_t *c;
auth_param_t *param;
switch (msg)
{
case WM_INITDIALOG:
/* Set connection for this dialog and show it */
c = (connection_t *) lParam;
SetProp(hwndDlg, cfgProp, (HANDLE) c);
if (c->state == resuming)
param = (auth_param_t *) lParam;
SetProp(hwndDlg, cfgProp, (HANDLE) param);
if (param->challenge_str)
{
int wchars_num = MultiByteToWideChar(CP_UTF8, 0, param->challenge_str, -1, NULL, 0);
LPWSTR wstr = (LPWSTR)malloc(sizeof(WCHAR) * wchars_num);
HWND wnd_challenge = GetDlgItem(hwndDlg, ID_EDT_AUTH_CHALLENGE);
MultiByteToWideChar(CP_UTF8, 0, param->challenge_str, -1, wstr, wchars_num);
SetDlgItemTextW(hwndDlg, ID_TXT_AUTH_CHALLENGE, wstr);
free(wstr);
/* Set/Remove style ES_PASSWORD by SetWindowLong(GWL_STYLE) does nothing,
send EM_SETPASSWORDCHAR just works. */
if(param->challenge_echo)
SendMessage(wnd_challenge, EM_SETPASSWORDCHAR, 0, 0);
}
if (param->c->state == resuming)
ForceForegroundWindow(hwndDlg);
else
SetForegroundWindow(hwndDlg);
break;
case WM_COMMAND:
c = (connection_t *) GetProp(hwndDlg, cfgProp);
param = (auth_param_t *) GetProp(hwndDlg, cfgProp);
switch (LOWORD(wParam))
{
case ID_EDT_AUTH_USER:
@ -234,14 +254,17 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
break;
case IDOK:
ManagementCommandFromInput(c, "username \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_USER);
ManagementCommandFromInput(c, "password \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_PASS);
ManagementCommandFromInput(param->c, "username \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_USER);
if (param->challenge_str)
ManagementCommandFromInputBase64(param->c, "password \"Auth\" \"SCRV1:%s:%s\"", hwndDlg, ID_EDT_AUTH_PASS, ID_EDT_AUTH_CHALLENGE);
else
ManagementCommandFromInput(param->c, "password \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_PASS);
EndDialog(hwndDlg, LOWORD(wParam));
return TRUE;
case IDCANCEL:
EndDialog(hwndDlg, LOWORD(wParam));
StopOpenVPN(c);
StopOpenVPN(param->c);
return TRUE;
}
break;
@ -251,6 +274,9 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
return TRUE;
case WM_NCDESTROY:
param = (auth_param_t *) GetProp(hwndDlg, cfgProp);
if (param->challenge_str) free(param->challenge_str);
free(param);
RemoveProp(hwndDlg, cfgProp);
break;
}
@ -317,7 +343,21 @@ OnPassword(connection_t *c, char *msg)
if (strstr(msg, "'Auth'"))
{
LocalizedDialogBoxParam(ID_DLG_AUTH, UserAuthDialogFunc, (LPARAM) c);
char* chstr = strstr(msg, "SC:");
auth_param_t *param = (auth_param_t *) malloc(sizeof(auth_param_t));
param->c = c;
if (chstr)
{
param->challenge_echo = *(chstr + 3) != '0';
param->challenge_str = strdup(chstr + 5);
LocalizedDialogBoxParam(ID_DLG_AUTH_CHALLENGE, UserAuthDialogFunc, (LPARAM) param);
}
else
{
param->challenge_echo = 0;
param->challenge_str = NULL;
LocalizedDialogBoxParam(ID_DLG_AUTH, UserAuthDialogFunc, (LPARAM) param);
}
}
else if (strstr(msg, "'Private Key'"))
{
@ -341,6 +381,7 @@ void
OnStop(connection_t *c, UNUSED char *msg)
{
UINT txt_id, msg_id;
TCHAR *msg_xtra;
SetMenuStatus(c, disconnected);
switch (c->state)
@ -366,9 +407,13 @@ OnStop(connection_t *c, UNUSED char *msg)
case resuming:
case connecting:
case reconnecting:
case timedout:
/* We have failed to (re)connect */
txt_id = c->state == reconnecting ? IDS_NFO_STATE_FAILED_RECONN : IDS_NFO_STATE_FAILED;
msg_id = c->state == reconnecting ? IDS_NFO_RECONN_FAILED : IDS_NFO_CONN_FAILED;
msg_xtra = c->state == timedout ? c->log_path : c->config_name;
if (c->state == timedout)
msg_id = IDS_NFO_CONN_TIMEOUT;
c->state = disconnecting;
CheckAndSetTrayIcon();
@ -382,7 +427,7 @@ OnStop(connection_t *c, UNUSED char *msg)
SetForegroundWindow(c->hwndStatus);
ShowWindow(c->hwndStatus, SW_SHOW);
}
ShowLocalizedMsg(msg_id, c->config_name);
ShowLocalizedMsg(msg_id, msg_xtra);
SendMessage(c->hwndStatus, WM_CLOSE, 0, 0);
break;
@ -682,27 +727,29 @@ StartOpenVPN(connection_t *c)
/* Create a management interface password */
GetRandomPassword(c->manage.password, sizeof(c->manage.password) - 1);
/* Construct command line */
_sntprintf_0(cmdline, _T("openvpn --config \"%s\" "
"--setenv IV_GUI_VER \"%S\" --service %s 0 --log%s \"%s\" --auth-retry interact "
/* Construct command line -- put log first */
_sntprintf_0(cmdline, _T("openvpn --log%s \"%s\" --config \"%s\" "
"--setenv IV_GUI_VER \"%S\" --service %s 0 --auth-retry interact "
"--management %S %hd stdin --management-query-passwords %s"
"--management-hold"), c->config_file, PACKAGE_STRING, exit_event_name,
"--management-hold"),
(o.append_string[0] == '1' ? _T("-append") : _T("")), c->log_path,
c->config_file, PACKAGE_STRING, exit_event_name,
inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port),
(o.proxy_source != config ? _T("--management-query-proxy ") : _T("")));
/* Try to open the service pipe */
service = CreateFile(_T("\\\\.\\pipe\\openvpn\\service"),
if (!IsUserAdmin())
service = CreateFile(_T("\\\\.\\pipe\\openvpn\\service"),
GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (service != INVALID_HANDLE_VALUE)
if (service && service != INVALID_HANDLE_VALUE)
{
DWORD size = _tcslen(c->config_dir) + _tcslen(options) + sizeof(c->manage.password) + 3;
TCHAR startup_info[1024];
DWORD dwMode = PIPE_READMODE_MESSAGE;
if (!SetNamedPipeHandleState(service, &dwMode, NULL, NULL))
{
// TODO: add error message
ShowLocalizedMsg (IDS_ERR_ACCESS_SERVICE_PIPE);
CloseHandle(c->exit_event);
goto out;
}
@ -714,7 +761,7 @@ StartOpenVPN(connection_t *c)
if (!WriteFile(service, startup_info, size * sizeof (TCHAR), &written, NULL))
{
// TODO: add error message
ShowLocalizedMsg (IDS_ERR_WRITE_SERVICE_PIPE);
CloseHandle(c->exit_event);
goto out;
}

View File

@ -61,6 +61,22 @@ match(const WIN32_FIND_DATA *find, const TCHAR *ext)
return match_false;
}
static bool
CheckReadAccess (const TCHAR *path)
{
HANDLE h;
bool ret = FALSE;
h = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if ( h != INVALID_HANDLE_VALUE )
{
ret = TRUE;
CloseHandle (h);
}
return ret;
}
static int
ConfigAlreadyExists(TCHAR *newconfig)
@ -111,6 +127,8 @@ BuildFileList()
HANDLE find_handle;
TCHAR find_string[MAX_PATH];
TCHAR subdir_table[MAX_CONFIG_SUBDIRS][MAX_PATH];
TCHAR fullpath[MAX_PATH];
static int warn_no_configs = 1;
int subdirs = 0;
int i;
@ -134,7 +152,9 @@ BuildFileList()
match_t match_type = match(&find_obj, o.ext_string);
if (match_type == match_file)
{
AddConfigFileToList(o.num_configs++, find_obj.cFileName, o.config_dir);
_sntprintf_0(fullpath, _T("%s\\%s"), o.config_dir, find_obj.cFileName);
if (CheckReadAccess (fullpath))
AddConfigFileToList(o.num_configs++, find_obj.cFileName, o.config_dir);
}
else if (match_type == match_dir)
{
@ -184,4 +204,9 @@ BuildFileList()
FindClose(find_handle);
}
if (o.num_configs == 0 && warn_no_configs)
{
ShowLocalizedMsg(IDS_NFO_NO_CONFIGS, o.config_dir);
warn_no_configs = 0;
}
}

View File

@ -67,7 +67,8 @@ typedef enum {
disconnecting,
suspending,
suspended,
resuming
resuming,
timedout
} conn_state_t;
/* Connections parameters */

View File

@ -42,6 +42,7 @@ GetRegistryKeys()
TCHAR windows_dir[MAX_PATH];
TCHAR temp_path[MAX_PATH];
TCHAR openvpn_path[MAX_PATH];
TCHAR profile_dir[MAX_PATH];
HKEY regkey;
if (!GetWindowsDirectory(windows_dir, _countof(windows_dir))) {
@ -50,6 +51,11 @@ GetRegistryKeys()
return(false);
}
if (SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, SHGFP_TYPE_CURRENT, profile_dir) != S_OK) {
ShowLocalizedMsg(IDS_ERR_GET_PROFILE_DIR);
return(false);
}
/* Get path to OpenVPN installation. */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OpenVPN"), 0, KEY_READ, &regkey)
!= ERROR_SUCCESS)
@ -78,7 +84,7 @@ GetRegistryKeys()
if (!GetRegKey(_T("exe_path"), o.exe_path,
temp_path, _countof(o.exe_path))) return(false);
_sntprintf_0(temp_path, _T("%slog"), openvpn_path);
_sntprintf_0(temp_path, _T("%s\\OpenVPN\\log"), profile_dir);
if (!GetRegKey(_T("log_dir"), o.log_dir,
temp_path, _countof(o.log_dir))) return(false);
@ -178,7 +184,7 @@ int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD
return(true);
}
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
status = RegOpenKeyEx(HKEY_CURRENT_USER,
_T("SOFTWARE\\OpenVPN-GUI"),
0,
KEY_READ,
@ -186,7 +192,7 @@ int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD
if (status != ERROR_SUCCESS)
{
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
if (RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\OpenVPN-GUI"),
0,
_T(""),
@ -197,7 +203,7 @@ int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD
&dwDispos) != ERROR_SUCCESS)
{
/* error creating registry key */
ShowLocalizedMsg(IDS_ERR_CREATE_REG_KEY);
ShowLocalizedMsg(IDS_ERR_CREATE_REG_HKCU_KEY, _T("OpenVPN-GUI"));
return(false);
}
}
@ -208,7 +214,7 @@ int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD
if (status != ERROR_SUCCESS || type != REG_SZ)
{
/* key did not exist - set default value */
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
status = RegOpenKeyEx(HKEY_CURRENT_USER,
_T("SOFTWARE\\OpenVPN-GUI"),
0,
KEY_READ | KEY_WRITE,
@ -216,7 +222,7 @@ int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD
if (status != ERROR_SUCCESS) {
/* can't open registry for writing */
ShowLocalizedMsg(IDS_ERR_OPEN_WRITE_REG);
ShowLocalizedMsg(IDS_ERR_WRITE_REGVALUE, _T("OpenVPN-GUI"), name);
return(false);
}
if(!SetRegistryValue(openvpn_key_write, name, default_data))

View File

@ -49,6 +49,24 @@ BEGIN
PUSHBUTTON "Abbrechen", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
BEGIN
LTEXT "Benutzer:", 0, 6, 9, 50, 10
LTEXT "Passwort:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "Ok", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Abbrechen", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Annuller", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Brugernavn:", 0, 6, 9, 50, 10
LTEXT "Password:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Annuller", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -49,6 +49,24 @@ BEGIN
PUSHBUTTON "Cancel", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Username:", 0, 6, 9, 50, 10
LTEXT "Password:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Cancel", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER
@ -160,6 +178,7 @@ BEGIN
IDS_TIP_CONNECTED_SINCE "\nConnected since: "
IDS_TIP_ASSIGNED_IP "\nAssigned IP: %s"
IDS_MENU_SERVICE "OpenVPN Service"
IDS_MENU_IMPORT "Import file…"
IDS_MENU_SETTINGS "Settings…"
IDS_MENU_CLOSE "Exit"
IDS_MENU_CONNECT "Connect"
@ -182,6 +201,7 @@ BEGIN
/* OpenVPN */
IDS_ERR_MANY_CONFIGS "OpenVPN GUI does not support more than %d configs. Please contact the author if you have the need for more."
IDS_NFO_NO_CONFIGS "No readable connection profiles (config files) found at %s"
IDS_ERR_ONE_CONN_OLD_VER "You can only have one connection running at the same time when using an older version on OpenVPN than 2.0-beta6."
IDS_ERR_STOP_SERV_OLD_VER "You cannot use OpenVPN GUI to start a connection while the OpenVPN Service is running (with OpenVPN 1.5/1.6). Stop OpenVPN Service first if you want to use OpenVPN GUI."
IDS_ERR_CREATE_EVENT "CreateEvent failed on exit event: %s"
@ -226,6 +246,8 @@ BEGIN
IDS_ERR_CONFIG_EXIST "There already exist a config file named '%s'. You cannot " \
"have multiple config files with the same name, even if " \
"they reside in diffrent folders."
IDS_NFO_CONN_TIMEOUT "Connecting to management interface failed.\n" \
"View log file (%s) for more details."
/* main - Resources */
IDS_ERR_OPEN_DEBUG_FILE "Error opening debug file (%s) for output."
IDS_ERR_CREATE_PATH "Could not create %s path:\n%s"
@ -322,9 +344,16 @@ BEGIN
IDS_ERR_OPEN_SCMGR "OpenSCManager failed (%d)"
IDS_ERR_STOP_SERVICE "Failed to stop OpenVPN Service"
IDS_NFO_RESTARTED "OpenVPN Service Restarted."
IDS_ERR_ACCESS_SERVICE_PIPE "Access to service pipe failed."
IDS_ERR_WRITE_SERVICE_PIPE "Writing to service pipe failed."
IDS_ERR_INSTALL_ISERVICE """OpenVPNServiceInteractive"" is not installed.\n"
"Tasks requiring administrative access may not work."
IDS_ERR_NOTSTARTED_ISERVICE """OpenVPNServiceInteractive"" is not started.\n"
"Tasks requiring administrative access may not work."
/* registry */
IDS_ERR_GET_WINDOWS_DIR "Error getting Windows Directory."
IDS_ERR_GET_PROFILE_DIR "Error getting User Profile Directory."
IDS_ERR_GET_PROGRAM_DIR "Error getting ""Program"" folder name."
IDS_ERR_OPEN_REGISTRY "Error opening registry for reading (HKLM\\SOFTWARE\\OpenVPN).\n " \
"OpenVPN is probably not installed"
@ -338,4 +367,10 @@ BEGIN
"once as Administrator to update the registry."
IDS_ERR_READ_SET_KEY "Error reading and setting registry key ""%s""."
IDS_ERR_WRITE_REGVALUE "Error writing registry value ""HKEY_CURRENT_USER\\%s\\%s""."
/* importation */
IDS_ERR_IMPORT_EXISTS "A config named ""%s"" already exists."
IDS_ERR_IMPORT_FAILED "Failed to import file. The following path could not be created.\n\n" \
"%s\n\nMake sure you have the right permissions."
IDS_NFO_IMPORT_SUCCESS "File imported successfully."
END

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Cancelar", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Usuario:", 0, 6, 9, 50, 10
LTEXT "Password:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Cancelar", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Peruuta", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Käyttäjänimi:", 0, 6, 9, 50, 10
LTEXT "Salasana:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Peruuta", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Annuler", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
BEGIN
LTEXT "Utilisateur:", 0, 6, 9, 50, 10
LTEXT "Mot de passe:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Annuler", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Annulla", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
BEGIN
LTEXT "Nome utente:", 0, 6, 9, 50, 10
LTEXT "Password:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Annulla", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -51,6 +51,24 @@ BEGIN
PUSHBUTTON "キャンセル", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
BEGIN
LTEXT "ユーザー名:", 0, 6, 9, 50, 10
LTEXT "パスワード:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "キャンセル", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Annuleren", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT
BEGIN
LTEXT "Gebruikersnaam:", 0, 6, 9, 50, 10
LTEXT "Wachtwoord:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Annuleren", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -49,6 +49,24 @@ BEGIN
PUSHBUTTON "Avbryt", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_NORWEGIAN, SUBLANG_DEFAULT
BEGIN
LTEXT "Brukernavn:", 0, 6, 9, 50, 10
LTEXT "Passord:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Avbryt", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Anuluj", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Użytkownik:", 0, 6, 9, 50, 10
LTEXT "Hasło:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Anuluj", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Cancelar", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_PORTUGUESE, SUBLANG_DEFAULT
BEGIN
LTEXT "Usuário:", 0, 6, 9, 50, 10
LTEXT "Senha:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Cancelar", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER
@ -147,6 +165,7 @@ BEGIN
IDS_TIP_CONNECTED_SINCE "\nConectado desde: "
IDS_TIP_ASSIGNED_IP "\nIP atribuído: %s"
IDS_MENU_SERVICE "Serviço OpenVPN"
IDS_MENU_IMPORT "Importar arquivo…"
IDS_MENU_SETTINGS "Configurações…"
IDS_MENU_CLOSE "Sair"
IDS_MENU_CONNECT "Conectar"
@ -324,4 +343,10 @@ BEGIN
"uma vez como Administrador para alterar o registro."
IDS_ERR_READ_SET_KEY "Erro ao ler e ajustar chave de registro ""%s""."
IDS_ERR_WRITE_REGVALUE "Erro ao gravar valor da chave de registro ""HKEY_CURRENT_USER\\%s\\%s""."
/* importation */
IDS_ERR_IMPORT_EXISTS "Já existe uma configuração com o nome ""%s""."
IDS_ERR_IMPORT_FAILED "Falha ao importar o arquivo. O seguinte caminho não pôde ser criado.\n\n" \
"%s\n\nCertifique-se de que você possui as permissões necessárias."
IDS_NFO_IMPORT_SUCCESS "Arquivo importado com sucesso."
END

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Отмена", IDCANCEL, 100, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
BEGIN
LTEXT "Имя пользователя:", 0, 6, 9, 50, 10
LTEXT "Пароль:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Отмена", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Avbryt", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Användarnamn:", 0, 6, 9, 50, 10
LTEXT "Lösenord:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Avbryt", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Çıkış", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
BEGIN
LTEXT "Kullanıcı Adı:", 0, 6, 9, 50, 10
LTEXT "Şifre:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "Tamam", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Çıkış", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Скасувати", IDCANCEL, 100, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
BEGIN
LTEXT "Ім'я користувача:", 0, 6, 9, 50, 10
LTEXT "Пароль:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "OK", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Скасувати", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "取消", IDCANCEL, 90, 42, 52, 14
END
/* Auth Username/Password/Challenge Dialog */
ID_DLG_AUTH_CHALLENGE DIALOG 6, 18, 160, 96
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
CAPTION "OpenVPN - User Authentication"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
BEGIN
LTEXT "使用者名稱:", 0, 6, 9, 50, 10
LTEXT "密碼:", 0, 6, 26, 50, 10
LTEXT "Response:", 0, 6, 60, 50, 10
EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
LTEXT "", ID_TXT_AUTH_CHALLENGE, 6, 43, 148, 10
EDITTEXT ID_EDT_AUTH_CHALLENGE, 60, 57, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "確認", IDOK, 20, 76, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "取消", IDCANCEL, 90, 76, 52, 14
END
/* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

@ -21,7 +21,7 @@
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>

View File

@ -241,6 +241,40 @@ int MyReStartService()
return(false);
}
bool
CheckIServiceStatus()
{
SC_HANDLE schSCManager;
SC_HANDLE schService;
SERVICE_STATUS ssStatus;
// Open a handle to the SC Manager database.
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (NULL == schSCManager)
return(false);
schService = OpenService(schSCManager, _T("OpenVPNServiceInteractive"),
SERVICE_QUERY_STATUS);
if (schService == NULL &&
GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
{
/* warn that iservice is not installed */
ShowLocalizedMsg(IDS_ERR_INSTALL_ISERVICE);
return(false);
}
if (!QueryServiceStatus(schService, &ssStatus))
return(false);
if (ssStatus.dwCurrentState != SERVICE_RUNNING)
{
/* warn that iservice is not started */
ShowLocalizedMsg(IDS_ERR_NOTSTARTED_ISERVICE);
return(false);
}
return true;
}
int CheckServiceStatus()
{

2
tray.c
View File

@ -91,6 +91,7 @@ CreatePopupMenus()
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
}
AppendMenu(hMenu, MF_STRING, IDM_IMPORT, LoadLocalizedString(IDS_MENU_IMPORT));
AppendMenu(hMenu, MF_STRING ,IDM_SETTINGS, LoadLocalizedString(IDS_MENU_SETTINGS));
AppendMenu(hMenu, MF_STRING ,IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE));
@ -116,6 +117,7 @@ CreatePopupMenus()
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
}
AppendMenu(hMenu, MF_STRING, IDM_IMPORT, LoadLocalizedString(IDS_MENU_IMPORT));
AppendMenu(hMenu, MF_STRING, IDM_SETTINGS, LoadLocalizedString(IDS_MENU_SETTINGS));
AppendMenu(hMenu, MF_STRING, IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE));

1
tray.h
View File

@ -33,6 +33,7 @@
#define IDM_SETTINGS 221
#define IDM_CLOSE 223
#define IDM_IMPORT 224
#define IDM_CONNECTMENU 300
#define IDM_DISCONNECTMENU (MAX_CONFIGS + IDM_CONNECTMENU)