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 2963 - (show annotations) (download) (as text)
Sat Feb 17 17:31:55 2007 UTC (17 years, 1 month ago) by yasuhide
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 50792 byte(s)
コマンドラインでask4passwd が指定された時、ログインダイアログのパスフレーズ入力にフォーカスする

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

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