| 28 |
|
|
| 29 |
/* Tera Term extension mechanism |
/* Tera Term extension mechanism |
| 30 |
Robert O'Callahan (roc+tt@cs.cmu.edu) |
Robert O'Callahan (roc+tt@cs.cmu.edu) |
| 31 |
|
|
| 32 |
Tera Term by Takashi Teranishi (teranishi@rikaxp.riken.go.jp) |
Tera Term by Takashi Teranishi (teranishi@rikaxp.riken.go.jp) |
| 33 |
*/ |
*/ |
| 34 |
|
|
| 417 |
WritePrivateProfileString("TTSSH", "HeartBeat", buf, fileName); |
WritePrivateProfileString("TTSSH", "HeartBeat", buf, fileName); |
| 418 |
|
|
| 419 |
// Remember password (2006.8.5 yutaka) |
// Remember password (2006.8.5 yutaka) |
| 420 |
WritePrivateProfileString("TTSSH", "RememberPassword", |
WritePrivateProfileString("TTSSH", "RememberPassword", |
| 421 |
settings->remember_password ? "1" : "0", |
settings->remember_password ? "1" : "0", |
| 422 |
fileName); |
fileName); |
| 423 |
|
|
| 424 |
// 初回の認証ダイアログでサポートされているメソッドをチェックし、 |
// 初回の認証ダイアログでサポートされているメソッドをチェックし、 |
| 898 |
str[select] = '\0'; |
str[select] = '\0'; |
| 899 |
|
|
| 900 |
} |
} |
| 901 |
} |
} |
| 902 |
|
|
| 903 |
if (wParam == 0x55) { // カーソルより左側をすべて消す |
if (wParam == 0x55) { // カーソルより左側をすべて消す |
| 904 |
if (select >= len) { |
if (select >= len) { |
| 1119 |
SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_SETCURSEL, w - 1, 0); |
SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_SETCURSEL, w - 1, 0); |
| 1120 |
else { /* All com ports are already used */ |
else { /* All com ports are already used */ |
| 1121 |
GetHNRec->PortType = IdTCPIP; |
GetHNRec->PortType = IdTCPIP; |
| 1122 |
enable_dlg_items(dlg, IDC_HOSTSERIAL, IDC_HOSTSERIAL, FALSE); |
enable_dlg_items(dlg, IDC_HOSTSERIAL, IDC_HOSTSERIAL, FALSE); |
| 1123 |
} |
} |
| 1124 |
|
|
| 1125 |
CheckRadioButton(dlg, IDC_HOSTTCPIP, IDC_HOSTSERIAL, |
CheckRadioButton(dlg, IDC_HOSTTCPIP, IDC_HOSTSERIAL, |
| 1128 |
if (GetHNRec->PortType == IdTCPIP) { |
if (GetHNRec->PortType == IdTCPIP) { |
| 1129 |
enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE); |
enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE); |
| 1130 |
|
|
| 1131 |
enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, TRUE); |
enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, TRUE); |
| 1132 |
enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, TRUE); |
enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, TRUE); |
| 1133 |
|
|
| 1134 |
enable_dlg_items(dlg, IDC_HISTORY, IDC_HISTORY, TRUE); // enabled |
enable_dlg_items(dlg, IDC_HISTORY, IDC_HISTORY, TRUE); // enabled |
| 1135 |
} |
} |
| 1233 |
} else if (IsDlgButtonChecked(dlg, IDC_HOSTSSH)) { |
} else if (IsDlgButtonChecked(dlg, IDC_HOSTSSH)) { |
| 1234 |
pvar->hostdlg_Enabled = TRUE; |
pvar->hostdlg_Enabled = TRUE; |
| 1235 |
|
|
| 1236 |
// check SSH protocol version |
// check SSH protocol version |
| 1237 |
memset(afstr, 0, sizeof(afstr)); |
memset(afstr, 0, sizeof(afstr)); |
| 1238 |
GetDlgItemText(dlg, IDC_SSH_VERSION, afstr, sizeof(afstr)); |
GetDlgItemText(dlg, IDC_SSH_VERSION, afstr, sizeof(afstr)); |
| 1239 |
if (_stricmp(afstr, "SSH1") == 0) { |
if (_stricmp(afstr, "SSH1") == 0) { |
| 1566 |
pvar->settings.Enabled = 0; |
pvar->settings.Enabled = 0; |
| 1567 |
|
|
| 1568 |
} else if (MATCH_STR(option + 1, "auth") == 0) { |
} else if (MATCH_STR(option + 1, "auth") == 0) { |
| 1569 |
// SSH2自動ログインオプションの追加 |
// SSH2自動ログインオプションの追加 |
| 1570 |
// |
// |
| 1571 |
// SYNOPSIS: /ssh /auth=passowrd /user=ユーザ名 /passwd=パスワード |
// SYNOPSIS: /ssh /auth=passowrd /user=ユーザ名 /passwd=パスワード |
| 1572 |
// /ssh /auth=publickey /user=ユーザ名 /passwd=パスワード /keyfile=パス |
// /ssh /auth=publickey /user=ユーザ名 /passwd=パスワード /keyfile=パス |
| 1701 |
|
|
| 1702 |
return OPTION_REPLACE; |
return OPTION_REPLACE; |
| 1703 |
} |
} |
| 1704 |
|
else if (strchr(option, '@') != NULL) { |
| 1705 |
|
// |
| 1706 |
|
// user@host 形式のサポート |
| 1707 |
|
// 取り合えずsshでのみサポートの為、ユーザ名はttssh内で潰す。 |
| 1708 |
|
// (ssh接続以外 -- ttsshには関係ない場合でも) |
| 1709 |
|
// 将来的にtelnet authentication optionをサポートした時は |
| 1710 |
|
// Tera Term本体で処理するようにする予定。 |
| 1711 |
|
// |
| 1712 |
|
char *p; |
| 1713 |
|
p = strchr(option, '@'); |
| 1714 |
|
*p = 0; |
| 1715 |
|
|
| 1716 |
|
strncpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), option, _TRUNCATE); |
| 1717 |
|
|
| 1718 |
|
// ユーザ名部分をスペースで潰す。 |
| 1719 |
|
// 後続のTTXやTera Term本体で解釈する時にはスペースを読み飛ばすので、 |
| 1720 |
|
// ホスト名を先頭に詰める必要は無い。 |
| 1721 |
|
memset(option, ' ', p-option+1); |
| 1722 |
|
|
| 1723 |
|
return OPTION_REPLACE; |
| 1724 |
|
} |
| 1725 |
|
|
| 1726 |
return OPTION_NONE; |
return OPTION_NONE; |
| 1727 |
} |
} |
| 1939 |
} |
} |
| 1940 |
|
|
| 1941 |
ret = VerQueryValue(buf, |
ret = VerQueryValue(buf, |
| 1942 |
"\\VarFileInfo\\Translation", |
"\\VarFileInfo\\Translation", |
| 1943 |
(LPVOID *)&lplgcode, &unLen); |
(LPVOID *)&lplgcode, &unLen); |
| 1944 |
if (ret == FALSE) |
if (ret == FALSE) |
| 1945 |
goto error; |
goto error; |
| 1946 |
|
|
| 1947 |
for (i = 0 ; i < (int)(unLen / sizeof(LANGANDCODEPAGE)) ; i++) { |
for (i = 0 ; i < (int)(unLen / sizeof(LANGANDCODEPAGE)) ; i++) { |
| 1948 |
_snprintf_s(fmt, sizeof(fmt), _TRUNCATE, |
_snprintf_s(fmt, sizeof(fmt), _TRUNCATE, |
| 1949 |
"\\StringFileInfo\\%04x%04x\\FileVersion", |
"\\StringFileInfo\\%04x%04x\\FileVersion", |
| 1950 |
lplgcode[i].wLanguage, lplgcode[i].wCodePage); |
lplgcode[i].wLanguage, lplgcode[i].wCodePage); |
| 1951 |
VerQueryValue(buf, fmt, &pbuf, &unLen); |
VerQueryValue(buf, fmt, &pbuf, &unLen); |
| 1952 |
if (unLen > 0) { // get success |
if (unLen > 0) { // get success |
| 1983 |
GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); |
GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); |
| 1984 |
UTIL_get_lang_msg("BTN_OK", pvar, uimsg); |
UTIL_get_lang_msg("BTN_OK", pvar, uimsg); |
| 1985 |
SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); |
SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); |
| 1986 |
|
|
| 1987 |
// TTSSHのバージョンを設定する (2005.2.28 yutaka) |
// TTSSHのバージョンを設定する (2005.2.28 yutaka) |
| 1988 |
get_file_version("ttxssh.dll", &a, &b, &c, &d); |
get_file_version("ttxssh.dll", &a, &b, &c, &d); |
| 1989 |
_snprintf_s(buf, sizeof(buf), _TRUNCATE, |
_snprintf_s(buf, sizeof(buf), _TRUNCATE, |
| 2232 |
int i; |
int i; |
| 2233 |
int ch; |
int ch; |
| 2234 |
char uimsg[MAX_UIMSG]; |
char uimsg[MAX_UIMSG]; |
| 2235 |
|
|
| 2236 |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
| 2237 |
UTIL_get_lang_msg("DLG_SSHSETUP_TITLE", pvar, uimsg); |
UTIL_get_lang_msg("DLG_SSHSETUP_TITLE", pvar, uimsg); |
| 2238 |
SetWindowText(dlg, pvar->ts->UIMsg); |
SetWindowText(dlg, pvar->ts->UIMsg); |
| 2281 |
GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); |
GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); |
| 2282 |
UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); |
UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); |
| 2283 |
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); |
| 2284 |
|
|
| 2285 |
SendMessage(compressionControl, TBM_SETRANGE, TRUE, MAKELONG(0, 9)); |
SendMessage(compressionControl, TBM_SETRANGE, TRUE, MAKELONG(0, 9)); |
| 2286 |
SendMessage(compressionControl, TBM_SETPOS, TRUE, |
SendMessage(compressionControl, TBM_SETPOS, TRUE, |
| 2287 |
pvar->settings.CompressionLevel); |
pvar->settings.CompressionLevel); |
| 2752 |
|
|
| 2753 |
|
|
| 2754 |
// |
// |
| 2755 |
// RC4 |
// RC4 |
| 2756 |
// |
// |
| 2757 |
|
|
| 2758 |
/* Size of key to use */ |
/* Size of key to use */ |
| 2990 |
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); |
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); |
| 2991 |
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); |
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); |
| 2992 |
output[3] = input[2] & 0x3f; |
output[3] = input[2] & 0x3f; |
| 2993 |
if (output[0] >= 64 || |
if (output[0] >= 64 || |
| 2994 |
output[1] >= 64 || |
output[1] >= 64 || |
| 2995 |
output[2] >= 64 || |
output[2] >= 64 || |
| 2996 |
output[3] >= 64) |
output[3] >= 64) |
| 3013 |
output[0] = input[0] >> 2; |
output[0] = input[0] >> 2; |
| 3014 |
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); |
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); |
| 3015 |
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); |
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); |
| 3016 |
if (output[0] >= 64 || |
if (output[0] >= 64 || |
| 3017 |
output[1] >= 64 || |
output[1] >= 64 || |
| 3018 |
output[2] >= 64) |
output[2] >= 64) |
| 3019 |
return -1; |
return -1; |
| 3125 |
} |
} |
| 3126 |
return FALSE; |
return FALSE; |
| 3127 |
|
|
| 3128 |
case IDCANCEL: |
case IDCANCEL: |
| 3129 |
EndDialog(dlg, 0); // dialog close |
EndDialog(dlg, 0); // dialog close |
| 3130 |
return TRUE; |
return TRUE; |
| 3131 |
|
|
| 3170 |
HFONT font; |
HFONT font; |
| 3171 |
|
|
| 3172 |
switch (msg) { |
switch (msg) { |
| 3173 |
case WM_INITDIALOG: |
case WM_INITDIALOG: |
| 3174 |
{ |
{ |
| 3175 |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
GetWindowText(dlg, uimsg, sizeof(uimsg)); |
| 3176 |
UTIL_get_lang_msg("DLG_KEYGEN_TITLE", pvar, uimsg); |
UTIL_get_lang_msg("DLG_KEYGEN_TITLE", pvar, uimsg); |
| 3257 |
} |
} |
| 3258 |
return TRUE; |
return TRUE; |
| 3259 |
|
|
| 3260 |
case IDCANCEL: |
case IDCANCEL: |
| 3261 |
// don't forget to free SSH resource! |
// don't forget to free SSH resource! |
| 3262 |
free_ssh_key(); |
free_ssh_key(); |
| 3263 |
EndDialog(dlg, 0); // dialog close |
EndDialog(dlg, 0); // dialog close |
| 3380 |
buffer_put_bignum2(b, rsa->e); |
buffer_put_bignum2(b, rsa->e); |
| 3381 |
buffer_put_bignum2(b, rsa->n); |
buffer_put_bignum2(b, rsa->n); |
| 3382 |
} |
} |
| 3383 |
|
|
| 3384 |
blob = buffer_ptr(b); |
blob = buffer_ptr(b); |
| 3385 |
len = buffer_len(b); |
len = buffer_len(b); |
| 3386 |
uuenc = malloc(len * 2); |
uuenc = malloc(len * 2); |
| 3407 |
break; |
break; |
| 3408 |
|
|
| 3409 |
// saving private key file |
// saving private key file |
| 3410 |
case IDC_SAVE_PRIVATE_KEY: |
case IDC_SAVE_PRIVATE_KEY: |
| 3411 |
{ |
{ |
| 3412 |
char buf[1024], buf_conf[1024]; // passphrase |
char buf[1024], buf_conf[1024]; // passphrase |
| 3413 |
int ret; |
int ret; |
| 3414 |
OPENFILENAME ofn; |
OPENFILENAME ofn; |
| 3415 |
char filename[MAX_PATH]; |
char filename[MAX_PATH]; |
| 3524 |
// padding with 8byte align |
// padding with 8byte align |
| 3525 |
while (buffer_len(b) % 8) { |
while (buffer_len(b) % 8) { |
| 3526 |
buffer_put_char(b, 0); |
buffer_put_char(b, 0); |
| 3527 |
} |
} |
| 3528 |
|
|
| 3529 |
// |
// |
| 3530 |
// step(2) |
// step(2) |
| 3652 |
} |
} |
| 3653 |
|
|
| 3654 |
switch (cmd) { |
switch (cmd) { |
| 3655 |
case ID_SSHSCPMENU: |
case ID_SSHSCPMENU: |
| 3656 |
if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog, |
if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog, |
| 3657 |
(LPARAM) pvar) == -1) { |
(LPARAM) pvar) == -1) { |
| 3658 |
UTIL_get_lang_msg("MSG_CREATEWINDOW_SCP_ERROR", pvar, |
UTIL_get_lang_msg("MSG_CREATEWINDOW_SCP_ERROR", pvar, |
| 3663 |
} |
} |
| 3664 |
return 1; |
return 1; |
| 3665 |
|
|
| 3666 |
case ID_SSHKEYGENMENU: |
case ID_SSHKEYGENMENU: |
| 3667 |
if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator, |
if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator, |
| 3668 |
(LPARAM) pvar) == -1) { |
(LPARAM) pvar) == -1) { |
| 3669 |
UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar, |
UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar, |
| 3762 |
if (str[i] == '@') |
if (str[i] == '@') |
| 3763 |
n++; |
n++; |
| 3764 |
} |
} |
| 3765 |
if (dst_len < (len + 2*n)) |
if (dst_len < (len + 2*n)) |
| 3766 |
return; |
return; |
| 3767 |
|
|
| 3768 |
for (i = 0 ; i < len ; i++) { |
for (i = 0 ; i < len ; i++) { |