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 \ -lws2_32 \
-lcomctl32 \ -lcomctl32 \
-lwinhttp \ -lwinhttp \
-lwtsapi32 -lwtsapi32 \
-lcrypt32
openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h
$(RCCOMPILE) -i $< -o $@ $(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 dnl 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
AC_PREREQ(2.59) 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_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_DEFINE([PACKAGE_VERSION_RESOURCE], [_GUI_VERSION,0,0,0], [Version in windows resource format])
AC_CONFIG_AUX_DIR([.]) AC_CONFIG_AUX_DIR([.])

70
main.c
View File

@ -28,6 +28,7 @@
#include <wtsapi32.h> #include <wtsapi32.h>
#include <prsht.h> #include <prsht.h>
#include <pbt.h> #include <pbt.h>
#include <commdlg.h>
#include "tray.h" #include "tray.h"
#include "openvpn.h" #include "openvpn.h"
@ -53,6 +54,7 @@
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
static void ShowSettingsDialog(); static void ShowSettingsDialog();
void CloseApplication(HWND hwnd); void CloseApplication(HWND hwnd);
void ImportConfigFile();
/* Class name and window title */ /* Class name and window title */
TCHAR szClassName[ ] = _T("OpenVPN-GUI"); TCHAR szClassName[ ] = _T("OpenVPN-GUI");
@ -178,6 +180,9 @@ int WINAPI _tWinMain (HINSTANCE hThisInstance,
exit(1); exit(1);
} }
if (!IsUserAdmin())
CheckIServiceStatus();
BuildFileList(); BuildFileList();
if (!VerifyAutoConnections()) { if (!VerifyAutoConnections()) {
exit(1); exit(1);
@ -349,6 +354,9 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
ShowChangePassphraseDialog(&o.conn[LOWORD(wParam) - IDM_PASSPHRASEMENU]); ShowChangePassphraseDialog(&o.conn[LOWORD(wParam) - IDM_PASSPHRASEMENU]);
} }
#endif #endif
if (LOWORD(wParam) == IDM_IMPORT) {
ImportConfigFile();
}
if (LOWORD(wParam) == IDM_SETTINGS) { if (LOWORD(wParam) == IDM_SETTINGS) {
ShowSettingsDialog(); ShowSettingsDialog();
} }
@ -525,6 +533,68 @@ CloseApplication(HWND hwnd)
DestroyWindow(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 #ifdef DEBUG
void PrintDebugMsg(TCHAR *msg) void PrintDebugMsg(TCHAR *msg)
{ {

View File

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

132
misc.c
View File

@ -24,6 +24,7 @@
#endif #endif
#include <windows.h> #include <windows.h>
#include <wincrypt.h>
#include <tchar.h> #include <tchar.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@ -33,6 +34,35 @@
#include "manage.h" #include "manage.h"
#include "misc.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. * Helper function to convert UCS-2 text from a dialog item to UTF-8.
* Caller must free *str if *len != 0. * 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 * Ensures the given directory exists, by checking for and
* creating missing parts of the path. * creating missing parts of the path.
@ -190,3 +297,28 @@ ForceForegroundWindow(HWND hWnd)
return ret; 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 #define MISC_H
BOOL ManagementCommandFromInput(connection_t *, LPCSTR, HWND, int); BOOL ManagementCommandFromInput(connection_t *, LPCSTR, HWND, int);
BOOL ManagementCommandFromInputBase64(connection_t *, LPCSTR, HWND, int, int);
BOOL EnsureDirExists(LPTSTR); BOOL EnsureDirExists(LPTSTR);
@ -30,4 +31,6 @@ BOOL streq(LPCSTR, LPCSTR);
BOOL wcsbegins(LPCWSTR, LPCWSTR); BOOL wcsbegins(LPCWSTR, LPCWSTR);
BOOL ForceForegroundWindow(HWND); BOOL ForceForegroundWindow(HWND);
BOOL IsUserAdmin(VOID);
#endif #endif

View File

@ -56,6 +56,11 @@
#define ID_EDT_AUTH_USER 181 #define ID_EDT_AUTH_USER 181
#define ID_EDT_AUTH_PASS 182 #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 */ /* Proxy Settings Dialog */
#define ID_DLG_PROXY 200 #define ID_DLG_PROXY 200
#define ID_RB_PROXY_OPENVPN 210 #define ID_RB_PROXY_OPENVPN 210
@ -107,6 +112,7 @@
#define IDS_MENU_SERVICEONLY_STOP 1020 #define IDS_MENU_SERVICEONLY_STOP 1020
#define IDS_MENU_SERVICEONLY_RESTART 1021 #define IDS_MENU_SERVICEONLY_RESTART 1021
#define IDS_MENU_ASK_STOP_SERVICE 1022 #define IDS_MENU_ASK_STOP_SERVICE 1022
#define IDS_MENU_IMPORT 1023
/* LogViewer Dialog */ /* LogViewer Dialog */
#define IDS_ERR_START_LOG_VIEWER 1101 #define IDS_ERR_START_LOG_VIEWER 1101
@ -156,6 +162,8 @@
#define IDS_ERR_CONN_SCRIPT_FAILED 1248 #define IDS_ERR_CONN_SCRIPT_FAILED 1248
#define IDS_ERR_RUN_CONN_SCRIPT_TIMEOUT 1249 #define IDS_ERR_RUN_CONN_SCRIPT_TIMEOUT 1249
#define IDS_ERR_CONFIG_EXIST 1251 #define IDS_ERR_CONFIG_EXIST 1251
#define IDS_NFO_CONN_TIMEOUT 1252
#define IDS_NFO_NO_CONFIGS 1253
/* Program Startup Related */ /* Program Startup Related */
#define IDS_ERR_OPEN_DEBUG_FILE 1301 #define IDS_ERR_OPEN_DEBUG_FILE 1301
@ -225,6 +233,10 @@
#define IDS_ERR_OPEN_SCMGR 1706 #define IDS_ERR_OPEN_SCMGR 1706
#define IDS_ERR_STOP_SERVICE 1707 #define IDS_ERR_STOP_SERVICE 1707
#define IDS_NFO_RESTARTED 1708 #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 */ /* Registry Related */
#define IDS_ERR_GET_WINDOWS_DIR 1801 #define IDS_ERR_GET_WINDOWS_DIR 1801
@ -239,5 +251,12 @@
#define IDS_ERR_OPEN_WRITE_REG 1810 #define IDS_ERR_OPEN_WRITE_REG 1810
#define IDS_ERR_READ_SET_KEY 1811 #define IDS_ERR_READ_SET_KEY 1811
#define IDS_ERR_WRITE_REGVALUE 1812 #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 #endif

View File

@ -52,6 +52,12 @@ extern options_t o;
const TCHAR *cfgProp = _T("conn"); 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 * Receive banner on connection to management interface
* Format: <BANNER> * 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 INT_PTR CALLBACK
UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
connection_t *c; auth_param_t *param;
switch (msg) switch (msg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
/* Set connection for this dialog and show it */ /* Set connection for this dialog and show it */
c = (connection_t *) lParam; param = (auth_param_t *) lParam;
SetProp(hwndDlg, cfgProp, (HANDLE) c); SetProp(hwndDlg, cfgProp, (HANDLE) param);
if (c->state == resuming) 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); ForceForegroundWindow(hwndDlg);
else else
SetForegroundWindow(hwndDlg); SetForegroundWindow(hwndDlg);
break; break;
case WM_COMMAND: case WM_COMMAND:
c = (connection_t *) GetProp(hwndDlg, cfgProp); param = (auth_param_t *) GetProp(hwndDlg, cfgProp);
switch (LOWORD(wParam)) switch (LOWORD(wParam))
{ {
case ID_EDT_AUTH_USER: case ID_EDT_AUTH_USER:
@ -234,14 +254,17 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
break; break;
case IDOK: case IDOK:
ManagementCommandFromInput(c, "username \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_USER); ManagementCommandFromInput(param->c, "username \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_USER);
ManagementCommandFromInput(c, "password \"Auth\" \"%s\"", hwndDlg, ID_EDT_AUTH_PASS); 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)); EndDialog(hwndDlg, LOWORD(wParam));
return TRUE; return TRUE;
case IDCANCEL: case IDCANCEL:
EndDialog(hwndDlg, LOWORD(wParam)); EndDialog(hwndDlg, LOWORD(wParam));
StopOpenVPN(c); StopOpenVPN(param->c);
return TRUE; return TRUE;
} }
break; break;
@ -251,6 +274,9 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
case WM_NCDESTROY: case WM_NCDESTROY:
param = (auth_param_t *) GetProp(hwndDlg, cfgProp);
if (param->challenge_str) free(param->challenge_str);
free(param);
RemoveProp(hwndDlg, cfgProp); RemoveProp(hwndDlg, cfgProp);
break; break;
} }
@ -317,7 +343,21 @@ OnPassword(connection_t *c, char *msg)
if (strstr(msg, "'Auth'")) 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'")) else if (strstr(msg, "'Private Key'"))
{ {
@ -341,6 +381,7 @@ void
OnStop(connection_t *c, UNUSED char *msg) OnStop(connection_t *c, UNUSED char *msg)
{ {
UINT txt_id, msg_id; UINT txt_id, msg_id;
TCHAR *msg_xtra;
SetMenuStatus(c, disconnected); SetMenuStatus(c, disconnected);
switch (c->state) switch (c->state)
@ -366,9 +407,13 @@ OnStop(connection_t *c, UNUSED char *msg)
case resuming: case resuming:
case connecting: case connecting:
case reconnecting: case reconnecting:
case timedout:
/* We have failed to (re)connect */ /* We have failed to (re)connect */
txt_id = c->state == reconnecting ? IDS_NFO_STATE_FAILED_RECONN : IDS_NFO_STATE_FAILED; 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_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; c->state = disconnecting;
CheckAndSetTrayIcon(); CheckAndSetTrayIcon();
@ -382,7 +427,7 @@ OnStop(connection_t *c, UNUSED char *msg)
SetForegroundWindow(c->hwndStatus); SetForegroundWindow(c->hwndStatus);
ShowWindow(c->hwndStatus, SW_SHOW); ShowWindow(c->hwndStatus, SW_SHOW);
} }
ShowLocalizedMsg(msg_id, c->config_name); ShowLocalizedMsg(msg_id, msg_xtra);
SendMessage(c->hwndStatus, WM_CLOSE, 0, 0); SendMessage(c->hwndStatus, WM_CLOSE, 0, 0);
break; break;
@ -682,27 +727,29 @@ StartOpenVPN(connection_t *c)
/* Create a management interface password */ /* Create a management interface password */
GetRandomPassword(c->manage.password, sizeof(c->manage.password) - 1); GetRandomPassword(c->manage.password, sizeof(c->manage.password) - 1);
/* Construct command line */ /* Construct command line -- put log first */
_sntprintf_0(cmdline, _T("openvpn --config \"%s\" " _sntprintf_0(cmdline, _T("openvpn --log%s \"%s\" --config \"%s\" "
"--setenv IV_GUI_VER \"%S\" --service %s 0 --log%s \"%s\" --auth-retry interact " "--setenv IV_GUI_VER \"%S\" --service %s 0 --auth-retry interact "
"--management %S %hd stdin --management-query-passwords %s" "--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, (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), inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port),
(o.proxy_source != config ? _T("--management-query-proxy ") : _T(""))); (o.proxy_source != config ? _T("--management-query-proxy ") : _T("")));
/* Try to open the service pipe */ /* 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); 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; DWORD size = _tcslen(c->config_dir) + _tcslen(options) + sizeof(c->manage.password) + 3;
TCHAR startup_info[1024]; TCHAR startup_info[1024];
DWORD dwMode = PIPE_READMODE_MESSAGE; DWORD dwMode = PIPE_READMODE_MESSAGE;
if (!SetNamedPipeHandleState(service, &dwMode, NULL, NULL)) if (!SetNamedPipeHandleState(service, &dwMode, NULL, NULL))
{ {
// TODO: add error message ShowLocalizedMsg (IDS_ERR_ACCESS_SERVICE_PIPE);
CloseHandle(c->exit_event); CloseHandle(c->exit_event);
goto out; goto out;
} }
@ -714,7 +761,7 @@ StartOpenVPN(connection_t *c)
if (!WriteFile(service, startup_info, size * sizeof (TCHAR), &written, NULL)) if (!WriteFile(service, startup_info, size * sizeof (TCHAR), &written, NULL))
{ {
// TODO: add error message ShowLocalizedMsg (IDS_ERR_WRITE_SERVICE_PIPE);
CloseHandle(c->exit_event); CloseHandle(c->exit_event);
goto out; goto out;
} }

View File

@ -61,6 +61,22 @@ match(const WIN32_FIND_DATA *find, const TCHAR *ext)
return match_false; 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 static int
ConfigAlreadyExists(TCHAR *newconfig) ConfigAlreadyExists(TCHAR *newconfig)
@ -111,6 +127,8 @@ BuildFileList()
HANDLE find_handle; HANDLE find_handle;
TCHAR find_string[MAX_PATH]; TCHAR find_string[MAX_PATH];
TCHAR subdir_table[MAX_CONFIG_SUBDIRS][MAX_PATH]; TCHAR subdir_table[MAX_CONFIG_SUBDIRS][MAX_PATH];
TCHAR fullpath[MAX_PATH];
static int warn_no_configs = 1;
int subdirs = 0; int subdirs = 0;
int i; int i;
@ -134,7 +152,9 @@ BuildFileList()
match_t match_type = match(&find_obj, o.ext_string); match_t match_type = match(&find_obj, o.ext_string);
if (match_type == match_file) 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) else if (match_type == match_dir)
{ {
@ -184,4 +204,9 @@ BuildFileList()
FindClose(find_handle); 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, disconnecting,
suspending, suspending,
suspended, suspended,
resuming resuming,
timedout
} conn_state_t; } conn_state_t;
/* Connections parameters */ /* Connections parameters */

View File

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

View File

@ -49,6 +49,24 @@ BEGIN
PUSHBUTTON "Abbrechen", IDCANCEL, 90, 42, 52, 14 PUSHBUTTON "Abbrechen", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Annuller", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Cancel", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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_CONNECTED_SINCE "\nConnected since: "
IDS_TIP_ASSIGNED_IP "\nAssigned IP: %s" IDS_TIP_ASSIGNED_IP "\nAssigned IP: %s"
IDS_MENU_SERVICE "OpenVPN Service" IDS_MENU_SERVICE "OpenVPN Service"
IDS_MENU_IMPORT "Import file…"
IDS_MENU_SETTINGS "Settings…" IDS_MENU_SETTINGS "Settings…"
IDS_MENU_CLOSE "Exit" IDS_MENU_CLOSE "Exit"
IDS_MENU_CONNECT "Connect" IDS_MENU_CONNECT "Connect"
@ -182,6 +201,7 @@ BEGIN
/* OpenVPN */ /* 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_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_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_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" 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 " \ IDS_ERR_CONFIG_EXIST "There already exist a config file named '%s'. You cannot " \
"have multiple config files with the same name, even if " \ "have multiple config files with the same name, even if " \
"they reside in diffrent folders." "they reside in diffrent folders."
IDS_NFO_CONN_TIMEOUT "Connecting to management interface failed.\n" \
"View log file (%s) for more details."
/* main - Resources */ /* main - Resources */
IDS_ERR_OPEN_DEBUG_FILE "Error opening debug file (%s) for output." IDS_ERR_OPEN_DEBUG_FILE "Error opening debug file (%s) for output."
IDS_ERR_CREATE_PATH "Could not create %s path:\n%s" 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_OPEN_SCMGR "OpenSCManager failed (%d)"
IDS_ERR_STOP_SERVICE "Failed to stop OpenVPN Service" IDS_ERR_STOP_SERVICE "Failed to stop OpenVPN Service"
IDS_NFO_RESTARTED "OpenVPN Service Restarted." 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 */ /* registry */
IDS_ERR_GET_WINDOWS_DIR "Error getting Windows Directory." 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_GET_PROGRAM_DIR "Error getting ""Program"" folder name."
IDS_ERR_OPEN_REGISTRY "Error opening registry for reading (HKLM\\SOFTWARE\\OpenVPN).\n " \ IDS_ERR_OPEN_REGISTRY "Error opening registry for reading (HKLM\\SOFTWARE\\OpenVPN).\n " \
"OpenVPN is probably not installed" "OpenVPN is probably not installed"
@ -338,4 +367,10 @@ BEGIN
"once as Administrator to update the registry." "once as Administrator to update the registry."
IDS_ERR_READ_SET_KEY "Error reading and setting registry key ""%s""." 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""." 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 END

View File

@ -48,6 +48,24 @@ BEGIN
PUSHBUTTON "Cancelar", IDCANCEL, 90, 42, 52, 14 PUSHBUTTON "Cancelar", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Peruuta", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Annuler", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Annulla", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "キャンセル", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Annuleren", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Avbryt", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Anuluj", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Cancelar", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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_CONNECTED_SINCE "\nConectado desde: "
IDS_TIP_ASSIGNED_IP "\nIP atribuído: %s" IDS_TIP_ASSIGNED_IP "\nIP atribuído: %s"
IDS_MENU_SERVICE "Serviço OpenVPN" IDS_MENU_SERVICE "Serviço OpenVPN"
IDS_MENU_IMPORT "Importar arquivo…"
IDS_MENU_SETTINGS "Configurações…" IDS_MENU_SETTINGS "Configurações…"
IDS_MENU_CLOSE "Sair" IDS_MENU_CLOSE "Sair"
IDS_MENU_CONNECT "Conectar" IDS_MENU_CONNECT "Conectar"
@ -324,4 +343,10 @@ BEGIN
"uma vez como Administrador para alterar o registro." "uma vez como Administrador para alterar o registro."
IDS_ERR_READ_SET_KEY "Erro ao ler e ajustar chave de registro ""%s""." 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""." 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 END

View File

@ -50,6 +50,24 @@ BEGIN
PUSHBUTTON "Отмена", IDCANCEL, 100, 42, 52, 14 PUSHBUTTON "Отмена", IDCANCEL, 100, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Avbryt", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Çıkış", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "Скасувати", IDCANCEL, 100, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER 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 PUSHBUTTON "取消", IDCANCEL, 90, 42, 52, 14
END 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 */ /* Status Dialog */
ID_DLG_STATUS DIALOG 6, 18, 380, 210 ID_DLG_STATUS DIALOG 6, 18, 380, 210
STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER STYLE WS_SIZEBOX | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | DS_CENTER

View File

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

View File

@ -241,6 +241,40 @@ int MyReStartService()
return(false); 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() int CheckServiceStatus()
{ {

2
tray.c
View File

@ -91,6 +91,7 @@ CreatePopupMenus()
AppendMenu(hMenu, MF_SEPARATOR, 0, 0); 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_SETTINGS, LoadLocalizedString(IDS_MENU_SETTINGS));
AppendMenu(hMenu, MF_STRING ,IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE)); AppendMenu(hMenu, MF_STRING ,IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE));
@ -116,6 +117,7 @@ CreatePopupMenus()
AppendMenu(hMenu, MF_SEPARATOR, 0, 0); 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_SETTINGS, LoadLocalizedString(IDS_MENU_SETTINGS));
AppendMenu(hMenu, MF_STRING, IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE)); 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_SETTINGS 221
#define IDM_CLOSE 223 #define IDM_CLOSE 223
#define IDM_IMPORT 224
#define IDM_CONNECTMENU 300 #define IDM_CONNECTMENU 300
#define IDM_DISCONNECTMENU (MAX_CONFIGS + IDM_CONNECTMENU) #define IDM_DISCONNECTMENU (MAX_CONFIGS + IDM_CONNECTMENU)