add ability to save pin for smartcards

pull/753/head
tantra35 2025-06-10 13:17:12 +03:00
parent 3403732dee
commit 77deef95f0
25 changed files with 178 additions and 65 deletions

View File

@ -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 */
{

View File

@ -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)
{

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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);