mirror of https://github.com/OpenVPN/openvpn-gui
Merge 5084fb104f
into ac2d8a23c6
commit
81144da3df
|
@ -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 $@
|
||||
|
|
|
@ -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
70
main.c
|
@ -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)
|
||||
{
|
||||
|
|
5
manage.c
5
manage.c
|
@ -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
132
misc.c
|
@ -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
3
misc.h
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
85
openvpn.c
85
openvpn.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,7 +67,8 @@ typedef enum {
|
|||
disconnecting,
|
||||
suspending,
|
||||
suspended,
|
||||
resuming
|
||||
resuming,
|
||||
timedout
|
||||
} conn_state_t;
|
||||
|
||||
/* Connections parameters */
|
||||
|
|
18
registry.c
18
registry.c
|
@ -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, ®key)
|
||||
!= 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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel
|
||||
level="highestAvailable"
|
||||
level="asInvoker"
|
||||
uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
|
|
34
service.c
34
service.c
|
@ -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
2
tray.c
|
@ -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));
|
||||
|
||||
|
|
Loading…
Reference in New Issue