From 77deef95f053af89937becfb9b385f3a95e870ab Mon Sep 17 00:00:00 2001 From: tantra35 Date: Tue, 10 Jun 2025 13:17:12 +0300 Subject: [PATCH 1/5] add ability to save pin for smartcards --- openvpn.c | 50 ++++++++++++++++++++++++++++++++-- plap/stub.c | 19 +++++++++++++ res/openvpn-gui-res-cs.rc | 7 +++-- res/openvpn-gui-res-de.rc | 7 +++-- res/openvpn-gui-res-dk.rc | 7 +++-- res/openvpn-gui-res-en.rc | 7 +++-- res/openvpn-gui-res-es.rc | 7 +++-- res/openvpn-gui-res-fa.rc | 7 +++-- res/openvpn-gui-res-fi.rc | 7 +++-- res/openvpn-gui-res-fr.rc | 7 +++-- res/openvpn-gui-res-it.rc | 7 +++-- res/openvpn-gui-res-jp.rc | 7 +++-- res/openvpn-gui-res-kr.rc | 7 +++-- res/openvpn-gui-res-nl.rc | 7 +++-- res/openvpn-gui-res-no.rc | 7 +++-- res/openvpn-gui-res-pl.rc | 7 +++-- res/openvpn-gui-res-pt.rc | 7 +++-- res/openvpn-gui-res-ru.rc | 7 +++-- res/openvpn-gui-res-se.rc | 7 +++-- res/openvpn-gui-res-tr.rc | 7 +++-- res/openvpn-gui-res-ua.rc | 7 +++-- res/openvpn-gui-res-zh-hans.rc | 7 +++-- res/openvpn-gui-res-zh-hant.rc | 7 +++-- save_pass.c | 21 ++++++++++++++ save_pass.h | 6 ++++ 25 files changed, 178 insertions(+), 65 deletions(-) diff --git a/openvpn.c b/openvpn.c index 1eebf6a..09b1506 100644 --- a/openvpn.c +++ b/openvpn.c @@ -843,6 +843,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) case WM_INITDIALOG: param = (auth_param_t *)lParam; TRY_SETPROP(hwndDlg, cfgProp, (HANDLE)param); + BOOL lenableOKBtn = FALSE; WCHAR *wstr = Widen(param->str); if (!wstr) @@ -880,6 +881,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) SetWindowPos(hwndDlg, NULL, 0, 0, rect.right, rect.bottom, SWP_NOMOVE); PrintDebug(L"Window resized to = %d %d", rect.right, rect.bottom); } + ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE); } else if (param->flags & FLAG_PASS_TOKEN) { @@ -887,11 +889,37 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) SetDlgItemText(hwndDlg, ID_TXT_DESCRIPTION, LoadLocalizedString(IDS_NFO_TOKEN_PASSWORD_REQUEST, param->id)); + + if (RecallSmartCardPin(param->c->config_name, password)) + { + SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); + lenableOKBtn = TRUE; + + if (password[0] != L'\0' && param->c->failed_auth_attempts == 0) + { + /* smart card pin available: skip dialog + * if silent_connection is on, else auto submit after a few seconds. + * User can interrupt. + */ + SetFocus(GetDlgItem(hwndDlg, IDOK)); + UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ + AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); + } + else if (param->c->failed_auth_attempts) + { + SendMessage( + GetDlgItem(hwndDlg, ID_EDT_RESPONSE), EM_SETSEL, 0, MAKELONG(0, -1)); + } + + SecureZeroMemory(password, sizeof(password)); + } } else { WriteStatusLog(param->c, L"GUI> ", L"Unknown password request", false); SetDlgItemText(hwndDlg, ID_TXT_DESCRIPTION, wstr); + ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE); } free(wstr); @@ -916,7 +944,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) else { /* disable OK button until response is filled-in */ - EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDOK), lenableOKBtn); ResetPasswordReveal(GetDlgItem(hwndDlg, ID_EDT_RESPONSE), GetDlgItem(hwndDlg, ID_PASSWORD_REVEAL), 0); @@ -931,7 +959,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) switch (LOWORD(wParam)) { case ID_EDT_RESPONSE: - if (!(param->flags & FLAG_CR_ECHO)) + if (!(param->flags & FLAG_CR_ECHO) && HIWORD(wParam) != EN_KILLFOCUS) { ResetPasswordReveal(GetDlgItem(hwndDlg, ID_EDT_RESPONSE), GetDlgItem(hwndDlg, ID_PASSWORD_REVEAL), @@ -945,6 +973,19 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) } break; + case ID_CHK_SAVE_PASS: + param->c->flags ^= FLAG_SAVE_AUTH_PASS; + if (param->c->flags & FLAG_SAVE_AUTH_PASS) + { + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); + } + else + { + DeleteSavedSmartCardPin(param->c->config_name); + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_UNCHECKED); + } + break; + case IDOK: if (GetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password, _countof(password)) && !validate_input(password, L"\n")) @@ -1001,6 +1042,11 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) PrintDebug(L"Send passwd to mgmt with format: '%hs'", fmt); ManagementCommandFromInput(param->c, fmt, hwndDlg, ID_EDT_RESPONSE); free(fmt); + + if (param->flags & FLAG_PASS_TOKEN && param->c->flags & FLAG_SAVE_AUTH_PASS) + { + SaveSmartCardPin(param->c->config_name, password); + } } else /* no memory? send stop signal */ { diff --git a/plap/stub.c b/plap/stub.c index 02f425d..e45123b 100644 --- a/plap/stub.c +++ b/plap/stub.c @@ -129,6 +129,13 @@ SaveAuthPass(UNUSED const WCHAR *config_name, UNUSED const WCHAR *password) { return 1; } + +int +SaveSmartCardPin(UNUSED const WCHAR *config_name, UNUSED const WCHAR *username) +{ + return 1; +} + int SaveUsername(UNUSED const WCHAR *config_name, UNUSED const WCHAR *username) { @@ -151,12 +158,24 @@ RecallUsername(UNUSED const WCHAR *config_name, UNUSED WCHAR *username) return 0; } +int +RecallSmartCardPin(UNUSED const WCHAR *config_name, UNUSED WCHAR *pin) +{ + return 0; +} + void DeleteSavedAuthPass(UNUSED const WCHAR *config_name) { return; } +void +DeleteSavedSmartCardPin(const WCHAR *config_name) +{ + return; +} + void DeleteSavedKeyPass(UNUSED const WCHAR *config_name) { diff --git a/res/openvpn-gui-res-cs.rc b/res/openvpn-gui-res-cs.rc index 88d59b2..faef7f7 100644 --- a/res/openvpn-gui-res-cs.rc +++ b/res/openvpn-gui-res-cs.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpověď na výzvu" @@ -89,8 +89,9 @@ BEGIN LTEXT "Odpověď:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Zrušit", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Uložit heslo", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Zrušit", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-de.rc b/res/openvpn-gui-res-de.rc index c14b04a..205bf71 100644 --- a/res/openvpn-gui-res-de.rc +++ b/res/openvpn-gui-res-de.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -89,8 +89,9 @@ BEGIN LTEXT "&Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "&Abbrechen", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Passwort &speichern", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "&Abbrechen", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-dk.rc b/res/openvpn-gui-res-dk.rc index 363b7e7..8e9f07e 100644 --- a/res/openvpn-gui-res-dk.rc +++ b/res/openvpn-gui-res-dk.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -90,8 +90,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Annuller", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Husk kodeord", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Annuller", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index dd9ee1b..0da5726 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -89,8 +89,9 @@ BEGIN LTEXT "&Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "&Cancel", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "&Cancel", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-es.rc b/res/openvpn-gui-res-es.rc index 524da42..6303ac1 100644 --- a/res/openvpn-gui-res-es.rc +++ b/res/openvpn-gui-res-es.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -88,8 +88,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fa.rc b/res/openvpn-gui-res-fa.rc index 0a10684..056094b 100644 --- a/res/openvpn-gui-res-fa.rc +++ b/res/openvpn-gui-res-fa.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST | WS_EX_RTLREADING | WS_EX_LAYOUTRTL CAPTION "OpenVPN – پاسخ چالش" @@ -91,8 +91,9 @@ BEGIN LTEXT "پاسخ :", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "بسیار خوب", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "لغو", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "نگه داشتن رمز عبور", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "بسیار خوب", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "لغو", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fi.rc b/res/openvpn-gui-res-fi.rc index 196a14c..5d33946 100644 --- a/res/openvpn-gui-res-fi.rc +++ b/res/openvpn-gui-res-fi.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Haastemenetelmä" @@ -89,8 +89,9 @@ BEGIN LTEXT "Vastaus:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Peruuta", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Tallenna salasana", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Peruuta", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fr.rc b/res/openvpn-gui-res-fr.rc index d56402f..210bb79 100644 --- a/res/openvpn-gui-res-fr.rc +++ b/res/openvpn-gui-res-fr.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Réponse de défi" @@ -88,8 +88,9 @@ BEGIN LTEXT "Réponse:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Annuler", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Enregistrer mot de passe", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Annuler", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-it.rc b/res/openvpn-gui-res-it.rc index 5467459..f8fa300 100644 --- a/res/openvpn-gui-res-it.rc +++ b/res/openvpn-gui-res-it.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -88,8 +88,9 @@ BEGIN LTEXT "&Risposta:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "&Annulla", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "&Ricorda password", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "&Annulla", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-jp.rc b/res/openvpn-gui-res-jp.rc index d3c73ac..69ff8ba 100644 --- a/res/openvpn-gui-res-jp.rc +++ b/res/openvpn-gui-res-jp.rc @@ -79,7 +79,7 @@ BEGIN LTEXT "", ID_TXT_WARNING, 6, 108, 150, 10 END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - チャレンジ/レスポンス" @@ -90,8 +90,9 @@ BEGIN LTEXT "レスポンス(&R):", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK(&O)", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "キャンセル(&C)", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "パスワードを保存(&S)", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK(&O)", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "キャンセル(&C)", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-kr.rc b/res/openvpn-gui-res-kr.rc index debe5c0..5c9c33f 100644 --- a/res/openvpn-gui-res-kr.rc +++ b/res/openvpn-gui-res-kr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 자격증명" @@ -90,8 +90,9 @@ BEGIN LTEXT "요청값:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "확인", IDOK, 25, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED - PUSHBUTTON "취소", IDCANCEL, 85, 58, 52, 14 + CHECKBOX "암호 저장", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "확인", IDOK, 25, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "취소", IDCANCEL, 85, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-nl.rc b/res/openvpn-gui-res-nl.rc index 8067db8..71077a9 100644 --- a/res/openvpn-gui-res-nl.rc +++ b/res/openvpn-gui-res-nl.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -88,8 +88,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Annuleren", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Wachtwoord opslaan", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Annuleren", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-no.rc b/res/openvpn-gui-res-no.rc index cc35475..338e5a5 100644 --- a/res/openvpn-gui-res-no.rc +++ b/res/openvpn-gui-res-no.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -89,8 +89,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Avbryt", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Husk passord", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-pl.rc b/res/openvpn-gui-res-pl.rc index eead00a..f806131 100644 --- a/res/openvpn-gui-res-pl.rc +++ b/res/openvpn-gui-res-pl.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpowiedź" @@ -90,8 +90,9 @@ BEGIN LTEXT "Odpowiedź:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Anuluj", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Zapisz hasło", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Anuluj", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-pt.rc b/res/openvpn-gui-res-pt.rc index 9889f01..3e57a57 100644 --- a/res/openvpn-gui-res-pt.rc +++ b/res/openvpn-gui-res-pt.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Resposta do Desafio" @@ -88,8 +88,9 @@ BEGIN LTEXT "Resposta:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Salvar senha", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-ru.rc b/res/openvpn-gui-res-ru.rc index 1146264..b86bcc1 100644 --- a/res/openvpn-gui-res-ru.rc +++ b/res/openvpn-gui-res-ru.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -90,8 +90,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Отмена", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Запомнить", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Отмена", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-se.rc b/res/openvpn-gui-res-se.rc index e881d8a..a0e1fa6 100644 --- a/res/openvpn-gui-res-se.rc +++ b/res/openvpn-gui-res-se.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -88,8 +88,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Avbryt", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-tr.rc b/res/openvpn-gui-res-tr.rc index 8042e6e..4e6a5a2 100644 --- a/res/openvpn-gui-res-tr.rc +++ b/res/openvpn-gui-res-tr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -90,8 +90,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "Tamam", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Çıkış", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "Tamam", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Çıkış", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-ua.rc b/res/openvpn-gui-res-ua.rc index 8a47c21..308491a 100644 --- a/res/openvpn-gui-res-ua.rc +++ b/res/openvpn-gui-res-ua.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -88,8 +88,9 @@ BEGIN LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "Скасувати", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "Запам'ятати", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "Скасувати", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-zh-hans.rc b/res/openvpn-gui-res-zh-hans.rc index 48645fb..23385b5 100644 --- a/res/openvpn-gui-res-zh-hans.rc +++ b/res/openvpn-gui-res-zh-hans.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 质询响应" @@ -91,8 +91,9 @@ BEGIN LTEXT "响应:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "确定", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "取消", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "保存密码", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "确定", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "取消", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-zh-hant.rc b/res/openvpn-gui-res-zh-hant.rc index e91c210..c93f935 100644 --- a/res/openvpn-gui-res-zh-hant.rc +++ b/res/openvpn-gui-res-zh-hant.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 挑戰回應" @@ -91,8 +91,9 @@ BEGIN LTEXT "回應:", ID_LTEXT_RESPONSE, 6, 30, 50, 10 EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE - PUSHBUTTON "確認", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP - PUSHBUTTON "取消", IDCANCEL, 90, 51, 52, 14 + CHECKBOX "儲存密碼", ID_CHK_SAVE_PASS, 60, 45, 100, 10 + PUSHBUTTON "確認", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP + PUSHBUTTON "取消", IDCANCEL, 90, 65, 52, 14 END /* Status Dialog */ diff --git a/save_pass.c b/save_pass.c index cde660c..d2468ad 100644 --- a/save_pass.c +++ b/save_pass.c @@ -35,6 +35,7 @@ #define AUTH_PASS_DATA L"auth-data" #define ENTROPY_DATA L"entropy" #define AUTH_USER_DATA L"username" +#define AUTH_SMARTCARD_DATA L"auth-smartcard-pin" #define ENTROPY_LEN 16 static DWORD @@ -162,6 +163,12 @@ SaveAuthPass(const WCHAR *config_name, const WCHAR *password) return save_encrypted(config_name, password, AUTH_PASS_DATA); } +int +SaveSmartCardPin(const WCHAR *config_name, const WCHAR *pin) +{ + return save_encrypted(config_name, pin, AUTH_SMARTCARD_DATA); +} + /* * Returns 1 on success, 0 on failure. password should have space * for up to capacity wide chars incluing nul termination @@ -230,6 +237,12 @@ RecallAuthPass(const WCHAR *config_name, WCHAR *password) return recall_encrypted(config_name, password, USER_PASS_LEN, AUTH_PASS_DATA); } +int +RecallSmartCardPin(const WCHAR *config_name, WCHAR *pin) +{ + return recall_encrypted(config_name, pin, USER_PASS_LEN, AUTH_SMARTCARD_DATA); +} + int SaveUsername(const WCHAR *config_name, const WCHAR *username) { @@ -237,6 +250,7 @@ SaveUsername(const WCHAR *config_name, const WCHAR *username) SetConfigRegistryValueBinary(config_name, AUTH_USER_DATA, (BYTE *)username, len); return 1; } + /* * The buffer username should be have space for up to USER_PASS_LEN * WCHARs including nul. @@ -268,6 +282,12 @@ DeleteSavedAuthPass(const WCHAR *config_name) DeleteConfigRegistryValue(config_name, AUTH_PASS_DATA); } +void +DeleteSavedSmartCardPin(const WCHAR *config_name) +{ + DeleteConfigRegistryValue(config_name, AUTH_SMARTCARD_DATA); +} + /* delete saved config-specific auth password and private key passphrase */ void DeleteSavedPasswords(const WCHAR *config_name) @@ -275,6 +295,7 @@ DeleteSavedPasswords(const WCHAR *config_name) DeleteConfigRegistryValue(config_name, KEY_PASS_DATA); DeleteConfigRegistryValue(config_name, AUTH_PASS_DATA); DeleteConfigRegistryValue(config_name, ENTROPY_DATA); + DeleteConfigRegistryValue(config_name, AUTH_SMARTCARD_DATA); } /* check if auth password is saved */ diff --git a/save_pass.h b/save_pass.h index 3f895d2..25f27a0 100644 --- a/save_pass.h +++ b/save_pass.h @@ -31,16 +31,22 @@ int SaveKeyPass(const WCHAR *config_name, const WCHAR *password); int SaveAuthPass(const WCHAR *config_name, const WCHAR *password); +int SaveSmartCardPin(const WCHAR *config_name, const WCHAR *pin); + int SaveUsername(const WCHAR *config_name, const WCHAR *username); int RecallKeyPass(const WCHAR *config_name, WCHAR *password); int RecallAuthPass(const WCHAR *config_name, WCHAR *password); +int RecallSmartCardPin(const WCHAR *config_name, WCHAR *pin); + int RecallUsername(const WCHAR *config_name, WCHAR *username); void DeleteSavedAuthPass(const WCHAR *config_name); +void DeleteSavedSmartCardPin(const WCHAR *config_name); + void DeleteSavedKeyPass(const WCHAR *config_name); void DeleteSavedPasswords(const WCHAR *config_name); From a17335b1b2235deb63bc454cd77d62e7898dfca0 Mon Sep 17 00:00:00 2001 From: tantra35 Date: Wed, 11 Jun 2025 10:46:52 +0300 Subject: [PATCH 2/5] fix: 1. Replace FLAG_SAVE_KEY_PASS instead of FLAG_DISABLE_SAVE_PASS in GenericPassDialogFun 2. Honor FLAG_DISABLE_SAVE_PASS flag in GenericPassDialogFun --- openvpn.c | 53 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/openvpn.c b/openvpn.c index 09b1506..a78741d 100644 --- a/openvpn.c +++ b/openvpn.c @@ -890,29 +890,36 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) ID_TXT_DESCRIPTION, LoadLocalizedString(IDS_NFO_TOKEN_PASSWORD_REQUEST, param->id)); - if (RecallSmartCardPin(param->c->config_name, password)) + if (param->c->flags & FLAG_DISABLE_SAVE_PASS) { - SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); - Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); - lenableOKBtn = TRUE; - - if (password[0] != L'\0' && param->c->failed_auth_attempts == 0) + ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE); + } + else + { + if (RecallSmartCardPin(param->c->config_name, password)) { - /* smart card pin available: skip dialog - * if silent_connection is on, else auto submit after a few seconds. - * User can interrupt. - */ - SetFocus(GetDlgItem(hwndDlg, IDOK)); - UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ - AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); - } - else if (param->c->failed_auth_attempts) - { - SendMessage( - GetDlgItem(hwndDlg, ID_EDT_RESPONSE), EM_SETSEL, 0, MAKELONG(0, -1)); - } + SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); + lenableOKBtn = TRUE; - SecureZeroMemory(password, sizeof(password)); + if (password[0] != L'\0' && param->c->failed_auth_attempts == 0) + { + /* smart card pin available: skip dialog + * if silent_connection is on, else auto submit after a few seconds. + * User can interrupt. + */ + SetFocus(GetDlgItem(hwndDlg, IDOK)); + UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ + AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); + } + else if (param->c->failed_auth_attempts) + { + SendMessage( + GetDlgItem(hwndDlg, ID_EDT_RESPONSE), EM_SETSEL, 0, MAKELONG(0, -1)); + } + + SecureZeroMemory(password, sizeof(password)); + } } } else @@ -974,8 +981,8 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) break; case ID_CHK_SAVE_PASS: - param->c->flags ^= FLAG_SAVE_AUTH_PASS; - if (param->c->flags & FLAG_SAVE_AUTH_PASS) + param->c->flags ^= FLAG_SAVE_KEY_PASS; + if (param->c->flags & FLAG_SAVE_KEY_PASS) { Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); } @@ -1043,7 +1050,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) ManagementCommandFromInput(param->c, fmt, hwndDlg, ID_EDT_RESPONSE); free(fmt); - if (param->flags & FLAG_PASS_TOKEN && param->c->flags & FLAG_SAVE_AUTH_PASS) + if (param->flags & FLAG_PASS_TOKEN && param->c->flags & FLAG_SAVE_KEY_PASS) { SaveSmartCardPin(param->c->config_name, password); } From 98d4233fef1fba03dd2b544f79d25bbdab4c4fd3 Mon Sep 17 00:00:00 2001 From: tantra35 Date: Fri, 13 Jun 2025 21:45:32 +0300 Subject: [PATCH 3/5] Fix challenge dialog logic for pin, but dialog still it present when we recall Pin --- openvpn.c | 16 ++++++++++------ res/openvpn-gui-res-cs.rc | 3 ++- res/openvpn-gui-res-de.rc | 3 ++- res/openvpn-gui-res-dk.rc | 3 ++- res/openvpn-gui-res-en.rc | 3 ++- res/openvpn-gui-res-es.rc | 3 ++- res/openvpn-gui-res-fa.rc | 3 ++- res/openvpn-gui-res-fi.rc | 3 ++- res/openvpn-gui-res-fr.rc | 3 ++- res/openvpn-gui-res-it.rc | 3 ++- res/openvpn-gui-res-jp.rc | 3 ++- res/openvpn-gui-res-kr.rc | 3 ++- res/openvpn-gui-res-nl.rc | 3 ++- res/openvpn-gui-res-no.rc | 3 ++- res/openvpn-gui-res-pl.rc | 3 ++- res/openvpn-gui-res-pt.rc | 3 ++- res/openvpn-gui-res-ru.rc | 3 ++- res/openvpn-gui-res-se.rc | 3 ++- res/openvpn-gui-res-tr.rc | 3 ++- res/openvpn-gui-res-ua.rc | 3 ++- res/openvpn-gui-res-zh-hans.rc | 3 ++- res/openvpn-gui-res-zh-hant.rc | 3 ++- 22 files changed, 52 insertions(+), 27 deletions(-) diff --git a/openvpn.c b/openvpn.c index a78741d..3bdb97a 100644 --- a/openvpn.c +++ b/openvpn.c @@ -856,6 +856,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) if (param->flags & FLAG_CR_TYPE_CRV1 || param->flags & FLAG_CR_TYPE_CRTEXT) { SetDlgItemTextW(hwndDlg, ID_TXT_DESCRIPTION, wstr); + SetDlgItemTextW(hwndDlg, ID_TXT_WARNING, NULL); /* Set password echo on if needed */ if (param->flags & FLAG_CR_ECHO) @@ -898,12 +899,12 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { if (RecallSmartCardPin(param->c->config_name, password)) { - SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); - Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); - lenableOKBtn = TRUE; - if (password[0] != L'\0' && param->c->failed_auth_attempts == 0) { + SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); + Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); + lenableOKBtn = TRUE; + /* smart card pin available: skip dialog * if silent_connection is on, else auto submit after a few seconds. * User can interrupt. @@ -911,11 +912,14 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) SetFocus(GetDlgItem(hwndDlg, IDOK)); UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); - } - else if (param->c->failed_auth_attempts) + } + else if (param->c->failed_auth_attempts > 0) { SendMessage( GetDlgItem(hwndDlg, ID_EDT_RESPONSE), EM_SETSEL, 0, MAKELONG(0, -1)); + + SetDlgItemTextW( + hwndDlg, ID_TXT_WARNING, LoadLocalizedString(IDS_NFO_KEY_PASS_RETRY)); } SecureZeroMemory(password, sizeof(password)); diff --git a/res/openvpn-gui-res-cs.rc b/res/openvpn-gui-res-cs.rc index faef7f7..edda5fd 100644 --- a/res/openvpn-gui-res-cs.rc +++ b/res/openvpn-gui-res-cs.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpověď na výzvu" @@ -92,6 +92,7 @@ BEGIN CHECKBOX "Uložit heslo", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Zrušit", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-de.rc b/res/openvpn-gui-res-de.rc index 205bf71..d18527f 100644 --- a/res/openvpn-gui-res-de.rc +++ b/res/openvpn-gui-res-de.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -92,6 +92,7 @@ BEGIN CHECKBOX "Passwort &speichern", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "&Abbrechen", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-dk.rc b/res/openvpn-gui-res-dk.rc index 8e9f07e..9b6b0a2 100644 --- a/res/openvpn-gui-res-dk.rc +++ b/res/openvpn-gui-res-dk.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "Husk kodeord", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Annuller", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index 0da5726..ec784fd 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -92,6 +92,7 @@ BEGIN CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "&Cancel", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-es.rc b/res/openvpn-gui-res-es.rc index 6303ac1..c0159a0 100644 --- a/res/openvpn-gui-res-es.rc +++ b/res/openvpn-gui-res-es.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fa.rc b/res/openvpn-gui-res-fa.rc index 056094b..4e88021 100644 --- a/res/openvpn-gui-res-fa.rc +++ b/res/openvpn-gui-res-fa.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST | WS_EX_RTLREADING | WS_EX_LAYOUTRTL CAPTION "OpenVPN – پاسخ چالش" @@ -94,6 +94,7 @@ BEGIN CHECKBOX "نگه داشتن رمز عبور", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "بسیار خوب", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "لغو", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fi.rc b/res/openvpn-gui-res-fi.rc index 5d33946..7677d8c 100644 --- a/res/openvpn-gui-res-fi.rc +++ b/res/openvpn-gui-res-fi.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Haastemenetelmä" @@ -92,6 +92,7 @@ BEGIN CHECKBOX "Tallenna salasana", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Peruuta", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-fr.rc b/res/openvpn-gui-res-fr.rc index d903175..ae18025 100644 --- a/res/openvpn-gui-res-fr.rc +++ b/res/openvpn-gui-res-fr.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Réponse de défi" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Enregistrer mot de passe", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Annuler", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-it.rc b/res/openvpn-gui-res-it.rc index f8fa300..c86f17c 100644 --- a/res/openvpn-gui-res-it.rc +++ b/res/openvpn-gui-res-it.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "&Ricorda password", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "&Annulla", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-jp.rc b/res/openvpn-gui-res-jp.rc index 69ff8ba..56ba08d 100644 --- a/res/openvpn-gui-res-jp.rc +++ b/res/openvpn-gui-res-jp.rc @@ -79,7 +79,7 @@ BEGIN LTEXT "", ID_TXT_WARNING, 6, 108, 150, 10 END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - チャレンジ/レスポンス" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "パスワードを保存(&S)", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK(&O)", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "キャンセル(&C)", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-kr.rc b/res/openvpn-gui-res-kr.rc index 5c9c33f..85c9d85 100644 --- a/res/openvpn-gui-res-kr.rc +++ b/res/openvpn-gui-res-kr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 자격증명" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "암호 저장", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "확인", IDOK, 25, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "취소", IDCANCEL, 85, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-nl.rc b/res/openvpn-gui-res-nl.rc index 71077a9..5c7bd6c 100644 --- a/res/openvpn-gui-res-nl.rc +++ b/res/openvpn-gui-res-nl.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Wachtwoord opslaan", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Annuleren", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-no.rc b/res/openvpn-gui-res-no.rc index 338e5a5..f5af47d 100644 --- a/res/openvpn-gui-res-no.rc +++ b/res/openvpn-gui-res-no.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -92,6 +92,7 @@ BEGIN CHECKBOX "Husk passord", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Avbryt", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-pl.rc b/res/openvpn-gui-res-pl.rc index f806131..d8c7bec 100644 --- a/res/openvpn-gui-res-pl.rc +++ b/res/openvpn-gui-res-pl.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpowiedź" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "Zapisz hasło", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Anuluj", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-pt.rc b/res/openvpn-gui-res-pt.rc index 3e57a57..7d0742e 100644 --- a/res/openvpn-gui-res-pt.rc +++ b/res/openvpn-gui-res-pt.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Resposta do Desafio" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Salvar senha", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-ru.rc b/res/openvpn-gui-res-ru.rc index b86bcc1..3ca2be8 100644 --- a/res/openvpn-gui-res-ru.rc +++ b/res/openvpn-gui-res-ru.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "Запомнить", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Отмена", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-se.rc b/res/openvpn-gui-res-se.rc index a0e1fa6..970a726 100644 --- a/res/openvpn-gui-res-se.rc +++ b/res/openvpn-gui-res-se.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Avbryt", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-tr.rc b/res/openvpn-gui-res-tr.rc index 4e6a5a2..3fa23e2 100644 --- a/res/openvpn-gui-res-tr.rc +++ b/res/openvpn-gui-res-tr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -93,6 +93,7 @@ BEGIN CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "Tamam", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Çıkış", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-ua.rc b/res/openvpn-gui-res-ua.rc index 308491a..8702203 100644 --- a/res/openvpn-gui-res-ua.rc +++ b/res/openvpn-gui-res-ua.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" @@ -91,6 +91,7 @@ BEGIN CHECKBOX "Запам'ятати", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "Скасувати", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-zh-hans.rc b/res/openvpn-gui-res-zh-hans.rc index 23385b5..1dc5699 100644 --- a/res/openvpn-gui-res-zh-hans.rc +++ b/res/openvpn-gui-res-zh-hans.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 质询响应" @@ -94,6 +94,7 @@ BEGIN CHECKBOX "保存密码", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "确定", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "取消", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ diff --git a/res/openvpn-gui-res-zh-hant.rc b/res/openvpn-gui-res-zh-hant.rc index c93f935..06283e0 100644 --- a/res/openvpn-gui-res-zh-hant.rc +++ b/res/openvpn-gui-res-zh-hant.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 挑戰回應" @@ -94,6 +94,7 @@ BEGIN CHECKBOX "儲存密碼", ID_CHK_SAVE_PASS, 60, 45, 100, 10 PUSHBUTTON "確認", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP PUSHBUTTON "取消", IDCANCEL, 90, 65, 52, 14 + LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10 END /* Status Dialog */ From 408c9babb69c570c08b86f883f40442e12bc15a7 Mon Sep 17 00:00:00 2001 From: tantra35 Date: Fri, 13 Jun 2025 22:52:11 +0300 Subject: [PATCH 4/5] fix pin chalange dialog: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. If we recall pin just send pin without connect Timeout für &Connect-Skript: 2. If connect error we extend ID_DLG_CHALLENGE_RESPONSE dialog to place ID_TXT_WARNING --- openvpn.c | 41 ++++++++++++++++++++++++++-------- res/openvpn-gui-res-cs.rc | 2 +- res/openvpn-gui-res-de.rc | 2 +- res/openvpn-gui-res-dk.rc | 2 +- res/openvpn-gui-res-en.rc | 2 +- res/openvpn-gui-res-es.rc | 2 +- res/openvpn-gui-res-fa.rc | 2 +- res/openvpn-gui-res-fi.rc | 2 +- res/openvpn-gui-res-fr.rc | 2 +- res/openvpn-gui-res-it.rc | 2 +- res/openvpn-gui-res-jp.rc | 2 +- res/openvpn-gui-res-kr.rc | 2 +- res/openvpn-gui-res-nl.rc | 2 +- res/openvpn-gui-res-no.rc | 2 +- res/openvpn-gui-res-pl.rc | 2 +- res/openvpn-gui-res-pt.rc | 2 +- res/openvpn-gui-res-ru.rc | 2 +- res/openvpn-gui-res-se.rc | 2 +- res/openvpn-gui-res-tr.rc | 2 +- res/openvpn-gui-res-ua.rc | 2 +- res/openvpn-gui-res-zh-hans.rc | 2 +- res/openvpn-gui-res-zh-hant.rc | 2 +- 22 files changed, 53 insertions(+), 30 deletions(-) diff --git a/openvpn.c b/openvpn.c index 3bdb97a..06b0939 100644 --- a/openvpn.c +++ b/openvpn.c @@ -856,7 +856,6 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) if (param->flags & FLAG_CR_TYPE_CRV1 || param->flags & FLAG_CR_TYPE_CRTEXT) { SetDlgItemTextW(hwndDlg, ID_TXT_DESCRIPTION, wstr); - SetDlgItemTextW(hwndDlg, ID_TXT_WARNING, NULL); /* Set password echo on if needed */ if (param->flags & FLAG_CR_ECHO) @@ -903,15 +902,27 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password); Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED); - lenableOKBtn = TRUE; - /* smart card pin available: skip dialog - * if silent_connection is on, else auto submit after a few seconds. - * User can interrupt. - */ - SetFocus(GetDlgItem(hwndDlg, IDOK)); - UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ - AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); + const char * template = "password \"%s\" \"%%s\""; + char* fmt = malloc(strlen(template) + strlen(param->id)); + if (fmt) + { + sprintf(fmt, template, param->id); + PrintDebug(L"Send passwd to mgmt with format: '%hs'", fmt); + ManagementCommandFromInput(param->c, fmt, hwndDlg, ID_EDT_RESPONSE); + free(fmt); + + EndDialog(hwndDlg, IDOK); + return TRUE; + } + else /* no memory? send stop signal */ + { + WriteStatusLog(param->c, + L"GUI> ", + L"Out of memory in password dialog: sending stop signal", + false); + StopOpenVPN(param->c); + } } else if (param->c->failed_auth_attempts > 0) { @@ -920,6 +931,18 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) SetDlgItemTextW( hwndDlg, ID_TXT_WARNING, LoadLocalizedString(IDS_NFO_KEY_PASS_RETRY)); + + // Extend window size for Warning + RECT rect = { 0 }; + GetWindowRect(hwndDlg, &rect); + rect.right -= rect.left; + rect.bottom -= rect.top; + + HWND warningText = GetDlgItem(hwndDlg, ID_TXT_WARNING); + RECT warningRect = { 0 }; + GetWindowRect(warningText, &warningRect); + + SetWindowPos(hwndDlg, NULL, 0, 0, rect.right, rect.bottom + warningRect.bottom - warningRect.top + DPI_SCALE(4), SWP_NOMOVE); } SecureZeroMemory(password, sizeof(password)); diff --git a/res/openvpn-gui-res-cs.rc b/res/openvpn-gui-res-cs.rc index edda5fd..f6885c3 100644 --- a/res/openvpn-gui-res-cs.rc +++ b/res/openvpn-gui-res-cs.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpověď na výzvu" diff --git a/res/openvpn-gui-res-de.rc b/res/openvpn-gui-res-de.rc index d18527f..f1fc7eb 100644 --- a/res/openvpn-gui-res-de.rc +++ b/res/openvpn-gui-res-de.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" diff --git a/res/openvpn-gui-res-dk.rc b/res/openvpn-gui-res-dk.rc index 9b6b0a2..d220c35 100644 --- a/res/openvpn-gui-res-dk.rc +++ b/res/openvpn-gui-res-dk.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index ec784fd..cb8d0b4 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" diff --git a/res/openvpn-gui-res-es.rc b/res/openvpn-gui-res-es.rc index c0159a0..559a768 100644 --- a/res/openvpn-gui-res-es.rc +++ b/res/openvpn-gui-res-es.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-fa.rc b/res/openvpn-gui-res-fa.rc index 4e88021..4779945 100644 --- a/res/openvpn-gui-res-fa.rc +++ b/res/openvpn-gui-res-fa.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST | WS_EX_RTLREADING | WS_EX_LAYOUTRTL CAPTION "OpenVPN – پاسخ چالش" diff --git a/res/openvpn-gui-res-fi.rc b/res/openvpn-gui-res-fi.rc index 7677d8c..3d61830 100644 --- a/res/openvpn-gui-res-fi.rc +++ b/res/openvpn-gui-res-fi.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Haastemenetelmä" diff --git a/res/openvpn-gui-res-fr.rc b/res/openvpn-gui-res-fr.rc index ae18025..777b646 100644 --- a/res/openvpn-gui-res-fr.rc +++ b/res/openvpn-gui-res-fr.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Réponse de défi" diff --git a/res/openvpn-gui-res-it.rc b/res/openvpn-gui-res-it.rc index c86f17c..40c54d9 100644 --- a/res/openvpn-gui-res-it.rc +++ b/res/openvpn-gui-res-it.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-jp.rc b/res/openvpn-gui-res-jp.rc index 56ba08d..ba66a74 100644 --- a/res/openvpn-gui-res-jp.rc +++ b/res/openvpn-gui-res-jp.rc @@ -79,7 +79,7 @@ BEGIN LTEXT "", ID_TXT_WARNING, 6, 108, 150, 10 END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - チャレンジ/レスポンス" diff --git a/res/openvpn-gui-res-kr.rc b/res/openvpn-gui-res-kr.rc index 85c9d85..35ca348 100644 --- a/res/openvpn-gui-res-kr.rc +++ b/res/openvpn-gui-res-kr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 자격증명" diff --git a/res/openvpn-gui-res-nl.rc b/res/openvpn-gui-res-nl.rc index 5c7bd6c..48d6306 100644 --- a/res/openvpn-gui-res-nl.rc +++ b/res/openvpn-gui-res-nl.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-no.rc b/res/openvpn-gui-res-no.rc index f5af47d..136a817 100644 --- a/res/openvpn-gui-res-no.rc +++ b/res/openvpn-gui-res-no.rc @@ -78,7 +78,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-pl.rc b/res/openvpn-gui-res-pl.rc index d8c7bec..9ad886e 100644 --- a/res/openvpn-gui-res-pl.rc +++ b/res/openvpn-gui-res-pl.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Odpowiedź" diff --git a/res/openvpn-gui-res-pt.rc b/res/openvpn-gui-res-pt.rc index 7d0742e..ae514fe 100644 --- a/res/openvpn-gui-res-pt.rc +++ b/res/openvpn-gui-res-pt.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Resposta do Desafio" diff --git a/res/openvpn-gui-res-ru.rc b/res/openvpn-gui-res-ru.rc index 3ca2be8..ede7473 100644 --- a/res/openvpn-gui-res-ru.rc +++ b/res/openvpn-gui-res-ru.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN – Challenge Response" diff --git a/res/openvpn-gui-res-se.rc b/res/openvpn-gui-res-se.rc index 970a726..8d3b777 100644 --- a/res/openvpn-gui-res-se.rc +++ b/res/openvpn-gui-res-se.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-tr.rc b/res/openvpn-gui-res-tr.rc index 3fa23e2..e237783 100644 --- a/res/openvpn-gui-res-tr.rc +++ b/res/openvpn-gui-res-tr.rc @@ -79,7 +79,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-ua.rc b/res/openvpn-gui-res-ua.rc index 8702203..baf4993 100644 --- a/res/openvpn-gui-res-ua.rc +++ b/res/openvpn-gui-res-ua.rc @@ -77,7 +77,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - Challenge Response" diff --git a/res/openvpn-gui-res-zh-hans.rc b/res/openvpn-gui-res-zh-hans.rc index 1dc5699..d4f2003 100644 --- a/res/openvpn-gui-res-zh-hans.rc +++ b/res/openvpn-gui-res-zh-hans.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 质询响应" diff --git a/res/openvpn-gui-res-zh-hant.rc b/res/openvpn-gui-res-zh-hant.rc index 06283e0..9833d1a 100644 --- a/res/openvpn-gui-res-zh-hant.rc +++ b/res/openvpn-gui-res-zh-hant.rc @@ -80,7 +80,7 @@ BEGIN END /* Challenge Response Dialog */ -ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 106 +ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90 STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND EXSTYLE WS_EX_TOPMOST CAPTION "OpenVPN - 挑戰回應" From 61bd8e515e6df966db7d2967a6bfaa6ecc8cc678 Mon Sep 17 00:00:00 2001 From: tantra35 Date: Fri, 13 Jun 2025 23:03:04 +0300 Subject: [PATCH 5/5] remove unneeded variable --- openvpn.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openvpn.c b/openvpn.c index 06b0939..b7c5202 100644 --- a/openvpn.c +++ b/openvpn.c @@ -843,7 +843,6 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) case WM_INITDIALOG: param = (auth_param_t *)lParam; TRY_SETPROP(hwndDlg, cfgProp, (HANDLE)param); - BOOL lenableOKBtn = FALSE; WCHAR *wstr = Widen(param->str); if (!wstr) @@ -978,7 +977,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) else { /* disable OK button until response is filled-in */ - EnableWindow(GetDlgItem(hwndDlg, IDOK), lenableOKBtn); + EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); ResetPasswordReveal(GetDlgItem(hwndDlg, ID_EDT_RESPONSE), GetDlgItem(hwndDlg, ID_PASSWORD_REVEAL), 0);