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 2962 - (show annotations) (download) (as text)
Sat Feb 17 16:20:21 2007 UTC (17 years, 1 month ago) by yasuhide
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 50565 byte(s)
SSH2 鍵を用いた認証でパスフレーズを間違えた際、パスフレーズダイアログにフォーカスを移す

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 strncpy(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));
416 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_FILTER", pvar);
417 memcpy(filter, pvar->ts->UIMsg, sizeof(filter));
418 params.lpstrFilter = filter;
419 #else
420 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";
421 #endif
422 params.lpstrCustomFilter = NULL;
423 params.nFilterIndex = 0;
424 buf[0] = 0;
425 params.lpstrFile = fullname_buf;
426 params.nMaxFile = sizeof(fullname_buf);
427 params.lpstrFileTitle = NULL;
428 params.lpstrInitialDir = NULL;
429 #ifdef I18N
430 strcpy(pvar->ts->UIMsg, "Choose a file with the RSA/DSA private key");
431 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_TITLE", pvar);
432 params.lpstrTitle = pvar->ts->UIMsg;
433 #else
434 params.lpstrTitle = "Choose a file with the RSA/DSA private key";
435 #endif
436 params.Flags =
437 OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
438 params.lpstrDefExt = NULL;
439
440 if (GetOpenFileName(&params) != 0) {
441 copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf);
442 return 1;
443 } else {
444 return 0;
445 }
446 #else
447 return 0;
448 #endif
449 }
450
451 #ifdef I18N
452 static void choose_RSA_key_file(HWND dlg, PTInstVar pvar)
453 #else
454 static void choose_RSA_key_file(HWND dlg)
455 #endif
456 {
457 char buf[1024];
458
459 #ifdef I18N
460 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
461 #else
462 if (get_key_file_name(dlg, buf, sizeof(buf))) {
463 #endif
464 SetDlgItemText(dlg, IDC_RSAFILENAME, buf);
465 }
466 }
467
468 #ifdef I18N
469 static void choose_host_RSA_key_file(HWND dlg, PTInstVar pvar)
470 #else
471 static void choose_host_RSA_key_file(HWND dlg)
472 #endif
473 {
474 char buf[1024];
475
476 #ifdef I18N
477 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
478 #else
479 if (get_key_file_name(dlg, buf, sizeof(buf))) {
480 #endif
481 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME, buf);
482 }
483 }
484
485 static BOOL end_auth_dlg(PTInstVar pvar, HWND dlg)
486 {
487 int method = SSH_AUTH_PASSWORD;
488 char FAR *password =
489 alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
490 CRYPTKeyPair FAR *key_pair = NULL;
491
492 if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
493 method = SSH_AUTH_RSA;
494 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
495 if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
496 method = SSH_AUTH_RHOSTS_RSA;
497 } else {
498 method = SSH_AUTH_RHOSTS;
499 }
500 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
501 method = SSH_AUTH_TIS;
502 }
503
504 if (method == SSH_AUTH_RSA || method == SSH_AUTH_RHOSTS_RSA) {
505 char buf[2048];
506 int file_ctl_ID =
507 method == SSH_AUTH_RSA ? IDC_RSAFILENAME : IDC_HOSTRSAFILENAME;
508
509 buf[0] = 0;
510 GetDlgItemText(dlg, file_ctl_ID, buf, sizeof(buf));
511 if (buf[0] == 0) {
512 #ifdef I18N
513 strcpy(pvar->ts->UIMsg, "You must specify a file containing the RSA/DSA private key.");
514 UTIL_get_lang_msg("MSG_KEYSPECIFY_ERROR", pvar);
515 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
516 #else
517 notify_nonfatal_error(pvar,
518 "You must specify a file containing the RSA/DSA private key.");
519 #endif
520 SetFocus(GetDlgItem(dlg, file_ctl_ID));
521 destroy_malloced_string(&password);
522 return FALSE;
523 }
524
525 if (SSHv1(pvar)) {
526 BOOL invalid_passphrase = FALSE;
527
528 key_pair = KEYFILES_read_private_key(pvar, buf, password,
529 &invalid_passphrase,
530 FALSE);
531
532 if (key_pair == NULL) {
533 if (invalid_passphrase) {
534 HWND passwordCtl = GetDlgItem(dlg, IDC_SSHPASSWORD);
535
536 SetFocus(passwordCtl);
537 SendMessage(passwordCtl, EM_SETSEL, 0, -1);
538 } else {
539 SetFocus(GetDlgItem(dlg, file_ctl_ID));
540 }
541 destroy_malloced_string(&password);
542 return FALSE;
543 }
544
545 } else { // SSH2(yutaka)
546 BOOL invalid_passphrase = FALSE;
547 char errmsg[256];
548
549 memset(errmsg, 0, sizeof(errmsg));
550 //GetCurrentDirectory(sizeof(errmsg), errmsg);
551
552 key_pair = read_SSH2_private_key(pvar, buf, password,
553 &invalid_passphrase,
554 FALSE,
555 errmsg,
556 sizeof(errmsg)
557 );
558
559 if (key_pair == NULL) { // read error
560 char buf[1024];
561 #ifdef I18N
562 strcpy(pvar->ts->UIMsg, "read error SSH2 private key file\r\n%s");
563 UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar);
564 _snprintf(buf, sizeof(buf), pvar->ts->UIMsg, errmsg);
565 #else
566 _snprintf(buf, sizeof(buf), "read error SSH2 private key file\r\n%s", errmsg);
567 #endif
568 notify_nonfatal_error(pvar, buf);
569 // �p�X�t���[�Y���������v����������������IDC_SSHPASSWORD���t�H�[�J�X������ (2006.10.29 yasuhide)
570 if (invalid_passphrase) {
571 HWND passwordCtl = GetDlgItem(dlg, IDC_SSHPASSWORD);
572
573 SetFocus(passwordCtl);
574 SendMessage(passwordCtl, EM_SETSEL, 0, -1);
575 } else {
576 SetFocus(GetDlgItem(dlg, file_ctl_ID));
577 }
578 destroy_malloced_string(&password);
579 return FALSE;
580 }
581
582 }
583
584 }
585
586 /* from here on, we cannot fail, so just munge cur_cred in place */
587 pvar->auth_state.cur_cred.method = method;
588 pvar->auth_state.cur_cred.key_pair = key_pair;
589 /* we can't change the user name once it's set. It may already have
590 been sent to the server, and it can only be sent once. */
591 if (pvar->auth_state.user == NULL) {
592 pvar->auth_state.user =
593 alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
594 }
595
596 // �p�X���[�h���������������������������� (2006.8.3 yutaka)
597 if (SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_GETCHECK, 0,0) == BST_CHECKED) {
598 pvar->settings.remember_password = 1; // �o��������
599 pvar->ts_SSH->remember_password = 1;
600 } else {
601 pvar->settings.remember_password = 0; // ���������������Y����
602 pvar->ts_SSH->remember_password = 0;
603 }
604
605 // ���J���F���������A�Z�b�V�������������p�X���[�h���g�����������������������������������B
606 // (2005.4.8 yutaka)
607 if (method == SSH_AUTH_PASSWORD || method == SSH_AUTH_RSA) {
608 pvar->auth_state.cur_cred.password = password;
609 } else {
610 destroy_malloced_string(&password);
611 }
612 if (method == SSH_AUTH_RHOSTS || method == SSH_AUTH_RHOSTS_RSA) {
613 if (pvar->session_settings.DefaultAuthMethod != SSH_AUTH_RHOSTS) {
614 #ifdef I18N
615 strcpy(pvar->ts->UIMsg, "Rhosts authentication will probably fail because it was not "
616 "the default authentication method.\n"
617 "To use Rhosts authentication "
618 "in TTSSH, you need to set it to be the default by restarting\n"
619 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
620 "before connecting.");
621 UTIL_get_lang_msg("MSG_RHOSTS_NOTDEFAULT_ERROR", pvar);
622 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
623 #else
624 notify_nonfatal_error(pvar,
625 "Rhosts authentication will probably fail because it was not "
626 "the default authentication method.\n"
627 "To use Rhosts authentication "
628 "in TTSSH, you need to set it to be the default by restarting\n"
629 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
630 "before connecting.");
631 #endif
632 }
633
634 pvar->auth_state.cur_cred.rhosts_client_user =
635 alloc_control_text(GetDlgItem(dlg, IDC_LOCALUSERNAME));
636 }
637 pvar->auth_state.auth_dialog = NULL;
638
639 GetDlgItemText(dlg, IDC_RSAFILENAME,
640 pvar->session_settings.DefaultRSAPrivateKeyFile,
641 sizeof(pvar->session_settings.
642 DefaultRSAPrivateKeyFile));
643 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
644 pvar->session_settings.DefaultRhostsHostPrivateKeyFile,
645 sizeof(pvar->session_settings.
646 DefaultRhostsHostPrivateKeyFile));
647 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
648 pvar->session_settings.DefaultRhostsLocalUserName,
649 sizeof(pvar->session_settings.
650 DefaultRhostsLocalUserName));
651
652 if (SSHv1(pvar)) {
653 SSH_notify_user_name(pvar);
654 SSH_notify_cred(pvar);
655 } else {
656 // for SSH2(yutaka)
657 do_SSH2_userauth(pvar);
658 }
659
660 EndDialog(dlg, 1);
661 #ifdef I18N
662 if (DlgAuthFont != NULL) {
663 DeleteObject(DlgAuthFont);
664 }
665 #endif
666
667 return TRUE;
668 }
669
670 static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
671 LPARAM lParam)
672 {
673 const int IDC_TIMER1 = 300;
674 const int autologin_timeout = 10; // �~���b
675 PTInstVar pvar;
676 #ifdef I18N
677 LOGFONT logfont;
678 HFONT font;
679 #endif
680
681 switch (msg) {
682 case WM_INITDIALOG:
683 pvar = (PTInstVar) lParam;
684 pvar->auth_state.auth_dialog = dlg;
685 SetWindowLong(dlg, DWL_USER, lParam);
686
687 init_auth_dlg(pvar, dlg);
688
689 #ifdef I18N
690 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
691 GetObject(font, sizeof(LOGFONT), &logfont);
692 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthFont, pvar)) {
693 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
694 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
695 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
696 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
697 SendDlgItemMessage(dlg, IDC_SSHPASSWORDCAPTION, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
698 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
699 SendDlgItemMessage(dlg, IDC_REMEMBER_PASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
700 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
701 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
702 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
703 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
704 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
705 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
706 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
707 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
708 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
709 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
710 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
711 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
712 }
713 else {
714 DlgAuthFont = NULL;
715 }
716 #endif
717
718 // SSH2 autologin���L�����������A�^�C�}���d�|�����B (2004.12.1 yutaka)
719 if (pvar->ssh2_autologin == 1) {
720 SetTimer(dlg, IDC_TIMER1, autologin_timeout, 0);
721 }
722 return FALSE; /* because we set the focus */
723
724 case WM_TIMER:
725 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
726 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2004.12.16 yutaka)
727 if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
728 KillTimer(dlg, IDC_TIMER1);
729 SendMessage(dlg, WM_COMMAND, IDOK, 0);
730 }
731 return TRUE;
732
733 case WM_COMMAND:
734 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
735
736 switch (LOWORD(wParam)) {
737 case IDOK:
738 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2001.1.25 yutaka)
739 if (pvar->userauth_retry_count == 0 && (pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
740 return FALSE;
741 }
742
743 return end_auth_dlg(pvar, dlg);
744
745 case IDCANCEL: /* kill the connection */
746 pvar->auth_state.auth_dialog = NULL;
747 notify_closed_connection(pvar);
748 EndDialog(dlg, 0);
749
750 #ifdef I18N
751 if (DlgAuthFont != NULL) {
752 DeleteObject(DlgAuthFont);
753 }
754 #endif
755
756 return TRUE;
757
758 case IDC_SSHUSEPASSWORD:
759 case IDC_SSHUSERSA:
760 case IDC_SSHUSERHOSTS:
761 case IDC_SSHUSETIS:
762 set_auth_options_status(dlg, LOWORD(wParam));
763 return TRUE;
764
765 case IDC_CHOOSERSAFILE:
766 #ifdef I18N
767 choose_RSA_key_file(dlg, pvar);
768 #else
769 choose_RSA_key_file(dlg);
770 #endif
771 return TRUE;
772
773 case IDC_CHOOSEHOSTRSAFILE:
774 #ifdef I18N
775 choose_host_RSA_key_file(dlg, pvar);
776 #else
777 choose_host_RSA_key_file(dlg);
778 #endif
779 return TRUE;
780
781 default:
782 return FALSE;
783 }
784
785 default:
786 return FALSE;
787 }
788 }
789
790 char FAR *AUTH_get_user_name(PTInstVar pvar)
791 {
792 return pvar->auth_state.user;
793 }
794
795 int AUTH_set_supported_auth_types(PTInstVar pvar, int types)
796 {
797 char buf[1024];
798
799 _snprintf(buf, sizeof(buf),
800 "Server reports supported authentication method mask = %d",
801 types);
802 buf[sizeof(buf) - 1] = 0;
803 notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE);
804
805 if (SSHv1(pvar)) {
806 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
807 | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)
808 | (1 << SSH_AUTH_TIS);
809 } else {
810 // for SSH2(yutaka)
811 // types &= (1 << SSH_AUTH_PASSWORD);
812 // ���J���F�����L�������� (2004.12.18 yutaka)
813 // TIS�������BSSH2����keyboard-interactive�����������B(2005.3.12 yutaka)
814 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
815 | (1 << SSH_AUTH_DSA)
816 | (1 << SSH_AUTH_TIS);
817 }
818 pvar->auth_state.supported_types = types;
819
820 if (types == 0) {
821 #ifdef I18N
822 strcpy(pvar->ts->UIMsg,
823 "Server does not support any of the authentication options\n"
824 "provided by TTSSH. This connection will now close.");
825 UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar);
826 notify_fatal_error(pvar, pvar->ts->UIMsg);
827 #else
828 notify_fatal_error(pvar,
829 "Server does not support any of the authentication options\n"
830 "provided by TTSSH. This connection will now close.");
831 #endif
832 return 0;
833 } else {
834 if (pvar->auth_state.auth_dialog != NULL) {
835 update_server_supported_types(pvar,
836 pvar->auth_state.auth_dialog);
837 }
838
839 return 1;
840 }
841 }
842
843 static void start_user_auth(PTInstVar pvar)
844 {
845 // �F���_�C�A���O���\�������� (2004.12.1 yutaka)
846 PostMessage(pvar->NotificationWindow, WM_COMMAND, (WPARAM) ID_SSHAUTH,
847 (LPARAM) NULL);
848 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
849 }
850
851 static void try_default_auth(PTInstVar pvar)
852 {
853 if (pvar->session_settings.TryDefaultAuth) {
854 switch (pvar->session_settings.DefaultAuthMethod) {
855 case SSH_AUTH_RSA:{
856 BOOL invalid_passphrase;
857 char password[] = "";
858
859 pvar->auth_state.cur_cred.key_pair
860 =
861 KEYFILES_read_private_key(pvar,
862 pvar->session_settings.
863 DefaultRSAPrivateKeyFile,
864 password,
865 &invalid_passphrase, TRUE);
866 if (pvar->auth_state.cur_cred.key_pair == NULL) {
867 return;
868 } else {
869 pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
870 }
871 break;
872 }
873
874 case SSH_AUTH_RHOSTS:
875 if (pvar->session_settings.
876 DefaultRhostsHostPrivateKeyFile[0] != 0) {
877 BOOL invalid_passphrase;
878 char password[] = "";
879
880 pvar->auth_state.cur_cred.key_pair
881 =
882 KEYFILES_read_private_key(pvar,
883 pvar->session_settings.
884 DefaultRhostsHostPrivateKeyFile,
885 password,
886 &invalid_passphrase, TRUE);
887 if (pvar->auth_state.cur_cred.key_pair == NULL) {
888 return;
889 } else {
890 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS_RSA;
891 }
892 } else {
893 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS;
894 }
895
896 pvar->auth_state.cur_cred.rhosts_client_user =
897 _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
898 break;
899
900 case SSH_AUTH_PASSWORD:
901 pvar->auth_state.cur_cred.password = _strdup("");
902 pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
903 break;
904
905 case SSH_AUTH_TIS:
906 default:
907 return;
908 }
909
910 pvar->auth_state.user =
911 _strdup(pvar->session_settings.DefaultUserName);
912 }
913 }
914
915 void AUTH_notify_end_error(PTInstVar pvar)
916 {
917 if ((pvar->auth_state.flags & AUTH_START_USER_AUTH_ON_ERROR_END) != 0) {
918 start_user_auth(pvar);
919 pvar->auth_state.flags &= ~AUTH_START_USER_AUTH_ON_ERROR_END;
920 }
921 }
922
923 void AUTH_advance_to_next_cred(PTInstVar pvar)
924 {
925 pvar->auth_state.failed_method = pvar->auth_state.cur_cred.method;
926
927 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
928 try_default_auth(pvar);
929
930 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
931 if (pvar->err_msg != NULL) {
932 pvar->auth_state.flags |=
933 AUTH_START_USER_AUTH_ON_ERROR_END;
934 } else {
935 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
936 // �R�}���h���C���w������������
937 start_user_auth(pvar);
938 }
939 }
940 } else {
941 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
942 // �R�}���h���C���w������(/auth=xxxx)������
943 start_user_auth(pvar);
944 }
945 }
946
947 static void init_TIS_dlg(PTInstVar pvar, HWND dlg)
948 {
949 #ifdef I18N
950 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
951 UTIL_get_lang_msg("DLG_TIS_TITLE", pvar);
952 SetWindowText(dlg, pvar->ts->UIMsg);
953
954 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
955 UTIL_get_lang_msg("DLG_TIS_BANNER", pvar);
956 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
957
958 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
959 UTIL_get_lang_msg("BTN_OK", pvar);
960 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
961
962 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
963 UTIL_get_lang_msg("BTN_DISCONNECT", pvar);
964 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
965 #endif
966
967 init_auth_machine_banner(pvar, dlg);
968 init_password_control(dlg);
969
970 if (pvar->auth_state.TIS_prompt != NULL) {
971 if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
972 pvar->auth_state.TIS_prompt[10000] = 0;
973 }
974 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
975 pvar->auth_state.TIS_prompt);
976 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
977 }
978 }
979
980 static BOOL end_TIS_dlg(PTInstVar pvar, HWND dlg)
981 {
982 char FAR *password =
983 alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
984
985 pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
986 pvar->auth_state.cur_cred.password = password;
987 pvar->auth_state.auth_dialog = NULL;
988
989 // add
990 if (SSHv2(pvar)) {
991 pvar->keyboard_interactive_password_input = 1;
992 handle_SSH2_userauth_inforeq(pvar);
993 }
994
995 SSH_notify_cred(pvar);
996
997 EndDialog(dlg, 1);
998 return TRUE;
999 }
1000
1001 static BOOL CALLBACK TIS_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
1002 LPARAM lParam)
1003 {
1004 PTInstVar pvar;
1005 #ifdef I18N
1006 LOGFONT logfont;
1007 HFONT font;
1008 #endif
1009
1010 switch (msg) {
1011 case WM_INITDIALOG:
1012 pvar = (PTInstVar) lParam;
1013 pvar->auth_state.auth_dialog = dlg;
1014 SetWindowLong(dlg, DWL_USER, lParam);
1015
1016 init_TIS_dlg(pvar, dlg);
1017
1018 #ifdef I18N
1019 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1020 GetObject(font, sizeof(LOGFONT), &logfont);
1021 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) {
1022 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1023 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1024 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1025 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1026 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1027 }
1028 else {
1029 DlgTisFont = NULL;
1030 }
1031 #endif
1032
1033 return FALSE; /* because we set the focus */
1034
1035 case WM_COMMAND:
1036 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1037
1038 switch (LOWORD(wParam)) {
1039 case IDOK:
1040 #ifdef I18N
1041 if (DlgTisFont != NULL) {
1042 DeleteObject(DlgTisFont);
1043 }
1044 #endif
1045
1046 return end_TIS_dlg(pvar, dlg);
1047
1048 case IDCANCEL: /* kill the connection */
1049 pvar->auth_state.auth_dialog = NULL;
1050 notify_closed_connection(pvar);
1051 EndDialog(dlg, 0);
1052
1053 #ifdef I18N
1054 if (DlgTisFont != NULL) {
1055 DeleteObject(DlgTisFont);
1056 }
1057 #endif
1058
1059 return TRUE;
1060
1061 default:
1062 return FALSE;
1063 }
1064
1065 default:
1066 return FALSE;
1067 }
1068 }
1069
1070 void AUTH_do_cred_dialog(PTInstVar pvar)
1071 {
1072 if (pvar->auth_state.auth_dialog == NULL) {
1073 HWND cur_active = GetActiveWindow();
1074 DLGPROC dlg_proc;
1075 LPCTSTR dialog_template;
1076
1077 switch (pvar->auth_state.mode) {
1078 case TIS_AUTH_MODE:
1079 dialog_template = MAKEINTRESOURCE(IDD_SSHTISAUTH);
1080 dlg_proc = TIS_dlg_proc;
1081 break;
1082 case GENERIC_AUTH_MODE:
1083 default:
1084 dialog_template = MAKEINTRESOURCE(IDD_SSHAUTH);
1085 dlg_proc = auth_dlg_proc;
1086 }
1087
1088 if (!DialogBoxParam(hInst, dialog_template,
1089 cur_active !=
1090 NULL ? cur_active : pvar->NotificationWindow,
1091 dlg_proc, (LPARAM) pvar) == -1) {
1092 #ifdef I18N
1093 strcpy(pvar->ts->UIMsg,
1094 "Unable to display authentication dialog box.\n"
1095 "Connection terminated.");
1096 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar);
1097 notify_fatal_error(pvar, pvar->ts->UIMsg);
1098 #else
1099 notify_fatal_error(pvar,
1100 "Unable to display authentication dialog box.\n"
1101 "Connection terminated.");
1102 #endif
1103 }
1104 }
1105 }
1106
1107 static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1108 {
1109 #ifdef I18N
1110 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1111 UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar);
1112 SetWindowText(dlg, pvar->ts->UIMsg);
1113
1114 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1115 UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar);
1116 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
1117
1118 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1119 UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar);
1120 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
1121
1122 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1123 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar);
1124 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
1125
1126 GetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1127 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD_KBDINT", pvar);
1128 SetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg);
1129
1130 GetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1131 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar);
1132 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
1133
1134 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1135 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar);
1136 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
1137
1138 GetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1139 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar);
1140 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
1141
1142 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1143 UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar);
1144 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
1145
1146 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1147 UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar);
1148 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
1149
1150 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1151 UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar);
1152 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
1153
1154 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1155 UTIL_get_lang_msg("BTN_OK", pvar);
1156 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1157
1158 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1159 UTIL_get_lang_msg("BTN_CANCEL", pvar);
1160 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1161 #endif
1162
1163 switch (pvar->settings.DefaultAuthMethod) {
1164 case SSH_AUTH_RSA:
1165 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1166 IDC_SSHUSERSA);
1167 break;
1168 case SSH_AUTH_RHOSTS:
1169 case SSH_AUTH_RHOSTS_RSA:
1170 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1171 IDC_SSHUSERHOSTS);
1172 break;
1173 case SSH_AUTH_TIS:
1174 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1175 IDC_SSHUSETIS);
1176 break;
1177 case SSH_AUTH_PASSWORD:
1178 default:
1179 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1180 IDC_SSHUSEPASSWORD);
1181 }
1182
1183 SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1184 SetDlgItemText(dlg, IDC_RSAFILENAME,
1185 pvar->settings.DefaultRSAPrivateKeyFile);
1186 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1187 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1188 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1189 pvar->settings.DefaultRhostsLocalUserName);
1190
1191 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1192 if (pvar->settings.ssh2_keyboard_interactive) {
1193 SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
1194 }
1195
1196 }
1197
1198 static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1199 {
1200 if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1201 pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1202 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1203 if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1204 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1205 } else {
1206 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1207 }
1208 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1209 pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1210 } else {
1211 pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1212 }
1213
1214 GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1215 sizeof(pvar->settings.DefaultUserName));
1216 GetDlgItemText(dlg, IDC_RSAFILENAME,
1217 pvar->settings.DefaultRSAPrivateKeyFile,
1218 sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1219 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1220 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1221 sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1222 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1223 pvar->settings.DefaultRhostsLocalUserName,
1224 sizeof(pvar->settings.DefaultRhostsLocalUserName));
1225
1226 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1227 {
1228 LRESULT ret;
1229 ret = SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_GETCHECK, 0, 0);
1230 if (ret & BST_CHECKED) {
1231 pvar->settings.ssh2_keyboard_interactive = 1;
1232 } else {
1233 pvar->settings.ssh2_keyboard_interactive = 0;
1234 }
1235 }
1236
1237 EndDialog(dlg, 1);
1238 return TRUE;
1239 }
1240
1241 static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1242 WPARAM wParam, LPARAM lParam)
1243 {
1244 PTInstVar pvar;
1245 #ifdef I18N
1246 LOGFONT logfont;
1247 HFONT font;
1248 #endif
1249
1250 switch (msg) {
1251 case WM_INITDIALOG:
1252 pvar = (PTInstVar) lParam;
1253 SetWindowLong(dlg, DWL_USER, lParam);
1254
1255 init_default_auth_dlg(pvar, dlg);
1256
1257 #ifdef I18N
1258 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1259 GetObject(font, sizeof(LOGFONT), &logfont);
1260 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1261 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1262 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1263 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1264 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1265 SendDlgItemMessage(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1266 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1267 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1268 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1269 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1270 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1271 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1272 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1273 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1274 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1275 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1276 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1277 }
1278 else {
1279 DlgAuthSetupFont = NULL;
1280 }
1281 #endif
1282
1283 return TRUE; /* because we do not set the focus */
1284
1285 case WM_COMMAND:
1286 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1287
1288 switch (LOWORD(wParam)) {
1289 case IDOK:
1290
1291 #ifdef I18N
1292 if (DlgAuthSetupFont != NULL) {
1293 DeleteObject(DlgAuthSetupFont);
1294 }
1295 #endif
1296
1297 return end_default_auth_dlg(pvar, dlg);
1298
1299 case IDCANCEL:
1300 EndDialog(dlg, 0);
1301
1302 #ifdef I18N
1303 if (DlgAuthSetupFont != NULL) {
1304 DeleteObject(DlgAuthSetupFont);
1305 }
1306 #endif
1307
1308 return TRUE;
1309
1310 case IDC_CHOOSERSAFILE:
1311 #ifdef I18N
1312 choose_RSA_key_file(dlg, pvar);
1313 #else
1314 choose_RSA_key_file(dlg);
1315 #endif
1316 return TRUE;
1317
1318 case IDC_CHOOSEHOSTRSAFILE:
1319 #ifdef I18N
1320 choose_host_RSA_key_file(dlg, pvar);
1321 #else
1322 choose_host_RSA_key_file(dlg);
1323 #endif
1324 return TRUE;
1325
1326 default:
1327 return FALSE;
1328 }
1329
1330 default:
1331 return FALSE;
1332 }
1333 }
1334
1335 void AUTH_init(PTInstVar pvar)
1336 {
1337 pvar->auth_state.failed_method = SSH_AUTH_NONE;
1338 pvar->auth_state.auth_dialog = NULL;
1339 pvar->auth_state.user = NULL;
1340 pvar->auth_state.flags = 0;
1341 pvar->auth_state.TIS_prompt = NULL;
1342 pvar->auth_state.supported_types = 0;
1343 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1344 pvar->auth_state.cur_cred.password = NULL;
1345 pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1346 pvar->auth_state.cur_cred.key_pair = NULL;
1347 AUTH_set_generic_mode(pvar);
1348 }
1349
1350 void AUTH_set_generic_mode(PTInstVar pvar)
1351 {
1352 pvar->auth_state.mode = GENERIC_AUTH_MODE;
1353 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1354 }
1355
1356 void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1357 {
1358 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1359 pvar->auth_state.mode = TIS_AUTH_MODE;
1360
1361 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1362 pvar->auth_state.TIS_prompt = malloc(len + 1);
1363 memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1364 pvar->auth_state.TIS_prompt[len] = 0;
1365 } else {
1366 AUTH_set_generic_mode(pvar);
1367 }
1368 }
1369
1370 void AUTH_do_default_cred_dialog(PTInstVar pvar)
1371 {
1372 HWND cur_active = GetActiveWindow();
1373
1374 if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1375 cur_active !=
1376 NULL ? cur_active : pvar->NotificationWindow,
1377 default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1378 #ifdef I18N
1379 strcpy(pvar->ts->UIMsg, "Unable to display authentication setup dialog box.");
1380 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar);
1381 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1382 #else
1383 notify_nonfatal_error(pvar,
1384 "Unable to display authentication setup dialog box.");
1385 #endif
1386 }
1387 }
1388
1389 void AUTH_destroy_cur_cred(PTInstVar pvar)
1390 {
1391 destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1392 destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1393 if (pvar->auth_state.cur_cred.key_pair != NULL) {
1394 CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1395 pvar->auth_state.cur_cred.key_pair = NULL;
1396 }
1397 }
1398
1399 static char FAR *get_auth_method_name(SSHAuthMethod auth)
1400 {
1401 switch (auth) {
1402 case SSH_AUTH_PASSWORD:
1403 return "password";
1404 case SSH_AUTH_RSA:
1405 return "RSA";
1406 case SSH_AUTH_RHOSTS:
1407 return "rhosts";
1408 case SSH_AUTH_RHOSTS_RSA:
1409 return "rhosts with RSA";
1410 case SSH_AUTH_TIS:
1411 return "challenge/response (TIS)";
1412 default:
1413 return "unknown method";
1414 }
1415 }
1416
1417 void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1418 {
1419 char *method = "unknown";
1420
1421 if (pvar->auth_state.user == NULL) {
1422 strncpy(dest, "None", len);
1423 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1424 if (SSHv1(pvar)) {
1425 #ifdef I18N
1426 strcpy(pvar->ts->UIMsg, "User '%s', using %s");
1427 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1428 _snprintf(dest, len, pvar->ts->UIMsg, pvar->auth_state.user,
1429 get_auth_method_name(pvar->auth_state.cur_cred.method));
1430 #else
1431 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1432 get_auth_method_name(pvar->auth_state.cur_cred.method));
1433 #endif
1434
1435 } else {
1436 // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1437 // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1438 if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1439 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1440 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1441 if (pvar->keyboard_interactive_done == 1 ||
1442 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1443 method = "keyboard-interactive";
1444 } else {
1445 method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1446 }
1447 #ifdef I18N
1448 strcpy(pvar->ts->UIMsg, "User '%s', using %s");
1449 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1450 _snprintf(dest, len, pvar->ts->UIMsg, pvar->auth_state.user, method);
1451 #else
1452 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1453 #endif
1454
1455 } else {
1456 if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1457 method = "RSA";
1458 } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1459 method = "DSA";
1460 }
1461 #ifdef I18N
1462 strcpy(pvar->ts->UIMsg, "User '%s', using %s");
1463 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1464 _snprintf(dest, len, pvar->ts->UIMsg, pvar->auth_state.user, method);
1465 #else
1466 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1467 #endif
1468 }
1469
1470 }
1471
1472 } else {
1473 #ifdef I18N
1474 strcpy(pvar->ts->UIMsg, "User '%s', using %s");
1475 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1476 _snprintf(dest, len, pvar->ts->UIMsg, pvar->auth_state.user,
1477 get_auth_method_name(pvar->auth_state.failed_method));
1478 #else
1479 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1480 get_auth_method_name(pvar->auth_state.failed_method));
1481 #endif
1482 }
1483
1484 dest[len - 1] = 0;
1485 }
1486
1487 void AUTH_notify_disconnecting(PTInstVar pvar)
1488 {
1489 if (pvar->auth_state.auth_dialog != NULL) {
1490 PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1491 /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1492 EnableWindow(pvar->NotificationWindow, TRUE);
1493 }
1494 }
1495
1496 void AUTH_end(PTInstVar pvar)
1497 {
1498 destroy_malloced_string(&pvar->auth_state.user);
1499 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1500
1501 AUTH_destroy_cur_cred(pvar);
1502 }
1503
1504 /*
1505 * $Log: not supported by cvs2svn $
1506 * Revision 1.29 2007/02/17 14:01:03 maya
1507 * �\�����b�Z�[�W��������������
1508 *
1509 * Revision 1.28 2007/01/31 13:15:08 maya
1510 * �����t�@�C�������������� \0 ���������F�����������o�O���C�������B
1511 *
1512 * Revision 1.27 2007/01/27 14:29:59 maya
1513 * �p���������{�������A�N�Z�����[�^�L�[�����������B
1514 *
1515 * Revision 1.26 2007/01/22 13:45:19 maya
1516 * �\�����b�Z�[�W��������������
1517 *
1518 * Revision 1.25 2007/01/04 08:36:42 maya
1519 * �t�H���g�����X�������������������B
1520 *
1521 * Revision 1.24 2006/12/06 14:31:13 maya
1522 * �\�����b�Z�[�W��������������
1523 *
1524 * Revision 1.23 2006/12/06 14:25:40 maya
1525 * �\�����b�Z�[�W��������������
1526 *
1527 * Revision 1.22 2006/11/29 16:58:52 maya
1528 * �\�����b�Z�[�W��������������
1529 *
1530 * Revision 1.21 2006/11/23 02:19:30 maya
1531 * �\�����b�Z�[�W�������t�@�C�����������������R�[�h���������J�n�����B
1532 *
1533 * Revision 1.20 2006/09/18 05:08:04 maya
1534 * �R�}���h���C���p�����[�^ '/ask4passwd' �����������B
1535 *
1536 * Revision 1.19 2006/08/05 03:47:49 yutakakn
1537 * �p�X���[�h�������������o������������������������ teraterm.ini �����f�����������������B
1538 *
1539 * Revision 1.18 2006/08/03 15:04:37 yutakakn
1540 * �p�X���[�h�������������������������������������`�F�b�N�{�b�N�X���F���_�C�A���O�����������B
1541 *
1542 * Revision 1.17 2005/09/05 10:46:22 yutakakn
1543 * '/I' �w�����������������F���_�C�A���O�����������������������B
1544 *
1545 * Revision 1.16 2005/08/26 16:26:02 yutakakn
1546 * �������O�C������SSH�F���_�C�A���O�����������������������B
1547 *
1548 * Revision 1.15 2005/07/15 14:58:04 yutakakn
1549 * SSH1���������x���[�U�F�������s�������A�������F�����������������o�O���C���B
1550 *
1551 * Revision 1.14 2005/04/26 13:57:57 yutakakn
1552 * private key�t�@�C���_�C�A���O��3�t�@�C���t�B���^�����������B
1553 *
1554 * Revision 1.13 2005/04/08 14:55:03 yutakakn
1555 * "Duplicate session"��������SSH�������O�C�����s�������������B
1556 *
1557 * Revision 1.12 2005/03/23 12:39:35 yutakakn
1558 * SSH2�F���_�C�A���O�� Use challenge/response to log in ���A�N�Z�����[�^�L�[�������������B
1559 *
1560 * Revision 1.11 2005/03/12 15:07:33 yutakakn
1561 * SSH2 keyboard-interactive�F����TIS�_�C�A���O�����������B
1562 *
1563 * Revision 1.10 2005/03/12 12:08:05 yutakakn
1564 * �p�X���[�h�F�����O���s��keyboard-interactive���\�b�h���A�f�t�H���g�����l������(0)�������B
1565 * �����A�F���_�C�A���O�����x�������������L�����������X���������������B
1566 *
1567 * Revision 1.9 2005/02/22 08:48:11 yutakakn
1568 * TTSSH setup�_�C�A���O�� HeartBeat �����������B
1569 * TTSSH authentication setup�_�C�A���O�� keyboard-interactive �����������B
1570 *
1571 * Revision 1.8 2005/01/27 13:30:33 yutakakn
1572 * ���J���F���������O�C�����T�|�[�g�B
1573 * /auth=publickey, /keyfile �I�v�V�������V�K���������B
1574 * �����A�����������������T�|�[�g�B
1575 *
1576 * Revision 1.7 2005/01/25 13:38:22 yutakakn
1577 * SSH�F���_�C�A���O���ARhosts/TIS���O���[�������O���AEnter�L�[�������������A
1578 * �A�v���P�[�V�����G���[���������������������B
1579 *
1580 * Revision 1.6 2005/01/24 14:07:07 yutakakn
1581 * �Ekeyboard-interactive�F�����T�|�[�g�����B
1582 * �@�����������Ateraterm.ini�� "KeyboardInteractive" �G���g�������������B
1583 * �E�o�[�W�����_�C�A���O�� OpenSSL�o�[�W���� ������
1584 *
1585 * Revision 1.5 2004/12/27 14:35:41 yutakakn
1586 * SSH2�����������������s�����G���[���b�Z�[�W�����������B
1587 *
1588 * Revision 1.4 2004/12/22 17:28:14 yutakakn
1589 * SSH2���J���F��(RSA/DSA)���T�|�[�g�����B
1590 *
1591 * Revision 1.3 2004/12/16 13:01:09 yutakakn
1592 * SSH�������O�C�����A�v���P�[�V�����G���[�������������C�������B
1593 *
1594 * Revision 1.2 2004/12/01 15:37:49 yutakakn
1595 * SSH2�������O�C���@�\�������B
1596 * �����A�p�X���[�h�F�������������B
1597 * �E�R�}���h���C��
1598 * /ssh /auth=�F�����\�b�h /user=���[�U�� /passwd=�p�X���[�h
1599 *
1600 */

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