| 38 |
#include <fcntl.h> |
#include <fcntl.h> |
| 39 |
#include <stdlib.h> |
#include <stdlib.h> |
| 40 |
#include <errno.h> |
#include <errno.h> |
| 41 |
|
#include <Lmcons.h> // for UNLEN |
| 42 |
#include <crtdbg.h> |
#include <crtdbg.h> |
| 43 |
|
|
| 44 |
#include "resource.h" |
#include "resource.h" |
| 86 |
WNDPROC ProcOrg; |
WNDPROC ProcOrg; |
| 87 |
PTInstVar pvar; |
PTInstVar pvar; |
| 88 |
TipWin *tipwin; |
TipWin *tipwin; |
| 89 |
|
BOOL *UseControlChar; |
| 90 |
} TPasswordControlData; |
} TPasswordControlData; |
| 91 |
|
|
| 92 |
|
static void password_wnd_proc_close_tooltip(TPasswordControlData *data) |
| 93 |
|
{ |
| 94 |
|
if (data->tipwin != NULL) { |
| 95 |
|
TipWinDestroy(data->tipwin); |
| 96 |
|
data->tipwin = NULL; |
| 97 |
|
} |
| 98 |
|
} |
| 99 |
|
|
| 100 |
static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg, |
static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg, |
| 101 |
WPARAM wParam, LPARAM lParam) |
WPARAM wParam, LPARAM lParam) |
| 102 |
{ |
{ |
| 104 |
TPasswordControlData *data = (TPasswordControlData *)GetWindowLongPtr(control, GWLP_USERDATA); |
TPasswordControlData *data = (TPasswordControlData *)GetWindowLongPtr(control, GWLP_USERDATA); |
| 105 |
switch (msg) { |
switch (msg) { |
| 106 |
case WM_CHAR: |
case WM_CHAR: |
| 107 |
if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) { |
if ((data->UseControlChar == NULL || *data->UseControlChar == TRUE) && |
| 108 |
|
(GetKeyState(VK_CONTROL) & 0x8000) != 0) |
| 109 |
|
{ // 制御文字を使用する && CTRLキーが押されている |
| 110 |
TCHAR chars[] = { (TCHAR) wParam, 0 }; |
TCHAR chars[] = { (TCHAR) wParam, 0 }; |
| 111 |
|
|
| 112 |
SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE, |
SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE, |
| 130 |
|
|
| 131 |
return 0; |
return 0; |
| 132 |
} else { |
} else { |
| 133 |
if (data->tipwin != NULL) { |
password_wnd_proc_close_tooltip(data); |
|
TipWinDestroy(data->tipwin); |
|
|
data->tipwin = NULL; |
|
|
} |
|
| 134 |
} |
} |
| 135 |
break; |
break; |
| 136 |
case WM_KILLFOCUS: |
case WM_KILLFOCUS: |
| 137 |
if (data->tipwin != NULL) { |
password_wnd_proc_close_tooltip(data); |
|
TipWinDestroy(data->tipwin); |
|
|
data->tipwin = NULL; |
|
|
} |
|
| 138 |
break; |
break; |
| 139 |
} |
} |
| 140 |
|
|
| 143 |
|
|
| 144 |
if (msg == WM_NCDESTROY) { |
if (msg == WM_NCDESTROY) { |
| 145 |
SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR)data->ProcOrg); |
SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR)data->ProcOrg); |
| 146 |
if (data->tipwin != NULL) { |
password_wnd_proc_close_tooltip(data); |
|
TipWinDestroy(data->tipwin); |
|
|
data->tipwin = NULL; |
|
|
} |
|
| 147 |
free(data); |
free(data); |
| 148 |
} |
} |
| 149 |
|
|
| 150 |
return result; |
return result; |
| 151 |
} |
} |
| 152 |
|
|
| 153 |
void init_password_control(PTInstVar pvar, HWND dlg, int item) |
void init_password_control(PTInstVar pvar, HWND dlg, int item, BOOL *UseControlChar) |
| 154 |
{ |
{ |
| 155 |
HWND passwordControl = GetDlgItem(dlg, item); |
HWND passwordControl = GetDlgItem(dlg, item); |
| 156 |
TPasswordControlData *data = (TPasswordControlData *)malloc(sizeof(TPasswordControlData)); |
TPasswordControlData *data = (TPasswordControlData *)malloc(sizeof(TPasswordControlData)); |
| 157 |
data->ProcOrg = (WNDPROC)GetWindowLongPtr(passwordControl, GWLP_WNDPROC); |
data->ProcOrg = (WNDPROC)GetWindowLongPtr(passwordControl, GWLP_WNDPROC); |
| 158 |
data->pvar = pvar; |
data->pvar = pvar; |
| 159 |
data->tipwin = NULL; |
data->tipwin = NULL; |
| 160 |
|
data->UseControlChar = UseControlChar; |
| 161 |
SetWindowLongPtr(passwordControl, GWLP_WNDPROC, (LONG_PTR)password_wnd_proc); |
SetWindowLongPtr(passwordControl, GWLP_WNDPROC, (LONG_PTR)password_wnd_proc); |
| 162 |
SetWindowLongPtr(passwordControl, GWLP_USERDATA, (LONG_PTR)data); |
SetWindowLongPtr(passwordControl, GWLP_USERDATA, (LONG_PTR)data); |
| 163 |
SetFocus(passwordControl); |
SetFocus(passwordControl); |
| 175 |
|
|
| 176 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled)); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled)); |
| 177 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled)); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled)); |
| 178 |
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), (!TIS_enabled && !PAGEANT_enabled)); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), (!TIS_enabled && !PAGEANT_enabled)); |
| 179 |
|
|
| 180 |
for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) { |
for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) { |
| 181 |
EnableWindow(GetDlgItem(dlg, i), RSA_enabled); |
EnableWindow(GetDlgItem(dlg, i), RSA_enabled); |
| 246 |
} |
} |
| 247 |
} |
} |
| 248 |
|
|
| 249 |
static void init_auth_dlg(PTInstVar pvar, HWND dlg) |
static void init_auth_dlg(PTInstVar pvar, HWND dlg, BOOL *UseControlChar) |
| 250 |
{ |
{ |
| 251 |
|
const static DlgTextInfo text_info[] = { |
| 252 |
|
{ 0, "DLG_AUTH_TITLE" }, |
| 253 |
|
{ IDC_SSHAUTHBANNER, "DLG_AUTH_BANNER" }, |
| 254 |
|
{ IDC_SSHAUTHBANNER2, "DLG_AUTH_BANNER2" }, |
| 255 |
|
{ IDC_SSHUSERNAMELABEL, "DLG_AUTH_USERNAME" }, |
| 256 |
|
{ IDC_SSHPASSWORDCAPTION, "DLG_AUTH_PASSWORD" }, |
| 257 |
|
{ IDC_REMEMBER_PASSWORD, "DLG_AUTH_REMEMBER_PASSWORD" }, |
| 258 |
|
{ IDC_FORWARD_AGENT, "DLG_AUTH_FWDAGENT" }, |
| 259 |
|
{ IDC_SSHUSEPASSWORD, "DLG_AUTH_METHOD_PASSWORD" }, |
| 260 |
|
{ IDC_SSHUSERSA, "DLG_AUTH_METHOD_RSA" }, |
| 261 |
|
{ IDC_SSHUSERHOSTS, "DLG_AUTH_METHOD_RHOST" }, |
| 262 |
|
{ IDC_SSHUSEPAGEANT, "DLG_AUTH_METHOD_PAGEANT" }, |
| 263 |
|
{ IDC_RSAFILENAMELABEL, "DLG_AUTH_PRIVATEKEY" }, |
| 264 |
|
{ IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" }, |
| 265 |
|
{ IDC_HOSTRSAFILENAMELABEL, "DLG_AUTH_HOST_PRIVATEKEY" }, |
| 266 |
|
{ IDOK, "BTN_OK" }, |
| 267 |
|
{ IDCANCEL, "BTN_DISCONNECT" }, |
| 268 |
|
}; |
| 269 |
int default_method = pvar->session_settings.DefaultAuthMethod; |
int default_method = pvar->session_settings.DefaultAuthMethod; |
|
char uimsg[MAX_UIMSG]; |
|
| 270 |
|
|
| 271 |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
SetI18DlgStrs("TTSSH", dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); |
|
UTIL_get_lang_msg("DLG_AUTH_TITLE", pvar, uimsg); |
|
|
SetWindowText(dlg, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_BANNER", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_BANNER2", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_USERNAME", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_PASSWORD", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_REMEMBER_PASSWORD", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_FORWARD_AGENT, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_FWDAGENT", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_FORWARD_AGENT, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_METHOD_RSA", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_METHOD_PAGEANT", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSEPAGEANT, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("BTN_OK", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
|
| 272 |
|
|
| 273 |
init_auth_machine_banner(pvar, dlg); |
init_auth_machine_banner(pvar, dlg); |
| 274 |
init_password_control(pvar, dlg, IDC_SSHPASSWORD); |
init_password_control(pvar, dlg, IDC_SSHPASSWORD, UseControlChar); |
| 275 |
|
|
| 276 |
// 認証失敗後はラベルを書き換え |
// 認証失敗後はラベルを書き換え |
| 277 |
if (pvar->auth_state.failed_method != SSH_AUTH_NONE) { |
if (pvar->auth_state.failed_method != SSH_AUTH_NONE) { |
| 307 |
if (pvar->auth_state.user != NULL) { |
if (pvar->auth_state.user != NULL) { |
| 308 |
SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user); |
SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user); |
| 309 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
| 310 |
|
EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE); |
| 311 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); |
| 312 |
} |
} |
| 313 |
else if (strlen(pvar->ssh2_username) > 0) { |
else if (strlen(pvar->ssh2_username) > 0) { |
| 314 |
SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username); |
SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username); |
| 315 |
if (pvar->ssh2_autologin == 1) { |
if (pvar->ssh2_autologin == 1) { |
| 316 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
| 317 |
|
EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE); |
| 318 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); |
| 319 |
} |
} |
| 320 |
} |
} |
| 321 |
else if (pvar->session_settings.DefaultUserName[0] != 0) { |
else { |
| 322 |
SetDlgItemText(dlg, IDC_SSHUSERNAME, |
switch(pvar->session_settings.DefaultUserType) { |
| 323 |
pvar->session_settings.DefaultUserName); |
case 0: |
| 324 |
|
// 入力しない |
| 325 |
|
break; |
| 326 |
|
case 1: |
| 327 |
|
// use DefaultUserName |
| 328 |
|
if (pvar->session_settings.DefaultUserName[0] == 0) { |
| 329 |
|
// 「入力しない」にしておく |
| 330 |
|
pvar->session_settings.DefaultUserType = 0; |
| 331 |
|
} else { |
| 332 |
|
SetDlgItemText(dlg, IDC_SSHUSERNAME, |
| 333 |
|
pvar->session_settings.DefaultUserName); |
| 334 |
|
} |
| 335 |
|
break; |
| 336 |
|
case 2: { |
| 337 |
|
TCHAR user_name[UNLEN+1]; |
| 338 |
|
DWORD len = _countof(user_name); |
| 339 |
|
BOOL r = GetUserName(user_name, &len); |
| 340 |
|
if (r != 0) { |
| 341 |
|
SetDlgItemText(dlg, IDC_SSHUSERNAME, user_name); |
| 342 |
|
} |
| 343 |
|
break; |
| 344 |
|
} |
| 345 |
|
default: |
| 346 |
|
// 入力しないにしておく |
| 347 |
|
pvar->session_settings.DefaultUserType = 0; |
| 348 |
|
} |
| 349 |
} |
} |
| 350 |
|
|
| 351 |
if (strlen(pvar->ssh2_password) > 0) { |
if (strlen(pvar->ssh2_password) > 0) { |
| 353 |
if (pvar->ssh2_autologin == 1) { |
if (pvar->ssh2_autologin == 1) { |
| 354 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 355 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE); |
| 356 |
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE); |
| 357 |
} |
} |
| 358 |
} |
} |
| 359 |
|
|
| 380 |
} else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) { |
} else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) { |
| 381 |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS); |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS); |
| 382 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 383 |
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE); |
| 384 |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
| 385 |
|
|
| 386 |
// /auth=pageant を追加 |
// /auth=pageant を追加 |
| 387 |
} else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) { |
} else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) { |
| 388 |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT); |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT); |
| 389 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 390 |
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE); |
| 391 |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
| 392 |
|
|
| 393 |
} else { |
} else { |
| 799 |
PTInstVar pvar; |
PTInstVar pvar; |
| 800 |
// LOGFONT logfont; |
// LOGFONT logfont; |
| 801 |
// HFONT font; |
// HFONT font; |
| 802 |
|
static BOOL UseControlChar; |
| 803 |
|
static BOOL ShowPassPhrase; |
| 804 |
|
|
| 805 |
switch (msg) { |
switch (msg) { |
| 806 |
case WM_INITDIALOG: |
case WM_INITDIALOG: |
| 808 |
pvar->auth_state.auth_dialog = dlg; |
pvar->auth_state.auth_dialog = dlg; |
| 809 |
SetWindowLong(dlg, DWL_USER, lParam); |
SetWindowLong(dlg, DWL_USER, lParam); |
| 810 |
|
|
| 811 |
init_auth_dlg(pvar, dlg); |
UseControlChar = TRUE; |
| 812 |
|
ShowPassPhrase = FALSE; |
| 813 |
|
init_auth_dlg(pvar, dlg, &UseControlChar); |
| 814 |
#if 0 |
#if 0 |
| 815 |
font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); |
font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); |
| 816 |
GetObject(font, sizeof(LOGFONT), &logfont); |
GetObject(font, sizeof(LOGFONT), &logfont); |
| 841 |
DlgAuthFont = NULL; |
DlgAuthFont = NULL; |
| 842 |
} |
} |
| 843 |
#endif |
#endif |
| 844 |
|
|
| 845 |
// SSH2 autologinが有効の場合は、タイマを仕掛ける。 (2004.12.1 yutaka) |
// SSH2 autologinが有効の場合は、タイマを仕掛ける。 (2004.12.1 yutaka) |
| 846 |
if (pvar->ssh2_autologin == 1) { |
if (pvar->ssh2_autologin == 1) { |
| 847 |
autologin_sent_none = FALSE; |
autologin_sent_none = FALSE; |
| 924 |
|
|
| 925 |
// ユーザ名を変更させない |
// ユーザ名を変更させない |
| 926 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
| 927 |
|
EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE); |
| 928 |
|
|
| 929 |
// 認証メソッド none を送る |
// 認証メソッド none を送る |
| 930 |
do_SSH2_userauth(pvar); |
do_SSH2_userauth(pvar); |
| 1018 |
|
|
| 1019 |
// ユーザ名を変更させない |
// ユーザ名を変更させない |
| 1020 |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); |
| 1021 |
|
EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE); |
| 1022 |
|
|
| 1023 |
// 認証メソッド none を送る |
// 認証メソッド none を送る |
| 1024 |
do_SSH2_userauth(pvar); |
do_SSH2_userauth(pvar); |
| 1049 |
pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT); |
pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT); |
| 1050 |
return TRUE; |
return TRUE; |
| 1051 |
|
|
| 1052 |
case IDC_FROM_CLIPBOARD: { |
case IDC_SSHPASSWORD_OPTION: { |
| 1053 |
char *clipboard = GetClipboardTextA(dlg, TRUE); |
TCHAR uimsg[MAX_UIMSG]; |
| 1054 |
if (clipboard != NULL) { |
HMENU hMenu= CreatePopupMenu(); |
| 1055 |
SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard); |
GetI18nStrT("TTSSH", "DLG_AUTH_PASTE_CLIPBOARD", |
| 1056 |
free(clipboard); |
uimsg, _countof(uimsg), |
| 1057 |
SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDOK), TRUE); |
"Paste from &clipboard", |
| 1058 |
return FALSE; |
pvar->ts->UILanguageFile); |
| 1059 |
|
AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, uimsg); |
| 1060 |
|
GetI18nStrT("ttssh", "DLG_AUTH_CLEAR_CLIPBOARD", |
| 1061 |
|
uimsg, _countof(uimsg), |
| 1062 |
|
"Paste from &clipboard and cl&ear clipboard", |
| 1063 |
|
pvar->ts->UILanguageFile); |
| 1064 |
|
AppendMenu(hMenu, MF_ENABLED | MF_STRING, 2, uimsg); |
| 1065 |
|
GetI18nStrT("ttssh", "DLG_AUTH_USE_CONTORL_CHARACTERS", |
| 1066 |
|
uimsg, _countof(uimsg), |
| 1067 |
|
"Use control charac&ters", |
| 1068 |
|
pvar->ts->UILanguageFile); |
| 1069 |
|
AppendMenu(hMenu, MF_ENABLED | MF_STRING | (UseControlChar ? MFS_CHECKED : 0), 3, uimsg); |
| 1070 |
|
GetI18nStrT("ttssh", "DLG_AUTH_SHOW_PASSPHRASE", |
| 1071 |
|
uimsg, _countof(uimsg), |
| 1072 |
|
"&Show passphrase", |
| 1073 |
|
pvar->ts->UILanguageFile); |
| 1074 |
|
AppendMenu(hMenu, MF_ENABLED | MF_STRING | (ShowPassPhrase ? MFS_CHECKED : 0), 4, uimsg); |
| 1075 |
|
RECT rect; |
| 1076 |
|
HWND hWndButton = GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION); |
| 1077 |
|
GetWindowRect(hWndButton, &rect); |
| 1078 |
|
int result = TrackPopupMenu(hMenu, TPM_RETURNCMD, rect.left, rect.bottom, 0 , hWndButton, NULL); |
| 1079 |
|
DestroyMenu(hMenu); |
| 1080 |
|
switch(result) { |
| 1081 |
|
case 1: |
| 1082 |
|
case 2: { |
| 1083 |
|
// クリップボードからペースト |
| 1084 |
|
BOOL clear_clipboard = result == 2; |
| 1085 |
|
char *clipboard = GetClipboardTextA(dlg, clear_clipboard); |
| 1086 |
|
if (clipboard != NULL) { |
| 1087 |
|
SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard); |
| 1088 |
|
free(clipboard); |
| 1089 |
|
SendDlgItemMessage(dlg, IDC_SSHPASSWORD, EM_SETSEL, 0, -1); |
| 1090 |
|
SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHPASSWORD), TRUE); |
| 1091 |
|
return FALSE; |
| 1092 |
|
} |
| 1093 |
|
return TRUE; |
| 1094 |
|
} |
| 1095 |
|
case 3: |
| 1096 |
|
// 制御コード使用/未使用 |
| 1097 |
|
UseControlChar = !UseControlChar; |
| 1098 |
|
break; |
| 1099 |
|
case 4: |
| 1100 |
|
// パスフレーズ表示/非表示 |
| 1101 |
|
ShowPassPhrase = !ShowPassPhrase; |
| 1102 |
|
{ |
| 1103 |
|
// 伏せ字 on/off を切り替える |
| 1104 |
|
HWND hWnd = GetDlgItem(dlg, IDC_SSHPASSWORD); |
| 1105 |
|
static wchar_t password_char; |
| 1106 |
|
if (password_char == 0) { |
| 1107 |
|
wchar_t c = (wchar_t)SendMessage(hWnd, EM_GETPASSWORDCHAR, 0, 0); |
| 1108 |
|
password_char = c; |
| 1109 |
|
} |
| 1110 |
|
if (ShowPassPhrase) { |
| 1111 |
|
SendMessage(hWnd, EM_SETPASSWORDCHAR, 0, 0); |
| 1112 |
|
} else { |
| 1113 |
|
#if !defined(UNICODE) |
| 1114 |
|
if (password_char < 0x100) { |
| 1115 |
|
SendMessageA(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0); |
| 1116 |
|
} else { |
| 1117 |
|
// TODO W系直呼び ↓うまくいかない |
| 1118 |
|
//SendMessageW(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0); |
| 1119 |
|
SendMessageA(hWnd, EM_SETPASSWORDCHAR, (WPARAM)'*', 0); |
| 1120 |
|
} |
| 1121 |
|
#else |
| 1122 |
|
SendMessageW(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0); |
| 1123 |
|
#endif |
| 1124 |
|
} |
| 1125 |
|
//InvalidateRect(hWnd, NULL, TRUE); |
| 1126 |
|
SendDlgItemMessage(dlg, IDC_SSHPASSWORD, EM_SETSEL, 0, -1); |
| 1127 |
|
SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHPASSWORD), TRUE); |
| 1128 |
|
return TRUE; |
| 1129 |
|
} |
| 1130 |
|
break; |
| 1131 |
|
} |
| 1132 |
|
break; |
| 1133 |
|
} |
| 1134 |
|
|
| 1135 |
|
case IDC_USERNAME_OPTION: { |
| 1136 |
|
TCHAR uimsg[MAX_UIMSG]; |
| 1137 |
|
HMENU hMenu= CreatePopupMenu(); |
| 1138 |
|
GetI18nStrT("TTSSH", "DLG_AUTH_PASTE_WINDOWS_USERNAME", |
| 1139 |
|
uimsg, _countof(uimsg), |
| 1140 |
|
"Paste &Windows username", |
| 1141 |
|
pvar->ts->UILanguageFile); |
| 1142 |
|
AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, uimsg); |
| 1143 |
|
RECT rect; |
| 1144 |
|
HWND hWndButton = GetDlgItem(dlg, IDC_USERNAME_OPTION); |
| 1145 |
|
GetWindowRect(hWndButton, &rect); |
| 1146 |
|
int result = TrackPopupMenu(hMenu, TPM_RETURNCMD, rect.left, rect.bottom, 0 , hWndButton, NULL); |
| 1147 |
|
DestroyMenu(hMenu); |
| 1148 |
|
switch (result) { |
| 1149 |
|
case 1: { |
| 1150 |
|
TCHAR user_name[UNLEN+1]; |
| 1151 |
|
DWORD len = _countof(user_name); |
| 1152 |
|
BOOL r = GetUserName(user_name, &len); |
| 1153 |
|
if (r != 0) { |
| 1154 |
|
SetDlgItemText(dlg, IDC_SSHUSERNAME, user_name); |
| 1155 |
|
SendDlgItemMessage(dlg, IDC_SSHUSERNAME, EM_SETSEL, 0, -1); |
| 1156 |
|
SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHUSERNAME), TRUE); |
| 1157 |
|
} |
| 1158 |
|
break; |
| 1159 |
|
} |
| 1160 |
} |
} |
| 1161 |
return TRUE; |
return TRUE; |
| 1162 |
} |
} |
| 1334 |
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
| 1335 |
|
|
| 1336 |
init_auth_machine_banner(pvar, dlg); |
init_auth_machine_banner(pvar, dlg); |
| 1337 |
init_password_control(pvar, dlg, IDC_SSHPASSWORD); |
init_password_control(pvar, dlg, IDC_SSHPASSWORD, NULL); |
| 1338 |
|
|
| 1339 |
if (pvar->auth_state.TIS_prompt != NULL) { |
if (pvar->auth_state.TIS_prompt != NULL) { |
| 1340 |
if (strlen(pvar->auth_state.TIS_prompt) > 10000) { |
if (strlen(pvar->auth_state.TIS_prompt) > 10000) { |
| 1472 |
|
|
| 1473 |
static void init_default_auth_dlg(PTInstVar pvar, HWND dlg) |
static void init_default_auth_dlg(PTInstVar pvar, HWND dlg) |
| 1474 |
{ |
{ |
| 1475 |
char uimsg[MAX_UIMSG]; |
int id; |
| 1476 |
|
TCHAR user_name[UNLEN+1]; |
| 1477 |
|
DWORD len; |
| 1478 |
|
TCHAR uimsg[MAX_UIMSG]; |
| 1479 |
|
TCHAR uimsg2[MAX_UIMSG]; |
| 1480 |
|
const static DlgTextInfo text_info[] = { |
| 1481 |
|
{ 0, "DLG_AUTHSETUP_TITLE" }, |
| 1482 |
|
{ IDC_SSHAUTHBANNER, "DLG_AUTHSETUP_BANNER" }, |
| 1483 |
|
{ IDC_SSH_NO_USERNAME, "DLG_AUTHSETUP_NO_USERNAME" }, |
| 1484 |
|
{ IDC_SSH_DEFAULTUSERNAME, "DLG_AUTHSETUP_USERNAME" }, |
| 1485 |
|
{ IDC_SSH_WINDOWS_USERNAME, "DLG_AUTHSETUP_SYSTEM_USERNAME" }, |
| 1486 |
|
{ IDC_SSH_WINDOWS_USERNAME_TEXT, "DLG_AUTHSETUP_SYSTEM_USERNAME_TEXT" }, |
| 1487 |
|
{ IDC_SSHUSEPASSWORD, "DLG_AUTHSETUP_METHOD_PASSWORD" }, |
| 1488 |
|
{ IDC_SSHUSERSA, "DLG_AUTHSETUP_METHOD_RSA" }, |
| 1489 |
|
{ IDC_SSHUSERHOSTS, "DLG_AUTHSETUP_METHOD_RHOST" }, |
| 1490 |
|
{ IDC_SSHUSETIS, "DLG_AUTHSETUP_METHOD_CHALLENGE" }, |
| 1491 |
|
{ IDC_SSHUSEPAGEANT, "DLG_AUTHSETUP_METHOD_PAGEANT" }, |
| 1492 |
|
{ IDC_RSAFILENAMELABEL, "DLG_AUTH_PRIVATEKEY" }, |
| 1493 |
|
{ IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" }, |
| 1494 |
|
{ IDC_HOSTRSAFILENAMELABEL, "DLG_AUTH_HOST_PRIVATEKEY" }, |
| 1495 |
|
{ IDC_CHECKAUTH, "DLG_AUTHSETUP_CHECKAUTH" }, |
| 1496 |
|
{ IDOK, "BTN_OK" }, |
| 1497 |
|
{ IDCANCEL, "BTN_CANCEL" }, |
| 1498 |
|
}; |
| 1499 |
|
|
| 1500 |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
SetI18DlgStrs("TTSSH", dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); |
|
UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar, uimsg); |
|
|
SetWindowText(dlg, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSETIS, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PAGEANT", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_SSHUSEPAGEANT, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDC_CHECKAUTH, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("DLG_AUTHSETUP_CHECKAUTH", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDC_CHECKAUTH, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("BTN_OK", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); |
|
|
GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); |
|
|
UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); |
|
|
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
|
| 1501 |
|
|
| 1502 |
switch (pvar->settings.DefaultAuthMethod) { |
switch (pvar->settings.DefaultAuthMethod) { |
| 1503 |
case SSH_AUTH_RSA: |
case SSH_AUTH_RSA: |
| 1534 |
if (pvar->settings.CheckAuthListFirst) { |
if (pvar->settings.CheckAuthListFirst) { |
| 1535 |
CheckDlgButton(dlg, IDC_CHECKAUTH, TRUE); |
CheckDlgButton(dlg, IDC_CHECKAUTH, TRUE); |
| 1536 |
} |
} |
| 1537 |
|
|
| 1538 |
|
if (pvar->session_settings.DefaultUserName[0] == 0) { |
| 1539 |
|
// 空なので「入力しない」にしておく |
| 1540 |
|
pvar->session_settings.DefaultUserType = 0; |
| 1541 |
|
} |
| 1542 |
|
id = pvar->settings.DefaultUserType == 1 ? IDC_SSH_DEFAULTUSERNAME : |
| 1543 |
|
pvar->settings.DefaultUserType == 2 ? IDC_SSH_WINDOWS_USERNAME : |
| 1544 |
|
IDC_SSH_NO_USERNAME; |
| 1545 |
|
CheckRadioButton(dlg, IDC_SSH_NO_USERNAME, IDC_SSH_WINDOWS_USERNAME, id); |
| 1546 |
|
|
| 1547 |
|
len = _countof(user_name); |
| 1548 |
|
GetUserName(user_name, &len); |
| 1549 |
|
|
| 1550 |
|
GetDlgItemText(dlg, IDC_SSH_WINDOWS_USERNAME_TEXT, uimsg, _countof(uimsg)); |
| 1551 |
|
_stprintf_s(uimsg2, _countof(uimsg2), uimsg, user_name); |
| 1552 |
|
SetDlgItemText(dlg, IDC_SSH_WINDOWS_USERNAME_TEXT, uimsg2); |
| 1553 |
} |
} |
| 1554 |
|
|
| 1555 |
static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg) |
static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg) |
| 1581 |
GetDlgItemText(dlg, IDC_LOCALUSERNAME, |
GetDlgItemText(dlg, IDC_LOCALUSERNAME, |
| 1582 |
pvar->settings.DefaultRhostsLocalUserName, |
pvar->settings.DefaultRhostsLocalUserName, |
| 1583 |
sizeof(pvar->settings.DefaultRhostsLocalUserName)); |
sizeof(pvar->settings.DefaultRhostsLocalUserName)); |
| 1584 |
|
pvar->settings.DefaultUserType = |
| 1585 |
|
IsDlgButtonChecked(dlg, IDC_SSH_DEFAULTUSERNAME) ? 1 : |
| 1586 |
|
IsDlgButtonChecked(dlg, IDC_SSH_WINDOWS_USERNAME) ? 2 : 0; |
| 1587 |
|
|
| 1588 |
if (IsDlgButtonChecked(dlg, IDC_CHECKAUTH)) { |
if (IsDlgButtonChecked(dlg, IDC_CHECKAUTH)) { |
| 1589 |
pvar->settings.CheckAuthListFirst = TRUE; |
pvar->settings.CheckAuthListFirst = TRUE; |