From fe5a1c9b71bfd9d5a9f3c8f4009c3af8b0d1a1fd Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Sat, 27 Feb 2016 13:51:13 +0800 Subject: [PATCH] Adding static-challenge support --- Makefile.am | 3 +- misc.c | 107 +++++++++++++++++++++++++++++++++ misc.h | 1 + openvpn-gui-res.h | 5 ++ openvpn.c | 60 +++++++++++++++--- res/openvpn-gui-res-de.rc | 18 ++++++ res/openvpn-gui-res-dk.rc | 18 ++++++ res/openvpn-gui-res-en.rc | 18 ++++++ res/openvpn-gui-res-es.rc | 18 ++++++ res/openvpn-gui-res-fi.rc | 18 ++++++ res/openvpn-gui-res-fr.rc | 18 ++++++ res/openvpn-gui-res-it.rc | 18 ++++++ res/openvpn-gui-res-jp.rc | 18 ++++++ res/openvpn-gui-res-nl.rc | 18 ++++++ res/openvpn-gui-res-no.rc | 18 ++++++ res/openvpn-gui-res-pl.rc | 18 ++++++ res/openvpn-gui-res-pt.rc | 18 ++++++ res/openvpn-gui-res-ru.rc | 18 ++++++ res/openvpn-gui-res-se.rc | 18 ++++++ res/openvpn-gui-res-tr.rc | 18 ++++++ res/openvpn-gui-res-ua.rc | 18 ++++++ res/openvpn-gui-res-zh-hant.rc | 18 ++++++ 22 files changed, 471 insertions(+), 11 deletions(-) diff --git a/Makefile.am b/Makefile.am index ed47121..8b78fc1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 $@ diff --git a/misc.c b/misc.c index 0326f97..0777d03 100644 --- a/misc.c +++ b/misc.c @@ -24,6 +24,7 @@ #endif #include +#include #include #include #include @@ -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. diff --git a/misc.h b/misc.h index 8792755..f463a6a 100644 --- a/misc.h +++ b/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); diff --git a/openvpn-gui-res.h b/openvpn-gui-res.h index 865d2ab..633d621 100644 --- a/openvpn-gui-res.h +++ b/openvpn-gui-res.h @@ -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 diff --git a/openvpn.c b/openvpn.c index e78e407..e7da90d 100644 --- a/openvpn.c +++ b/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: @@ -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'")) { diff --git a/res/openvpn-gui-res-de.rc b/res/openvpn-gui-res-de.rc index c744137..126bf63 100644 --- a/res/openvpn-gui-res-de.rc +++ b/res/openvpn-gui-res-de.rc @@ -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 diff --git a/res/openvpn-gui-res-dk.rc b/res/openvpn-gui-res-dk.rc index 2feba1f..1c3c35a 100644 --- a/res/openvpn-gui-res-dk.rc +++ b/res/openvpn-gui-res-dk.rc @@ -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 diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index 54bfc1f..999086c 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -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 diff --git a/res/openvpn-gui-res-es.rc b/res/openvpn-gui-res-es.rc index 58f55ec..a1c37fa 100644 --- a/res/openvpn-gui-res-es.rc +++ b/res/openvpn-gui-res-es.rc @@ -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 diff --git a/res/openvpn-gui-res-fi.rc b/res/openvpn-gui-res-fi.rc index 5d3d0a4..1d7a3bd 100644 --- a/res/openvpn-gui-res-fi.rc +++ b/res/openvpn-gui-res-fi.rc @@ -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 diff --git a/res/openvpn-gui-res-fr.rc b/res/openvpn-gui-res-fr.rc index 1b08ef8..e92a78b 100644 --- a/res/openvpn-gui-res-fr.rc +++ b/res/openvpn-gui-res-fr.rc @@ -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 diff --git a/res/openvpn-gui-res-it.rc b/res/openvpn-gui-res-it.rc index 9765b26..f91c0d2 100644 --- a/res/openvpn-gui-res-it.rc +++ b/res/openvpn-gui-res-it.rc @@ -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 diff --git a/res/openvpn-gui-res-jp.rc b/res/openvpn-gui-res-jp.rc index 7fc85d8..41b570a 100644 --- a/res/openvpn-gui-res-jp.rc +++ b/res/openvpn-gui-res-jp.rc @@ -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 diff --git a/res/openvpn-gui-res-nl.rc b/res/openvpn-gui-res-nl.rc index 74c3fd0..b7c6b93 100644 --- a/res/openvpn-gui-res-nl.rc +++ b/res/openvpn-gui-res-nl.rc @@ -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 diff --git a/res/openvpn-gui-res-no.rc b/res/openvpn-gui-res-no.rc index fd2c8d2..9ea2fd7 100644 --- a/res/openvpn-gui-res-no.rc +++ b/res/openvpn-gui-res-no.rc @@ -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 diff --git a/res/openvpn-gui-res-pl.rc b/res/openvpn-gui-res-pl.rc index 943e967..6c3e0c8 100644 --- a/res/openvpn-gui-res-pl.rc +++ b/res/openvpn-gui-res-pl.rc @@ -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 diff --git a/res/openvpn-gui-res-pt.rc b/res/openvpn-gui-res-pt.rc index 78ed4c2..36ff0da 100644 --- a/res/openvpn-gui-res-pt.rc +++ b/res/openvpn-gui-res-pt.rc @@ -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 diff --git a/res/openvpn-gui-res-ru.rc b/res/openvpn-gui-res-ru.rc index b7c19df..d24341b 100644 --- a/res/openvpn-gui-res-ru.rc +++ b/res/openvpn-gui-res-ru.rc @@ -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 diff --git a/res/openvpn-gui-res-se.rc b/res/openvpn-gui-res-se.rc index b679958..ddecb56 100644 --- a/res/openvpn-gui-res-se.rc +++ b/res/openvpn-gui-res-se.rc @@ -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 diff --git a/res/openvpn-gui-res-tr.rc b/res/openvpn-gui-res-tr.rc index acc86a2..efd0672 100644 --- a/res/openvpn-gui-res-tr.rc +++ b/res/openvpn-gui-res-tr.rc @@ -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 diff --git a/res/openvpn-gui-res-ua.rc b/res/openvpn-gui-res-ua.rc index ba476ea..ef97937 100644 --- a/res/openvpn-gui-res-ua.rc +++ b/res/openvpn-gui-res-ua.rc @@ -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 diff --git a/res/openvpn-gui-res-zh-hant.rc b/res/openvpn-gui-res-zh-hant.rc index d12d018..be3325b 100644 --- a/res/openvpn-gui-res-zh-hant.rc +++ b/res/openvpn-gui-res-zh-hant.rc @@ -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