| 41 |
#include "resource.h" |
#include "resource.h" |
| 42 |
#include "keyfiles.h" |
#include "keyfiles.h" |
| 43 |
#include "libputty.h" |
#include "libputty.h" |
| 44 |
|
#include "tipwin.h" |
| 45 |
|
|
| 46 |
#define AUTH_START_USER_AUTH_ON_ERROR_END 1 |
#define AUTH_START_USER_AUTH_ON_ERROR_END 1 |
| 47 |
|
|
| 65 |
IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1, |
IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1, |
| 66 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, IDC_SSHUSEPAGEANT, -1 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, IDC_SSHUSEPAGEANT, -1 |
| 67 |
}; |
}; |
| 68 |
|
static TipWin *tipwin; |
| 69 |
|
|
| 70 |
LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg, |
LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg, |
| 71 |
WPARAM wParam, LPARAM lParam) |
WPARAM wParam, LPARAM lParam) |
| 73 |
switch (msg) { |
switch (msg) { |
| 74 |
case WM_CHAR: |
case WM_CHAR: |
| 75 |
if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) { |
if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) { |
| 76 |
char chars[] = { (char) wParam, 0 }; |
TCHAR chars[] = { (TCHAR) wParam, 0 }; |
| 77 |
|
|
| 78 |
SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE, |
SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE, |
| 79 |
(LPARAM) (char *) chars); |
(LPARAM) (TCHAR *) chars); |
| 80 |
|
|
| 81 |
|
if (tipwin == NULL) { |
| 82 |
|
TCHAR *s; |
| 83 |
|
if (wParam == 'V' - 'A' + 1) { |
| 84 |
|
s = _T("制御文字を入力しています") |
| 85 |
|
_T("\n") |
| 86 |
|
_T("クリップボードからの貼り付けのショートカットはCTRL+Insertです"); |
| 87 |
|
} else { |
| 88 |
|
s = _T("制御文字を入力しています"); |
| 89 |
|
} |
| 90 |
|
RECT rect; |
| 91 |
|
GetWindowRect(control, &rect); |
| 92 |
|
tipwin = TipWinCreate(control, rect.left, rect.bottom, s); |
| 93 |
|
} |
| 94 |
|
|
| 95 |
return 0; |
return 0; |
| 96 |
|
} else { |
| 97 |
|
if (tipwin != NULL) { |
| 98 |
|
TipWinDestroy(tipwin); |
| 99 |
|
tipwin = NULL; |
| 100 |
|
} |
| 101 |
|
} |
| 102 |
|
break; |
| 103 |
|
case WM_NCDESTROY: |
| 104 |
|
if (tipwin != NULL) { |
| 105 |
|
TipWinDestroy(tipwin); |
| 106 |
|
tipwin = NULL; |
| 107 |
} |
} |
| 108 |
|
break; |
| 109 |
} |
} |
| 110 |
|
|
| 111 |
return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA), |
return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA), |
| 135 |
|
|
| 136 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled)); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled)); |
| 137 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled)); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled)); |
| 138 |
|
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), (!TIS_enabled && !PAGEANT_enabled)); |
| 139 |
|
|
| 140 |
for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) { |
for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) { |
| 141 |
EnableWindow(GetDlgItem(dlg, i), RSA_enabled); |
EnableWindow(GetDlgItem(dlg, i), RSA_enabled); |
| 316 |
if (pvar->ssh2_autologin == 1) { |
if (pvar->ssh2_autologin == 1) { |
| 317 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 318 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE); |
| 319 |
|
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
| 320 |
} |
} |
| 321 |
} |
} |
| 322 |
|
|
| 343 |
} else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) { |
} else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) { |
| 344 |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS); |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS); |
| 345 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 346 |
|
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
| 347 |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
| 348 |
|
|
| 349 |
// /auth=pageant を追加 |
// /auth=pageant を追加 |
| 350 |
} else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) { |
} else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) { |
| 351 |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT); |
CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT); |
| 352 |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); |
| 353 |
|
EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE); |
| 354 |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
SetDlgItemText(dlg, IDC_SSHPASSWORD, ""); |
| 355 |
|
|
| 356 |
} else { |
} else { |
| 709 |
return TRUE; |
return TRUE; |
| 710 |
} |
} |
| 711 |
|
|
| 712 |
|
/** |
| 713 |
|
* クリップボードからANSI文字列を取得する |
| 714 |
|
* 文字列長が必要なときはstrlen()すること |
| 715 |
|
* @param hWnd |
| 716 |
|
* @param emtpy TRUEのときクリップボードを空にする |
| 717 |
|
* @retval 文字列へのポインタ 使用後free()すること |
| 718 |
|
* 文字がない(またはエラー時)はNULL |
| 719 |
|
*/ |
| 720 |
|
char *GetClipboardTextA(HWND hWnd, BOOL empty) |
| 721 |
|
{ |
| 722 |
|
HGLOBAL hGlobal; |
| 723 |
|
const char *lpStr; |
| 724 |
|
size_t length; |
| 725 |
|
char *pool; |
| 726 |
|
|
| 727 |
|
OpenClipboard(hWnd); |
| 728 |
|
hGlobal = (HGLOBAL)GetClipboardData(CF_TEXT); |
| 729 |
|
if (hGlobal == NULL) { |
| 730 |
|
CloseClipboard(); |
| 731 |
|
return NULL; |
| 732 |
|
} |
| 733 |
|
lpStr = (const char *)GlobalLock(hGlobal); |
| 734 |
|
length = GlobalSize(hGlobal); |
| 735 |
|
if (length == 0) { |
| 736 |
|
pool = NULL; |
| 737 |
|
} else { |
| 738 |
|
pool = (char *)malloc(length + 1); // +1 for terminator |
| 739 |
|
memcpy(pool, lpStr, length); |
| 740 |
|
pool[length] = '\0'; |
| 741 |
|
} |
| 742 |
|
GlobalUnlock(hGlobal); |
| 743 |
|
if (empty) { |
| 744 |
|
EmptyClipboard(); |
| 745 |
|
} |
| 746 |
|
CloseClipboard(); |
| 747 |
|
|
| 748 |
|
return pool; |
| 749 |
|
} |
| 750 |
|
|
| 751 |
|
|
| 752 |
BOOL autologin_sent_none; |
BOOL autologin_sent_none; |
| 753 |
static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, |
static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, |
| 754 |
LPARAM lParam) |
LPARAM lParam) |
| 1002 |
pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT); |
pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT); |
| 1003 |
return TRUE; |
return TRUE; |
| 1004 |
|
|
| 1005 |
|
case IDC_FROM_CLIPBOARD: { |
| 1006 |
|
char *clipboard = GetClipboardTextA(dlg, TRUE); |
| 1007 |
|
if (clipboard != NULL) { |
| 1008 |
|
SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard); |
| 1009 |
|
free(clipboard); |
| 1010 |
|
SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDOK), TRUE); |
| 1011 |
|
return FALSE; |
| 1012 |
|
} |
| 1013 |
|
return TRUE; |
| 1014 |
|
} |
| 1015 |
|
|
| 1016 |
default: |
default: |
| 1017 |
return FALSE; |
return FALSE; |
| 1018 |
} |
} |