Develop and Download Open Source Software

Browse Subversion Repository

Contents of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/auth.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2946 - (show annotations) (download) (as text)
Thu Jan 4 08:36:42 2007 UTC (17 years, 3 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 48573 byte(s)
フォントを変更する部分を追加した。

1 /*
2 Copyright (c) 1998-2001, Robert O'Callahan
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without modification,
6 are permitted provided that the following conditions are met:
7
8 Redistributions of source code must retain the above copyright notice, this list of
9 conditions and the following disclaimer.
10
11 Redistributions in binary form must reproduce the above copyright notice, this list
12 of conditions and the following disclaimer in the documentation and/or other materials
13 provided with the distribution.
14
15 The name of Robert O'Callahan may not be used to endorse or promote products derived from
16 this software without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
19 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include "ttxssh.h"
30 #include "util.h"
31 #include "ssh.h"
32
33 #include <io.h>
34 #include <fcntl.h>
35 #include <stdlib.h>
36 #include <errno.h>
37
38 #include "resource.h"
39 #include "keyfiles.h"
40
41 #define AUTH_START_USER_AUTH_ON_ERROR_END 1
42
43 #define MAX_AUTH_CONTROL IDC_SSHUSETIS
44
45 #ifdef I18N
46 static HFONT DlgAuthFont;
47 static HFONT DlgTisFont;
48 static HFONT DlgAuthSetupFont;
49 #endif
50
51 void destroy_malloced_string(char FAR * FAR * str)
52 {
53 if (*str != NULL) {
54 memset(*str, 0, strlen(*str));
55 free(*str);
56 *str = NULL;
57 }
58 }
59
60 static int auth_types_to_control_IDs[] = {
61 -1, IDC_SSHUSERHOSTS, IDC_SSHUSERSA, IDC_SSHUSEPASSWORD,
62 IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1
63 };
64
65 static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,
66 WPARAM wParam, LPARAM lParam)
67 {
68 switch (msg) {
69 case WM_CHAR:
70 if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) {
71 char chars[] = { (char) wParam, 0 };
72
73 SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,
74 (LPARAM) (char FAR *) chars);
75 return 0;
76 }
77 }
78
79 return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA),
80 control, msg, wParam, lParam);
81 }
82
83 static void init_password_control(HWND dlg)
84 {
85 HWND passwordControl = GetDlgItem(dlg, IDC_SSHPASSWORD);
86
87 SetWindowLong(passwordControl, GWL_USERDATA,
88 SetWindowLong(passwordControl, GWL_WNDPROC,
89 (LONG) password_wnd_proc));
90
91 SetFocus(passwordControl);
92 }
93
94 static void set_auth_options_status(HWND dlg, int controlID)
95 {
96 BOOL RSA_enabled = controlID == IDC_SSHUSERSA;
97 BOOL rhosts_enabled = controlID == IDC_SSHUSERHOSTS;
98 BOOL TIS_enabled = controlID == IDC_SSHUSETIS;
99 int i;
100
101 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, controlID);
102
103 EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), !TIS_enabled);
104 EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), !TIS_enabled);
105
106 for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {
107 EnableWindow(GetDlgItem(dlg, i), RSA_enabled);
108 }
109
110 for (i = IDC_LOCALUSERNAMELABEL; i <= IDC_HOSTRSAFILENAME; i++) {
111 EnableWindow(GetDlgItem(dlg, i), rhosts_enabled);
112 }
113 }
114
115 static void init_auth_machine_banner(PTInstVar pvar, HWND dlg)
116 {
117 char buf[1024] = "Logging in to ";
118 #ifdef I18N
119 char buf2[1024];
120 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf2, sizeof(buf2));
121 _snprintf(buf, sizeof(buf), buf2, SSH_get_host_name(pvar));
122 #else
123 if (strlen(buf) + strlen(SSH_get_host_name(pvar)) < sizeof(buf) - 2) {
124 strcat(buf, SSH_get_host_name(pvar));
125 }
126 #endif
127 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf);
128 }
129
130 static void update_server_supported_types(PTInstVar pvar, HWND dlg)
131 {
132 int supported_methods = pvar->auth_state.supported_types;
133 int cur_control = -1;
134 int control;
135 HWND focus = GetFocus();
136
137 if (supported_methods == 0) {
138 return;
139 }
140
141 for (control = IDC_SSHUSEPASSWORD; control <= MAX_AUTH_CONTROL;
142 control++) {
143 BOOL enabled = FALSE;
144 int method;
145 HWND item = GetDlgItem(dlg, control);
146
147 if (item != NULL) {
148 for (method = 0; method <= SSH_AUTH_MAX; method++) {
149 if (auth_types_to_control_IDs[method] == control
150 && (supported_methods & (1 << method)) != 0) {
151 enabled = TRUE;
152 }
153 }
154
155 EnableWindow(item, enabled);
156
157 if (IsDlgButtonChecked(dlg, control)) {
158 cur_control = control;
159 }
160 }
161 }
162
163 if (cur_control >= 0) {
164 if (!IsWindowEnabled(GetDlgItem(dlg, cur_control))) {
165 do {
166 cur_control++;
167 if (cur_control > MAX_AUTH_CONTROL) {
168 cur_control = IDC_SSHUSEPASSWORD;
169 }
170 } while (!IsWindowEnabled(GetDlgItem(dlg, cur_control)));
171
172 set_auth_options_status(dlg, cur_control);
173
174 if (focus != NULL && !IsWindowEnabled(focus)) {
175 SetFocus(GetDlgItem(dlg, cur_control));
176 }
177 }
178 }
179 }
180
181 static void init_auth_dlg(PTInstVar pvar, HWND dlg)
182 {
183 int default_method = pvar->session_settings.DefaultAuthMethod;
184
185 #ifdef I18N
186 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
187 UTIL_get_lang_msg("DLG_AUTH_TITLE", pvar);
188 SetWindowText(dlg, pvar->ts->UIMsg);
189
190 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
191 UTIL_get_lang_msg("DLG_AUTH_BANNER", pvar);
192 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
193
194 GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
195 UTIL_get_lang_msg("DLG_AUTH_BANNER2", pvar);
196 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg);
197
198 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
199 UTIL_get_lang_msg("DLG_AUTH_USERNAME", pvar);
200 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
201
202 GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
203 UTIL_get_lang_msg("DLG_AUTH_PASSWORD", pvar);
204 SetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg);
205
206 GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
207 UTIL_get_lang_msg("DLG_AUTH_REMEMBER_PASSWORD", pvar);
208 SetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg);
209
210 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
211 UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD", pvar);
212 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
213
214 GetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
215 UTIL_get_lang_msg("DLG_AUTH_METHOD_RSA", pvar);
216 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
217
218 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
219 UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar);
220 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
221
222 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
223 UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar);
224 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
225
226 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
227 UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar);
228 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
229
230 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
231 UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar);
232 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
233
234 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
235 UTIL_get_lang_msg("BTN_OK", pvar);
236 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
237
238 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
239 UTIL_get_lang_msg("BTN_DISCONNECT", pvar);
240 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
241 #endif
242
243 init_auth_machine_banner(pvar, dlg);
244 init_password_control(dlg);
245
246 if (pvar->auth_state.failed_method != SSH_AUTH_NONE) {
247 /* must be retrying a failed attempt */
248 #ifdef I18N
249 strcpy(pvar->ts->UIMsg, "Authentication failed. Please retry.");
250 UTIL_get_lang_msg("DLG_AUTH_BANNER2_FAILED", pvar);
251 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, "Retrying SSH Authentication");
252
253 strcpy(pvar->ts->UIMsg, "Retrying SSH Authentication");
254 UTIL_get_lang_msg("DLG_AUTH_TITLE_FAILED", pvar);
255 SetWindowText(dlg, pvar->ts->UIMsg);
256 #else
257 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
258 "Authentication failed. Please retry.");
259 SetWindowText(dlg, "Retrying SSH Authentication");
260 #endif
261 default_method = pvar->auth_state.failed_method;
262 }
263
264 set_auth_options_status(dlg,
265 auth_types_to_control_IDs[default_method]);
266
267 if (default_method == SSH_AUTH_TIS) {
268 /* we disabled the password control, so fix the focus */
269 SetFocus(GetDlgItem(dlg, IDC_SSHUSETIS));
270 }
271
272 if (pvar->auth_state.user != NULL) {
273 SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);
274 EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
275 EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
276 } else if (pvar->session_settings.DefaultUserName[0] != 0) {
277 SetDlgItemText(dlg, IDC_SSHUSERNAME,
278 pvar->session_settings.DefaultUserName);
279 } else {
280 SetFocus(GetDlgItem(dlg, IDC_SSHUSERNAME));
281 }
282
283 SetDlgItemText(dlg, IDC_RSAFILENAME,
284 pvar->session_settings.DefaultRSAPrivateKeyFile);
285 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
286 pvar->session_settings.DefaultRhostsHostPrivateKeyFile);
287 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
288 pvar->session_settings.DefaultRhostsLocalUserName);
289
290 update_server_supported_types(pvar, dlg);
291
292 // SSH2 autologin
293 // ���[�U�A�p�X���[�h�A�F�����\�b�h���������������A������������OK�{�^�������������B
294 //
295 // (2004.12.1 yutaka)
296 // (2005.1.26 yutaka) ���J���F���T�|�[�g
297 // �������O�C���������������A�������������������X���\ (2006.9.18 maya)
298 #if 0
299 if (pvar->ssh2_autologin == 1) {
300 #endif
301 if (strlen(pvar->ssh2_username) > 0) {
302 SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username);
303 }
304 if (pvar->ssh2_autologin == 1) {
305 EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
306 EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
307 }
308
309 SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password);
310 if (pvar->ssh2_autologin == 1) {
311 EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
312 EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);
313 }
314
315 // '/I' �w�������������������������� (2005.9.5 yutaka)
316 if (pvar->ts->Minimize) {
317 //20050822���� start T.Takahashi
318 ShowWindow(dlg,SW_MINIMIZE);
319 //20050822���� end T.Takahashi
320 }
321
322 if (pvar->ssh2_authmethod == SSH_AUTH_PASSWORD) {
323 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPASSWORD);
324
325 } else if (pvar->ssh2_authmethod == SSH_AUTH_RSA) {
326 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSERSA);
327
328 SetDlgItemText(dlg, IDC_RSAFILENAME, pvar->ssh2_keyfile);
329 if (pvar->ssh2_autologin == 1) {
330 EnableWindow(GetDlgItem(dlg, IDC_CHOOSERSAFILE), FALSE);
331 EnableWindow(GetDlgItem(dlg, IDC_RSAFILENAME), FALSE);
332 }
333
334 } else {
335 // TODO
336
337 }
338 #if 0
339 }
340 #endif
341
342 #if 1
343 // �p�X���[�h�F���������O���Akeyboard-interactive���\�b�h�������������A���x������
344 // ���X�����B(2005.3.12 yutaka)
345 if (pvar->settings.ssh2_keyboard_interactive == 1) {
346 #ifdef I18N
347 strcpy(pvar->ts->UIMsg, "Use r&hosts to log in (SSH1)");
348 UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar);
349 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
350 #else
351 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, "Use p&lain password to log in (with keyboard-interactive)");
352 #endif
353 }
354
355 if (pvar->settings.ssh_protocol_version == 1) {
356 #ifdef I18N
357 strcpy(pvar->ts->UIMsg, "Use challenge/response to log in(&TIS)");
358 UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE1", pvar);
359 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
360 #else
361 SetDlgItemText(dlg, IDC_SSHUSETIS, "Use challenge/response to log in(&TIS)");
362 #endif
363 } else {
364 #ifdef I18N
365 strcpy(pvar->ts->UIMsg, "Use challenge/response to log in(&keyboard-interactive)");
366 UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE2", pvar);
367 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
368 #else
369 SetDlgItemText(dlg, IDC_SSHUSETIS, "Use challenge/response to log in(&keyboard-interactive)");
370 #endif
371 }
372 #endif
373
374 // �p�X���[�h���o���������`�F�b�N�{�b�N�X�����f�t�H���g���L�������� (2006.8.3 yutaka)
375 if (pvar->ts_SSH->remember_password) {
376 SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_SETCHECK, BST_CHECKED, 0);
377 } else {
378 SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_SETCHECK, BST_UNCHECKED, 0);
379 }
380
381 }
382
383 static char FAR *alloc_control_text(HWND ctl)
384 {
385 int len = GetWindowTextLength(ctl);
386 char FAR *result = malloc(len + 1);
387
388 if (result != NULL) {
389 GetWindowText(ctl, result, len + 1);
390 result[len] = 0;
391 }
392
393 return result;
394 }
395
396 #ifdef I18N
397 static int get_key_file_name(HWND parent, char FAR * buf, int bufsize, PTInstVar pvar)
398 #else
399 static int get_key_file_name(HWND parent, char FAR * buf, int bufsize)
400 #endif
401 {
402 #ifdef TERATERM32
403 OPENFILENAME params;
404 char fullname_buf[2048] = "identity";
405 #ifdef I18N
406 char filter[MAX_UIMSG];
407 #endif
408
409 ZeroMemory(&params, sizeof(params));
410 params.lStructSize = sizeof(OPENFILENAME);
411 params.hwndOwner = parent;
412 // �t�B���^������ (2004.12.19 yutaka)
413 // 3�t�@�C���t�B���^������ (2005.4.26 yutaka)
414 #ifdef I18N
415 /* use memcpy to copy with '\0' */
416 memcpy(pvar->ts->UIMsg, "identity files\0identity;id_rsa;id_dsa\0identity(RSA1)\0identity\0id_rsa(SSH2)\0id_rsa\0id_dsa(SSH2)\0id_dsa\0all(*.*)\0*.*\0\0", sizeof(pvar->ts->UIMsg));
417 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_FILTER", pvar);
418 memcpy(filter, pvar->ts->UIMsg, sizeof(filter));
419 params.lpstrFilter = filter;
420 #else
421 params.lpstrFilter = "identity files\0identity;id_rsa;id_dsa\0identity(RSA1)\0identity\0id_rsa(SSH2)\0id_rsa\0id_dsa(SSH2)\0id_dsa\0all(*.*)\0*.*\0\0";
422 #endif
423 params.lpstrCustomFilter = NULL;
424 params.nFilterIndex = 0;
425 buf[0] = 0;
426 params.lpstrFile = fullname_buf;
427 params.nMaxFile = sizeof(fullname_buf);
428 params.lpstrFileTitle = NULL;
429 params.lpstrInitialDir = NULL;
430 #ifdef I18N
431 strcpy(pvar->ts->UIMsg, "Choose a file with the RSA/DSA private key");
432 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_TITLE", pvar);
433 params.lpstrTitle = pvar->ts->UIMsg;
434 #else
435 params.lpstrTitle = "Choose a file with the RSA/DSA private key";
436 #endif
437 params.Flags =
438 OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
439 params.lpstrDefExt = NULL;
440
441 if (GetOpenFileName(&params) != 0) {
442 copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf);
443 return 1;
444 } else {
445 return 0;
446 }
447 #else
448 return 0;
449 #endif
450 }
451
452 #ifdef I18N
453 static void choose_RSA_key_file(HWND dlg, PTInstVar pvar)
454 #else
455 static void choose_RSA_key_file(HWND dlg)
456 #endif
457 {
458 char buf[1024];
459
460 #ifdef I18N
461 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
462 #else
463 if (get_key_file_name(dlg, buf, sizeof(buf))) {
464 #endif
465 SetDlgItemText(dlg, IDC_RSAFILENAME, buf);
466 }
467 }
468
469 #ifdef I18N
470 static void choose_host_RSA_key_file(HWND dlg, PTInstVar pvar)
471 #else
472 static void choose_host_RSA_key_file(HWND dlg)
473 #endif
474 {
475 char buf[1024];
476
477 #ifdef I18N
478 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
479 #else
480 if (get_key_file_name(dlg, buf, sizeof(buf))) {
481 #endif
482 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME, buf);
483 }
484 }
485
486 static BOOL end_auth_dlg(PTInstVar pvar, HWND dlg)
487 {
488 int method = SSH_AUTH_PASSWORD;
489 char FAR *password =
490 alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
491 CRYPTKeyPair FAR *key_pair = NULL;
492
493 if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
494 method = SSH_AUTH_RSA;
495 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
496 if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
497 method = SSH_AUTH_RHOSTS_RSA;
498 } else {
499 method = SSH_AUTH_RHOSTS;
500 }
501 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
502 method = SSH_AUTH_TIS;
503 }
504
505 if (method == SSH_AUTH_RSA || method == SSH_AUTH_RHOSTS_RSA) {
506 char buf[2048];
507 int file_ctl_ID =
508 method == SSH_AUTH_RSA ? IDC_RSAFILENAME : IDC_HOSTRSAFILENAME;
509
510 buf[0] = 0;
511 GetDlgItemText(dlg, file_ctl_ID, buf, sizeof(buf));
512 if (buf[0] == 0) {
513 #ifdef I18N
514 strcpy(pvar->ts->UIMsg, "You must specify a file containing the RSA/DSA private key.");
515 UTIL_get_lang_msg("MSG_KEYSPECIFY_ERROR", pvar);
516 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
517 #else
518 notify_nonfatal_error(pvar,
519 "You must specify a file containing the RSA/DSA private key.");
520 #endif
521 SetFocus(GetDlgItem(dlg, file_ctl_ID));
522 destroy_malloced_string(&password);
523 return FALSE;
524 }
525
526 if (SSHv1(pvar)) {
527 BOOL invalid_passphrase = FALSE;
528
529 key_pair = KEYFILES_read_private_key(pvar, buf, password,
530 &invalid_passphrase,
531 FALSE);
532
533 if (key_pair == NULL) {
534 if (invalid_passphrase) {
535 HWND passwordCtl = GetDlgItem(dlg, IDC_SSHPASSWORD);
536
537 SetFocus(passwordCtl);
538 SendMessage(passwordCtl, EM_SETSEL, 0, -1);
539 } else {
540 SetFocus(GetDlgItem(dlg, file_ctl_ID));
541 }
542 destroy_malloced_string(&password);
543 return FALSE;
544 }
545
546 } else { // SSH2(yutaka)
547 BOOL invalid_passphrase = FALSE;
548 char errmsg[256];
549
550 memset(errmsg, 0, sizeof(errmsg));
551 //GetCurrentDirectory(sizeof(errmsg), errmsg);
552
553 key_pair = read_SSH2_private_key(pvar, buf, password,
554 &invalid_passphrase,
555 FALSE,
556 errmsg,
557 sizeof(errmsg)
558 );
559
560 if (key_pair == NULL) { // read error
561 char buf[1024];
562 #ifdef I18N
563 strcpy(pvar->ts->UIMsg, "read error SSH2 private key file\r\n%s");
564 UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar);
565 _snprintf(buf, sizeof(buf), pvar->ts->UIMsg, errmsg);
566 #else
567 _snprintf(buf, sizeof(buf), "read error SSH2 private key file\r\n%s", errmsg);
568 #endif
569 notify_nonfatal_error(pvar, buf);
570 destroy_malloced_string(&password);
571 return FALSE;
572 }
573
574 }
575
576 }
577
578 /* from here on, we cannot fail, so just munge cur_cred in place */
579 pvar->auth_state.cur_cred.method = method;
580 pvar->auth_state.cur_cred.key_pair = key_pair;
581 /* we can't change the user name once it's set. It may already have
582 been sent to the server, and it can only be sent once. */
583 if (pvar->auth_state.user == NULL) {
584 pvar->auth_state.user =
585 alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
586 }
587
588 // �p�X���[�h���������������������������� (2006.8.3 yutaka)
589 if (SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_GETCHECK, 0,0) == BST_CHECKED) {
590 pvar->settings.remember_password = 1; // �o��������
591 pvar->ts_SSH->remember_password = 1;
592 } else {
593 pvar->settings.remember_password = 0; // ���������������Y����
594 pvar->ts_SSH->remember_password = 0;
595 }
596
597 // ���J���F���������A�Z�b�V�������������p�X���[�h���g�����������������������������������B
598 // (2005.4.8 yutaka)
599 if (method == SSH_AUTH_PASSWORD || method == SSH_AUTH_RSA) {
600 pvar->auth_state.cur_cred.password = password;
601 } else {
602 destroy_malloced_string(&password);
603 }
604 if (method == SSH_AUTH_RHOSTS || method == SSH_AUTH_RHOSTS_RSA) {
605 if (pvar->session_settings.DefaultAuthMethod != SSH_AUTH_RHOSTS) {
606 #ifdef I18N
607 strcpy(pvar->ts->UIMsg, "Rhosts authentication will probably fail because it was not "
608 "the default authentication method.\n"
609 "To use Rhosts authentication "
610 "in TTSSH, you need to set it to be the default by restarting\n"
611 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
612 "before connecting.");
613 UTIL_get_lang_msg("MSG_RHOSTS_NOTDEFAULT_ERROR", pvar);
614 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
615 #else
616 notify_nonfatal_error(pvar,
617 "Rhosts authentication will probably fail because it was not "
618 "the default authentication method.\n"
619 "To use Rhosts authentication "
620 "in TTSSH, you need to set it to be the default by restarting\n"
621 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
622 "before connecting.");
623 #endif
624 }
625
626 pvar->auth_state.cur_cred.rhosts_client_user =
627 alloc_control_text(GetDlgItem(dlg, IDC_LOCALUSERNAME));
628 }
629 pvar->auth_state.auth_dialog = NULL;
630
631 GetDlgItemText(dlg, IDC_RSAFILENAME,
632 pvar->session_settings.DefaultRSAPrivateKeyFile,
633 sizeof(pvar->session_settings.
634 DefaultRSAPrivateKeyFile));
635 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
636 pvar->session_settings.DefaultRhostsHostPrivateKeyFile,
637 sizeof(pvar->session_settings.
638 DefaultRhostsHostPrivateKeyFile));
639 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
640 pvar->session_settings.DefaultRhostsLocalUserName,
641 sizeof(pvar->session_settings.
642 DefaultRhostsLocalUserName));
643
644 if (SSHv1(pvar)) {
645 SSH_notify_user_name(pvar);
646 SSH_notify_cred(pvar);
647 } else {
648 // for SSH2(yutaka)
649 do_SSH2_userauth(pvar);
650 }
651
652 EndDialog(dlg, 1);
653 return TRUE;
654 }
655
656 static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
657 LPARAM lParam)
658 {
659 const int IDC_TIMER1 = 300;
660 const int autologin_timeout = 10; // �~���b
661 PTInstVar pvar;
662 #ifdef I18N
663 LOGFONT logfont;
664 HFONT font;
665 #endif
666
667 switch (msg) {
668 case WM_INITDIALOG:
669 pvar = (PTInstVar) lParam;
670 pvar->auth_state.auth_dialog = dlg;
671 SetWindowLong(dlg, DWL_USER, lParam);
672
673 init_auth_dlg(pvar, dlg);
674
675 #ifdef I18N
676 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
677 GetObject(font, sizeof(LOGFONT), &logfont);
678 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthFont, pvar)) {
679 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
680 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
681 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
682 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
683 SendDlgItemMessage(dlg, IDC_SSHPASSWORDCAPTION, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
684 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
685 SendDlgItemMessage(dlg, IDC_REMEMBER_PASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
686 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
687 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
688 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
689 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
690 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
691 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
692 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
693 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
694 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
695 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
696 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
697 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
698 }
699 else {
700 DlgAuthFont = NULL;
701 }
702 #endif
703
704 // SSH2 autologin���L�����������A�^�C�}���d�|�����B (2004.12.1 yutaka)
705 if (pvar->ssh2_autologin == 1) {
706 SetTimer(dlg, IDC_TIMER1, autologin_timeout, 0);
707 }
708 return FALSE; /* because we set the focus */
709
710 case WM_TIMER:
711 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
712 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2004.12.16 yutaka)
713 if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
714 KillTimer(dlg, IDC_TIMER1);
715 SendMessage(dlg, WM_COMMAND, IDOK, 0);
716 }
717 return TRUE;
718
719 case WM_COMMAND:
720 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
721
722 switch (LOWORD(wParam)) {
723 case IDOK:
724 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2001.1.25 yutaka)
725 if (pvar->userauth_retry_count == 0 && (pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
726 return FALSE;
727 }
728
729 #ifdef I18N
730 if (DlgAuthFont != NULL) {
731 DeleteObject(DlgAuthFont);
732 }
733 #endif
734
735 return end_auth_dlg(pvar, dlg);
736
737 case IDCANCEL: /* kill the connection */
738 pvar->auth_state.auth_dialog = NULL;
739 notify_closed_connection(pvar);
740 EndDialog(dlg, 0);
741
742 #ifdef I18N
743 if (DlgAuthFont != NULL) {
744 DeleteObject(DlgAuthFont);
745 }
746 #endif
747
748 return TRUE;
749
750 case IDC_SSHUSEPASSWORD:
751 case IDC_SSHUSERSA:
752 case IDC_SSHUSERHOSTS:
753 case IDC_SSHUSETIS:
754 set_auth_options_status(dlg, LOWORD(wParam));
755 return TRUE;
756
757 case IDC_CHOOSERSAFILE:
758 #ifdef I18N
759 choose_RSA_key_file(dlg, pvar);
760 #else
761 choose_RSA_key_file(dlg);
762 #endif
763 return TRUE;
764
765 case IDC_CHOOSEHOSTRSAFILE:
766 #ifdef I18N
767 choose_host_RSA_key_file(dlg, pvar);
768 #else
769 choose_host_RSA_key_file(dlg);
770 #endif
771 return TRUE;
772
773 default:
774 return FALSE;
775 }
776
777 default:
778 return FALSE;
779 }
780 }
781
782 char FAR *AUTH_get_user_name(PTInstVar pvar)
783 {
784 return pvar->auth_state.user;
785 }
786
787 int AUTH_set_supported_auth_types(PTInstVar pvar, int types)
788 {
789 char buf[1024];
790
791 _snprintf(buf, sizeof(buf),
792 "Server reports supported authentication method mask = %d",
793 types);
794 buf[sizeof(buf) - 1] = 0;
795 notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE);
796
797 if (SSHv1(pvar)) {
798 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
799 | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)
800 | (1 << SSH_AUTH_TIS);
801 } else {
802 // for SSH2(yutaka)
803 // types &= (1 << SSH_AUTH_PASSWORD);
804 // ���J���F�����L�������� (2004.12.18 yutaka)
805 // TIS�������BSSH2����keyboard-interactive�����������B(2005.3.12 yutaka)
806 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
807 | (1 << SSH_AUTH_DSA)
808 | (1 << SSH_AUTH_TIS);
809 }
810 pvar->auth_state.supported_types = types;
811
812 if (types == 0) {
813 #ifdef I18N
814 strcpy(pvar->ts->UIMsg,
815 "Server does not support any of the authentication options\n"
816 "provided by TTSSH. This connection will now close.");
817 UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar);
818 notify_fatal_error(pvar, pvar->ts->UIMsg);
819 #else
820 notify_fatal_error(pvar,
821 "Server does not support any of the authentication options\n"
822 "provided by TTSSH. This connection will now close.");
823 #endif
824 return 0;
825 } else {
826 if (pvar->auth_state.auth_dialog != NULL) {
827 update_server_supported_types(pvar,
828 pvar->auth_state.auth_dialog);
829 }
830
831 return 1;
832 }
833 }
834
835 static void start_user_auth(PTInstVar pvar)
836 {
837 // �F���_�C�A���O���\�������� (2004.12.1 yutaka)
838 PostMessage(pvar->NotificationWindow, WM_COMMAND, (WPARAM) ID_SSHAUTH,
839 (LPARAM) NULL);
840 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
841 }
842
843 static void try_default_auth(PTInstVar pvar)
844 {
845 if (pvar->session_settings.TryDefaultAuth) {
846 switch (pvar->session_settings.DefaultAuthMethod) {
847 case SSH_AUTH_RSA:{
848 BOOL invalid_passphrase;
849 char password[] = "";
850
851 pvar->auth_state.cur_cred.key_pair
852 =
853 KEYFILES_read_private_key(pvar,
854 pvar->session_settings.
855 DefaultRSAPrivateKeyFile,
856 password,
857 &invalid_passphrase, TRUE);
858 if (pvar->auth_state.cur_cred.key_pair == NULL) {
859 return;
860 } else {
861 pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
862 }
863 break;
864 }
865
866 case SSH_AUTH_RHOSTS:
867 if (pvar->session_settings.
868 DefaultRhostsHostPrivateKeyFile[0] != 0) {
869 BOOL invalid_passphrase;
870 char password[] = "";
871
872 pvar->auth_state.cur_cred.key_pair
873 =
874 KEYFILES_read_private_key(pvar,
875 pvar->session_settings.
876 DefaultRhostsHostPrivateKeyFile,
877 password,
878 &invalid_passphrase, TRUE);
879 if (pvar->auth_state.cur_cred.key_pair == NULL) {
880 return;
881 } else {
882 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS_RSA;
883 }
884 } else {
885 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS;
886 }
887
888 pvar->auth_state.cur_cred.rhosts_client_user =
889 _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
890 break;
891
892 case SSH_AUTH_PASSWORD:
893 pvar->auth_state.cur_cred.password = _strdup("");
894 pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
895 break;
896
897 case SSH_AUTH_TIS:
898 default:
899 return;
900 }
901
902 pvar->auth_state.user =
903 _strdup(pvar->session_settings.DefaultUserName);
904 }
905 }
906
907 void AUTH_notify_end_error(PTInstVar pvar)
908 {
909 if ((pvar->auth_state.flags & AUTH_START_USER_AUTH_ON_ERROR_END) != 0) {
910 start_user_auth(pvar);
911 pvar->auth_state.flags &= ~AUTH_START_USER_AUTH_ON_ERROR_END;
912 }
913 }
914
915 void AUTH_advance_to_next_cred(PTInstVar pvar)
916 {
917 pvar->auth_state.failed_method = pvar->auth_state.cur_cred.method;
918
919 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
920 try_default_auth(pvar);
921
922 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
923 if (pvar->err_msg != NULL) {
924 pvar->auth_state.flags |=
925 AUTH_START_USER_AUTH_ON_ERROR_END;
926 } else {
927 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
928 // �R�}���h���C���w������������
929 start_user_auth(pvar);
930 }
931 }
932 } else {
933 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
934 // �R�}���h���C���w������(/auth=xxxx)������
935 start_user_auth(pvar);
936 }
937 }
938
939 static void init_TIS_dlg(PTInstVar pvar, HWND dlg)
940 {
941 #ifdef I18N
942 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
943 UTIL_get_lang_msg("DLG_TIS_TITLE", pvar);
944 SetWindowText(dlg, pvar->ts->UIMsg);
945
946 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
947 UTIL_get_lang_msg("DLG_TIS_BANNER", pvar);
948 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
949 #endif
950
951 init_auth_machine_banner(pvar, dlg);
952 init_password_control(dlg);
953
954 if (pvar->auth_state.TIS_prompt != NULL) {
955 if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
956 pvar->auth_state.TIS_prompt[10000] = 0;
957 }
958 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
959 pvar->auth_state.TIS_prompt);
960 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
961 }
962 }
963
964 static BOOL end_TIS_dlg(PTInstVar pvar, HWND dlg)
965 {
966 char FAR *password =
967 alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
968
969 pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
970 pvar->auth_state.cur_cred.password = password;
971 pvar->auth_state.auth_dialog = NULL;
972
973 // add
974 if (SSHv2(pvar)) {
975 pvar->keyboard_interactive_password_input = 1;
976 handle_SSH2_userauth_inforeq(pvar);
977 }
978
979 SSH_notify_cred(pvar);
980
981 EndDialog(dlg, 1);
982 return TRUE;
983 }
984
985 static BOOL CALLBACK TIS_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
986 LPARAM lParam)
987 {
988 PTInstVar pvar;
989 #ifdef I18N
990 LOGFONT logfont;
991 HFONT font;
992 #endif
993
994 switch (msg) {
995 case WM_INITDIALOG:
996 pvar = (PTInstVar) lParam;
997 pvar->auth_state.auth_dialog = dlg;
998 SetWindowLong(dlg, DWL_USER, lParam);
999
1000 init_TIS_dlg(pvar, dlg);
1001
1002 #ifdef I18N
1003 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1004 GetObject(font, sizeof(LOGFONT), &logfont);
1005 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) {
1006 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1007 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1008 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1009 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1010 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1011 }
1012 else {
1013 DlgTisFont = NULL;
1014 }
1015 #endif
1016
1017 return FALSE; /* because we set the focus */
1018
1019 case WM_COMMAND:
1020 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1021
1022 switch (LOWORD(wParam)) {
1023 case IDOK:
1024 #ifdef I18N
1025 if (DlgTisFont != NULL) {
1026 DeleteObject(DlgTisFont);
1027 }
1028 #endif
1029
1030 return end_TIS_dlg(pvar, dlg);
1031
1032 case IDCANCEL: /* kill the connection */
1033 pvar->auth_state.auth_dialog = NULL;
1034 notify_closed_connection(pvar);
1035 EndDialog(dlg, 0);
1036
1037 #ifdef I18N
1038 if (DlgTisFont != NULL) {
1039 DeleteObject(DlgTisFont);
1040 }
1041 #endif
1042
1043 return TRUE;
1044
1045 default:
1046 return FALSE;
1047 }
1048
1049 default:
1050 return FALSE;
1051 }
1052 }
1053
1054 void AUTH_do_cred_dialog(PTInstVar pvar)
1055 {
1056 if (pvar->auth_state.auth_dialog == NULL) {
1057 HWND cur_active = GetActiveWindow();
1058 DLGPROC dlg_proc;
1059 LPCTSTR dialog_template;
1060
1061 switch (pvar->auth_state.mode) {
1062 case TIS_AUTH_MODE:
1063 dialog_template = MAKEINTRESOURCE(IDD_SSHTISAUTH);
1064 dlg_proc = TIS_dlg_proc;
1065 break;
1066 case GENERIC_AUTH_MODE:
1067 default:
1068 dialog_template = MAKEINTRESOURCE(IDD_SSHAUTH);
1069 dlg_proc = auth_dlg_proc;
1070 }
1071
1072 if (!DialogBoxParam(hInst, dialog_template,
1073 cur_active !=
1074 NULL ? cur_active : pvar->NotificationWindow,
1075 dlg_proc, (LPARAM) pvar) == -1) {
1076 #ifdef I18N
1077 strcpy(pvar->ts->UIMsg,
1078 "Unable to display authentication dialog box.\n"
1079 "Connection terminated.");
1080 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar);
1081 notify_fatal_error(pvar, pvar->ts->UIMsg);
1082 #else
1083 notify_fatal_error(pvar,
1084 "Unable to display authentication dialog box.\n"
1085 "Connection terminated.");
1086 #endif
1087 }
1088 }
1089 }
1090
1091 static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1092 {
1093 #ifdef I18N
1094 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1095 UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar);
1096 SetWindowText(dlg, pvar->ts->UIMsg);
1097
1098 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1099 UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar);
1100 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
1101
1102 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1103 UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar);
1104 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
1105
1106 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1107 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar);
1108 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
1109
1110 GetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1111 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD_KBDINT", pvar);
1112 SetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg);
1113
1114 GetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1115 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar);
1116 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
1117
1118 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1119 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar);
1120 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
1121
1122 GetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1123 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar);
1124 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
1125
1126 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1127 UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar);
1128 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
1129
1130 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1131 UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar);
1132 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
1133
1134 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1135 UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar);
1136 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
1137
1138 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1139 UTIL_get_lang_msg("BTN_OK", pvar);
1140 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1141
1142 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1143 UTIL_get_lang_msg("BTN_CANCEL", pvar);
1144 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1145 #endif
1146
1147 switch (pvar->settings.DefaultAuthMethod) {
1148 case SSH_AUTH_RSA:
1149 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1150 IDC_SSHUSERSA);
1151 break;
1152 case SSH_AUTH_RHOSTS:
1153 case SSH_AUTH_RHOSTS_RSA:
1154 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1155 IDC_SSHUSERHOSTS);
1156 break;
1157 case SSH_AUTH_TIS:
1158 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1159 IDC_SSHUSETIS);
1160 break;
1161 case SSH_AUTH_PASSWORD:
1162 default:
1163 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1164 IDC_SSHUSEPASSWORD);
1165 }
1166
1167 SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1168 SetDlgItemText(dlg, IDC_RSAFILENAME,
1169 pvar->settings.DefaultRSAPrivateKeyFile);
1170 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1171 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1172 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1173 pvar->settings.DefaultRhostsLocalUserName);
1174
1175 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1176 if (pvar->settings.ssh2_keyboard_interactive) {
1177 SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
1178 }
1179
1180 }
1181
1182 static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1183 {
1184 if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1185 pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1186 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1187 if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1188 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1189 } else {
1190 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1191 }
1192 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1193 pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1194 } else {
1195 pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1196 }
1197
1198 GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1199 sizeof(pvar->settings.DefaultUserName));
1200 GetDlgItemText(dlg, IDC_RSAFILENAME,
1201 pvar->settings.DefaultRSAPrivateKeyFile,
1202 sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1203 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1204 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1205 sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1206 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1207 pvar->settings.DefaultRhostsLocalUserName,
1208 sizeof(pvar->settings.DefaultRhostsLocalUserName));
1209
1210 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1211 {
1212 LRESULT ret;
1213 ret = SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_GETCHECK, 0, 0);
1214 if (ret & BST_CHECKED) {
1215 pvar->settings.ssh2_keyboard_interactive = 1;
1216 } else {
1217 pvar->settings.ssh2_keyboard_interactive = 0;
1218 }
1219 }
1220
1221 EndDialog(dlg, 1);
1222 return TRUE;
1223 }
1224
1225 static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1226 WPARAM wParam, LPARAM lParam)
1227 {
1228 PTInstVar pvar;
1229 #ifdef I18N
1230 LOGFONT logfont;
1231 HFONT font;
1232 #endif
1233
1234 switch (msg) {
1235 case WM_INITDIALOG:
1236 pvar = (PTInstVar) lParam;
1237 SetWindowLong(dlg, DWL_USER, lParam);
1238
1239 init_default_auth_dlg(pvar, dlg);
1240
1241 #ifdef I18N
1242 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1243 GetObject(font, sizeof(LOGFONT), &logfont);
1244 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1245 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1246 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1247 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1248 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1249 SendDlgItemMessage(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1250 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1251 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1252 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1253 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1254 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1255 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1256 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1257 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1258 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1259 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1260 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1261 }
1262 else {
1263 DlgAuthSetupFont = NULL;
1264 }
1265 #endif
1266
1267 return TRUE; /* because we do not set the focus */
1268
1269 case WM_COMMAND:
1270 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1271
1272 switch (LOWORD(wParam)) {
1273 case IDOK:
1274
1275 #ifdef I18N
1276 if (DlgAuthSetupFont != NULL) {
1277 DeleteObject(DlgAuthSetupFont);
1278 }
1279 #endif
1280
1281 return end_default_auth_dlg(pvar, dlg);
1282
1283 case IDCANCEL:
1284 EndDialog(dlg, 0);
1285
1286 #ifdef I18N
1287 if (DlgAuthSetupFont != NULL) {
1288 DeleteObject(DlgAuthSetupFont);
1289 }
1290 #endif
1291
1292 return TRUE;
1293
1294 case IDC_CHOOSERSAFILE:
1295 #ifdef I18N
1296 choose_RSA_key_file(dlg, pvar);
1297 #else
1298 choose_RSA_key_file(dlg);
1299 #endif
1300 return TRUE;
1301
1302 case IDC_CHOOSEHOSTRSAFILE:
1303 #ifdef I18N
1304 choose_host_RSA_key_file(dlg, pvar);
1305 #else
1306 choose_host_RSA_key_file(dlg);
1307 #endif
1308 return TRUE;
1309
1310 default:
1311 return FALSE;
1312 }
1313
1314 default:
1315 return FALSE;
1316 }
1317 }
1318
1319 void AUTH_init(PTInstVar pvar)
1320 {
1321 pvar->auth_state.failed_method = SSH_AUTH_NONE;
1322 pvar->auth_state.auth_dialog = NULL;
1323 pvar->auth_state.user = NULL;
1324 pvar->auth_state.flags = 0;
1325 pvar->auth_state.TIS_prompt = NULL;
1326 pvar->auth_state.supported_types = 0;
1327 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1328 pvar->auth_state.cur_cred.password = NULL;
1329 pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1330 pvar->auth_state.cur_cred.key_pair = NULL;
1331 AUTH_set_generic_mode(pvar);
1332 }
1333
1334 void AUTH_set_generic_mode(PTInstVar pvar)
1335 {
1336 pvar->auth_state.mode = GENERIC_AUTH_MODE;
1337 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1338 }
1339
1340 void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1341 {
1342 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1343 pvar->auth_state.mode = TIS_AUTH_MODE;
1344
1345 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1346 pvar->auth_state.TIS_prompt = malloc(len + 1);
1347 memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1348 pvar->auth_state.TIS_prompt[len] = 0;
1349 } else {
1350 AUTH_set_generic_mode(pvar);
1351 }
1352 }
1353
1354 void AUTH_do_default_cred_dialog(PTInstVar pvar)
1355 {
1356 HWND cur_active = GetActiveWindow();
1357
1358 if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1359 cur_active !=
1360 NULL ? cur_active : pvar->NotificationWindow,
1361 default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1362 #ifdef I18N
1363 strcpy(pvar->ts->UIMsg, "Unable to display authentication setup dialog box.");
1364 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar);
1365 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1366 #else
1367 notify_nonfatal_error(pvar,
1368 "Unable to display authentication setup dialog box.");
1369 #endif
1370 }
1371 }
1372
1373 void AUTH_destroy_cur_cred(PTInstVar pvar)
1374 {
1375 destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1376 destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1377 if (pvar->auth_state.cur_cred.key_pair != NULL) {
1378 CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1379 pvar->auth_state.cur_cred.key_pair = NULL;
1380 }
1381 }
1382
1383 static char FAR *get_auth_method_name(SSHAuthMethod auth)
1384 {
1385 switch (auth) {
1386 case SSH_AUTH_PASSWORD:
1387 return "password";
1388 case SSH_AUTH_RSA:
1389 return "RSA";
1390 case SSH_AUTH_RHOSTS:
1391 return "rhosts";
1392 case SSH_AUTH_RHOSTS_RSA:
1393 return "rhosts with RSA";
1394 case SSH_AUTH_TIS:
1395 return "challenge/response (TIS)";
1396 default:
1397 return "unknown method";
1398 }
1399 }
1400
1401 void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1402 {
1403 char *method = "unknown";
1404
1405 if (pvar->auth_state.user == NULL) {
1406 strncpy(dest, "None", len);
1407 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1408 if (SSHv1(pvar)) {
1409 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1410 get_auth_method_name(pvar->auth_state.cur_cred.method));
1411
1412 } else {
1413 // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1414 // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1415 if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1416 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1417 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1418 if (pvar->keyboard_interactive_done == 1 ||
1419 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1420 method = "keyboard-interactive";
1421 } else {
1422 method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1423 }
1424 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1425
1426 } else {
1427 if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1428 method = "RSA";
1429 } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1430 method = "DSA";
1431 }
1432 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1433 }
1434
1435 }
1436
1437 } else {
1438 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1439 get_auth_method_name(pvar->auth_state.failed_method));
1440 }
1441
1442 dest[len - 1] = 0;
1443 }
1444
1445 void AUTH_notify_disconnecting(PTInstVar pvar)
1446 {
1447 if (pvar->auth_state.auth_dialog != NULL) {
1448 PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1449 /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1450 EnableWindow(pvar->NotificationWindow, TRUE);
1451 }
1452 }
1453
1454 void AUTH_end(PTInstVar pvar)
1455 {
1456 destroy_malloced_string(&pvar->auth_state.user);
1457 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1458
1459 AUTH_destroy_cur_cred(pvar);
1460 }
1461
1462 /*
1463 * $Log: not supported by cvs2svn $
1464 * Revision 1.24 2006/12/06 14:31:13 maya
1465 * �\�����b�Z�[�W��������������
1466 *
1467 * Revision 1.23 2006/12/06 14:25:40 maya
1468 * �\�����b�Z�[�W��������������
1469 *
1470 * Revision 1.22 2006/11/29 16:58:52 maya
1471 * �\�����b�Z�[�W��������������
1472 *
1473 * Revision 1.21 2006/11/23 02:19:30 maya
1474 * �\�����b�Z�[�W�������t�@�C�����������������R�[�h���������J�n�����B
1475 *
1476 * Revision 1.20 2006/09/18 05:08:04 maya
1477 * �R�}���h���C���p�����[�^ '/ask4passwd' �����������B
1478 *
1479 * Revision 1.19 2006/08/05 03:47:49 yutakakn
1480 * �p�X���[�h�������������o������������������������ teraterm.ini �����f�����������������B
1481 *
1482 * Revision 1.18 2006/08/03 15:04:37 yutakakn
1483 * �p�X���[�h�������������������������������������`�F�b�N�{�b�N�X���F���_�C�A���O�����������B
1484 *
1485 * Revision 1.17 2005/09/05 10:46:22 yutakakn
1486 * '/I' �w�����������������F���_�C�A���O�����������������������B
1487 *
1488 * Revision 1.16 2005/08/26 16:26:02 yutakakn
1489 * �������O�C������SSH�F���_�C�A���O�����������������������B
1490 *
1491 * Revision 1.15 2005/07/15 14:58:04 yutakakn
1492 * SSH1���������x���[�U�F�������s�������A�������F�����������������o�O���C���B
1493 *
1494 * Revision 1.14 2005/04/26 13:57:57 yutakakn
1495 * private key�t�@�C���_�C�A���O��3�t�@�C���t�B���^�����������B
1496 *
1497 * Revision 1.13 2005/04/08 14:55:03 yutakakn
1498 * "Duplicate session"��������SSH�������O�C�����s�������������B
1499 *
1500 * Revision 1.12 2005/03/23 12:39:35 yutakakn
1501 * SSH2�F���_�C�A���O�� Use challenge/response to log in ���A�N�Z�����[�^�L�[�������������B
1502 *
1503 * Revision 1.11 2005/03/12 15:07:33 yutakakn
1504 * SSH2 keyboard-interactive�F����TIS�_�C�A���O�����������B
1505 *
1506 * Revision 1.10 2005/03/12 12:08:05 yutakakn
1507 * �p�X���[�h�F�����O���s��keyboard-interactive���\�b�h���A�f�t�H���g�����l������(0)�������B
1508 * �����A�F���_�C�A���O�����x�������������L�����������X���������������B
1509 *
1510 * Revision 1.9 2005/02/22 08:48:11 yutakakn
1511 * TTSSH setup�_�C�A���O�� HeartBeat �����������B
1512 * TTSSH authentication setup�_�C�A���O�� keyboard-interactive �����������B
1513 *
1514 * Revision 1.8 2005/01/27 13:30:33 yutakakn
1515 * ���J���F���������O�C�����T�|�[�g�B
1516 * /auth=publickey, /keyfile �I�v�V�������V�K���������B
1517 * �����A�����������������T�|�[�g�B
1518 *
1519 * Revision 1.7 2005/01/25 13:38:22 yutakakn
1520 * SSH�F���_�C�A���O���ARhosts/TIS���O���[�������O���AEnter�L�[�������������A
1521 * �A�v���P�[�V�����G���[���������������������B
1522 *
1523 * Revision 1.6 2005/01/24 14:07:07 yutakakn
1524 * �Ekeyboard-interactive�F�����T�|�[�g�����B
1525 * �@�����������Ateraterm.ini�� "KeyboardInteractive" �G���g�������������B
1526 * �E�o�[�W�����_�C�A���O�� OpenSSL�o�[�W���� ������
1527 *
1528 * Revision 1.5 2004/12/27 14:35:41 yutakakn
1529 * SSH2�����������������s�����G���[���b�Z�[�W�����������B
1530 *
1531 * Revision 1.4 2004/12/22 17:28:14 yutakakn
1532 * SSH2���J���F��(RSA/DSA)���T�|�[�g�����B
1533 *
1534 * Revision 1.3 2004/12/16 13:01:09 yutakakn
1535 * SSH�������O�C�����A�v���P�[�V�����G���[�������������C�������B
1536 *
1537 * Revision 1.2 2004/12/01 15:37:49 yutakakn
1538 * SSH2�������O�C���@�\�������B
1539 * �����A�p�X���[�h�F�������������B
1540 * �E�R�}���h���C��
1541 * /ssh /auth=�F�����\�b�h /user=���[�U�� /passwd=�p�X���[�h
1542 *
1543 */

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26