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 2992 - (show annotations) (download) (as text)
Wed Aug 8 16:04:09 2007 UTC (16 years, 8 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 52238 byte(s)
安全な関数を使用するように変更した。

1 /*
2 Copyright (c) 1998-2001, Robert O'Callahan
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without modification,
6 are permitted provided that the following conditions are met:
7
8 Redistributions of source code must retain the above copyright notice, this list of
9 conditions and the following disclaimer.
10
11 Redistributions in binary form must reproduce the above copyright notice, this list
12 of conditions and the following disclaimer in the documentation and/or other materials
13 provided with the distribution.
14
15 The name of Robert O'Callahan may not be used to endorse or promote products derived from
16 this software without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
19 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include "ttxssh.h"
30 #include "util.h"
31 #include "ssh.h"
32
33 #include <io.h>
34 #include <fcntl.h>
35 #include <stdlib.h>
36 #include <errno.h>
37
38 #include "resource.h"
39 #include "keyfiles.h"
40
41 #define AUTH_START_USER_AUTH_ON_ERROR_END 1
42
43 #define MAX_AUTH_CONTROL IDC_SSHUSETIS
44
45 #ifndef NO_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 #ifndef NO_I18N
119 char buf2[1024];
120 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf2, sizeof(buf2));
121 _snprintf_s(buf, sizeof(buf), _TRUNCATE, 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 #ifndef NO_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 #ifndef NO_I18N
249 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Authentication failed. Please retry.", _TRUNCATE);
250 UTIL_get_lang_msg("DLG_AUTH_BANNER2_FAILED", pvar);
251 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, "Retrying SSH Authentication");
252
253 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Retrying SSH Authentication", _TRUNCATE);
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 #ifndef NO_I18N
351 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Use p&lain password to log in (with keyboard-interactive)", _TRUNCATE);
352 UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD_KBDINT", 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 #ifndef NO_I18N
361 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Use challenge/response to log in(&TIS)", _TRUNCATE);
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 #ifndef NO_I18N
369 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Use &challenge/response to log in(keyboard-interactive)", _TRUNCATE);
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 #ifndef NO_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 #ifndef NO_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 #ifndef NO_I18N
419 strncpy_s(pvar->ts->UIMsg, sizeof(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", _TRUNCATE);
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 #ifndef NO_I18N
434 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Choose a file with the RSA/DSA private key", _TRUNCATE);
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 #ifndef NO_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 #ifndef NO_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 #ifndef NO_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 #ifndef NO_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 #ifndef NO_I18N
517 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "You must specify a file containing the RSA/DSA private key.", _TRUNCATE);
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 #ifndef NO_I18N
566 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "read error SSH2 private key file\r\n%s", _TRUNCATE);
567 UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar);
568 _snprintf_s(buf, sizeof(buf), _TRUNCATE, 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 #ifndef NO_I18N
619 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
620 "Rhosts authentication will probably fail because it was not "
621 "the default authentication method.\n"
622 "To use Rhosts authentication "
623 "in TTSSH, you need to set it to be the default by restarting\n"
624 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
625 "before connecting.",
626 _TRUNCATE);
627 UTIL_get_lang_msg("MSG_RHOSTS_NOTDEFAULT_ERROR", pvar);
628 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
629 #else
630 notify_nonfatal_error(pvar,
631 "Rhosts authentication will probably fail because it was not "
632 "the default authentication method.\n"
633 "To use Rhosts authentication "
634 "in TTSSH, you need to set it to be the default by restarting\n"
635 "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
636 "before connecting.");
637 #endif
638 }
639
640 pvar->auth_state.cur_cred.rhosts_client_user =
641 alloc_control_text(GetDlgItem(dlg, IDC_LOCALUSERNAME));
642 }
643 pvar->auth_state.auth_dialog = NULL;
644
645 GetDlgItemText(dlg, IDC_RSAFILENAME,
646 pvar->session_settings.DefaultRSAPrivateKeyFile,
647 sizeof(pvar->session_settings.
648 DefaultRSAPrivateKeyFile));
649 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
650 pvar->session_settings.DefaultRhostsHostPrivateKeyFile,
651 sizeof(pvar->session_settings.
652 DefaultRhostsHostPrivateKeyFile));
653 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
654 pvar->session_settings.DefaultRhostsLocalUserName,
655 sizeof(pvar->session_settings.
656 DefaultRhostsLocalUserName));
657
658 if (SSHv1(pvar)) {
659 SSH_notify_user_name(pvar);
660 SSH_notify_cred(pvar);
661 } else {
662 // for SSH2(yutaka)
663 do_SSH2_userauth(pvar);
664 }
665
666 EndDialog(dlg, 1);
667 #ifndef NO_I18N
668 if (DlgAuthFont != NULL) {
669 DeleteObject(DlgAuthFont);
670 }
671 #endif
672
673 return TRUE;
674 }
675
676 static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
677 LPARAM lParam)
678 {
679 const int IDC_TIMER1 = 300;
680 const int autologin_timeout = 10; // �~���b
681 PTInstVar pvar;
682 #ifndef NO_I18N
683 LOGFONT logfont;
684 HFONT font;
685 #endif
686
687 switch (msg) {
688 case WM_INITDIALOG:
689 pvar = (PTInstVar) lParam;
690 pvar->auth_state.auth_dialog = dlg;
691 SetWindowLong(dlg, DWL_USER, lParam);
692
693 init_auth_dlg(pvar, dlg);
694
695 #ifndef NO_I18N
696 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
697 GetObject(font, sizeof(LOGFONT), &logfont);
698 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthFont, pvar)) {
699 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
700 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
701 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
702 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
703 SendDlgItemMessage(dlg, IDC_SSHPASSWORDCAPTION, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
704 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
705 SendDlgItemMessage(dlg, IDC_REMEMBER_PASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
706 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
707 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
708 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
709 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
710 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
711 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
712 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
713 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
714 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
715 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
716 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
717 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
718 }
719 else {
720 DlgAuthFont = NULL;
721 }
722 #endif
723
724 // SSH2 autologin���L�����������A�^�C�}���d�|�����B (2004.12.1 yutaka)
725 if (pvar->ssh2_autologin == 1) {
726 SetTimer(dlg, IDC_TIMER1, autologin_timeout, 0);
727 }
728 return FALSE; /* because we set the focus */
729
730 case WM_TIMER:
731 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
732 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2004.12.16 yutaka)
733 if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
734 KillTimer(dlg, IDC_TIMER1);
735 SendMessage(dlg, WM_COMMAND, IDOK, 0);
736 }
737 return TRUE;
738
739 case WM_COMMAND:
740 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
741
742 switch (LOWORD(wParam)) {
743 case IDOK:
744 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2001.1.25 yutaka)
745 if (pvar->userauth_retry_count == 0 && (pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME)) {
746 return FALSE;
747 }
748
749 return end_auth_dlg(pvar, dlg);
750
751 case IDCANCEL: /* kill the connection */
752 pvar->auth_state.auth_dialog = NULL;
753 notify_closed_connection(pvar);
754 EndDialog(dlg, 0);
755
756 #ifndef NO_I18N
757 if (DlgAuthFont != NULL) {
758 DeleteObject(DlgAuthFont);
759 }
760 #endif
761
762 return TRUE;
763
764 case IDC_SSHUSEPASSWORD:
765 case IDC_SSHUSERSA:
766 case IDC_SSHUSERHOSTS:
767 case IDC_SSHUSETIS:
768 set_auth_options_status(dlg, LOWORD(wParam));
769 return TRUE;
770
771 case IDC_CHOOSERSAFILE:
772 #ifndef NO_I18N
773 choose_RSA_key_file(dlg, pvar);
774 #else
775 choose_RSA_key_file(dlg);
776 #endif
777 return TRUE;
778
779 case IDC_CHOOSEHOSTRSAFILE:
780 #ifndef NO_I18N
781 choose_host_RSA_key_file(dlg, pvar);
782 #else
783 choose_host_RSA_key_file(dlg);
784 #endif
785 return TRUE;
786
787 default:
788 return FALSE;
789 }
790
791 default:
792 return FALSE;
793 }
794 }
795
796 char FAR *AUTH_get_user_name(PTInstVar pvar)
797 {
798 return pvar->auth_state.user;
799 }
800
801 int AUTH_set_supported_auth_types(PTInstVar pvar, int types)
802 {
803 char buf[1024];
804
805 _snprintf_s(buf, sizeof(buf), _TRUNCATE,
806 "Server reports supported authentication method mask = %d",
807 types);
808 buf[sizeof(buf) - 1] = 0;
809 notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE);
810
811 if (SSHv1(pvar)) {
812 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
813 | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)
814 | (1 << SSH_AUTH_TIS);
815 } else {
816 // for SSH2(yutaka)
817 // types &= (1 << SSH_AUTH_PASSWORD);
818 // ���J���F�����L�������� (2004.12.18 yutaka)
819 // TIS�������BSSH2����keyboard-interactive�����������B(2005.3.12 yutaka)
820 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
821 | (1 << SSH_AUTH_DSA)
822 | (1 << SSH_AUTH_TIS);
823 }
824 pvar->auth_state.supported_types = types;
825
826 if (types == 0) {
827 #ifndef NO_I18N
828 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
829 "Server does not support any of the authentication options\n"
830 "provided by TTSSH. This connection will now close.",
831 _TRUNCATE);
832 UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar);
833 notify_fatal_error(pvar, pvar->ts->UIMsg);
834 #else
835 notify_fatal_error(pvar,
836 "Server does not support any of the authentication options\n"
837 "provided by TTSSH. This connection will now close.");
838 #endif
839 return 0;
840 } else {
841 if (pvar->auth_state.auth_dialog != NULL) {
842 update_server_supported_types(pvar,
843 pvar->auth_state.auth_dialog);
844 }
845
846 return 1;
847 }
848 }
849
850 static void start_user_auth(PTInstVar pvar)
851 {
852 // �F���_�C�A���O���\�������� (2004.12.1 yutaka)
853 PostMessage(pvar->NotificationWindow, WM_COMMAND, (WPARAM) ID_SSHAUTH,
854 (LPARAM) NULL);
855 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
856 }
857
858 static void try_default_auth(PTInstVar pvar)
859 {
860 if (pvar->session_settings.TryDefaultAuth) {
861 switch (pvar->session_settings.DefaultAuthMethod) {
862 case SSH_AUTH_RSA:{
863 BOOL invalid_passphrase;
864 char password[] = "";
865
866 pvar->auth_state.cur_cred.key_pair
867 =
868 KEYFILES_read_private_key(pvar,
869 pvar->session_settings.
870 DefaultRSAPrivateKeyFile,
871 password,
872 &invalid_passphrase, TRUE);
873 if (pvar->auth_state.cur_cred.key_pair == NULL) {
874 return;
875 } else {
876 pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
877 }
878 break;
879 }
880
881 case SSH_AUTH_RHOSTS:
882 if (pvar->session_settings.
883 DefaultRhostsHostPrivateKeyFile[0] != 0) {
884 BOOL invalid_passphrase;
885 char password[] = "";
886
887 pvar->auth_state.cur_cred.key_pair
888 =
889 KEYFILES_read_private_key(pvar,
890 pvar->session_settings.
891 DefaultRhostsHostPrivateKeyFile,
892 password,
893 &invalid_passphrase, TRUE);
894 if (pvar->auth_state.cur_cred.key_pair == NULL) {
895 return;
896 } else {
897 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS_RSA;
898 }
899 } else {
900 pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS;
901 }
902
903 pvar->auth_state.cur_cred.rhosts_client_user =
904 _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
905 break;
906
907 case SSH_AUTH_PASSWORD:
908 pvar->auth_state.cur_cred.password = _strdup("");
909 pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
910 break;
911
912 case SSH_AUTH_TIS:
913 default:
914 return;
915 }
916
917 pvar->auth_state.user =
918 _strdup(pvar->session_settings.DefaultUserName);
919 }
920 }
921
922 void AUTH_notify_end_error(PTInstVar pvar)
923 {
924 if ((pvar->auth_state.flags & AUTH_START_USER_AUTH_ON_ERROR_END) != 0) {
925 start_user_auth(pvar);
926 pvar->auth_state.flags &= ~AUTH_START_USER_AUTH_ON_ERROR_END;
927 }
928 }
929
930 void AUTH_advance_to_next_cred(PTInstVar pvar)
931 {
932 pvar->auth_state.failed_method = pvar->auth_state.cur_cred.method;
933
934 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
935 try_default_auth(pvar);
936
937 if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
938 if (pvar->err_msg != NULL) {
939 pvar->auth_state.flags |=
940 AUTH_START_USER_AUTH_ON_ERROR_END;
941 } else {
942 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
943 // �R�}���h���C���w������������
944 start_user_auth(pvar);
945 }
946 }
947 } else {
948 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
949 // �R�}���h���C���w������(/auth=xxxx)������
950 start_user_auth(pvar);
951 }
952 }
953
954 static void init_TIS_dlg(PTInstVar pvar, HWND dlg)
955 {
956 #ifndef NO_I18N
957 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
958 UTIL_get_lang_msg("DLG_TIS_TITLE", pvar);
959 SetWindowText(dlg, pvar->ts->UIMsg);
960
961 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
962 UTIL_get_lang_msg("DLG_TIS_BANNER", pvar);
963 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
964
965 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
966 UTIL_get_lang_msg("BTN_OK", pvar);
967 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
968
969 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
970 UTIL_get_lang_msg("BTN_DISCONNECT", pvar);
971 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
972 #endif
973
974 init_auth_machine_banner(pvar, dlg);
975 init_password_control(dlg);
976
977 if (pvar->auth_state.TIS_prompt != NULL) {
978 if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
979 pvar->auth_state.TIS_prompt[10000] = 0;
980 }
981 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
982 pvar->auth_state.TIS_prompt);
983 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
984 }
985 }
986
987 static BOOL end_TIS_dlg(PTInstVar pvar, HWND dlg)
988 {
989 char FAR *password =
990 alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
991
992 pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
993 pvar->auth_state.cur_cred.password = password;
994 pvar->auth_state.auth_dialog = NULL;
995
996 // add
997 if (SSHv2(pvar)) {
998 pvar->keyboard_interactive_password_input = 1;
999 handle_SSH2_userauth_inforeq(pvar);
1000 }
1001
1002 SSH_notify_cred(pvar);
1003
1004 EndDialog(dlg, 1);
1005 return TRUE;
1006 }
1007
1008 static BOOL CALLBACK TIS_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
1009 LPARAM lParam)
1010 {
1011 PTInstVar pvar;
1012 #ifndef NO_I18N
1013 LOGFONT logfont;
1014 HFONT font;
1015 #endif
1016
1017 switch (msg) {
1018 case WM_INITDIALOG:
1019 pvar = (PTInstVar) lParam;
1020 pvar->auth_state.auth_dialog = dlg;
1021 SetWindowLong(dlg, DWL_USER, lParam);
1022
1023 init_TIS_dlg(pvar, dlg);
1024
1025 #ifndef NO_I18N
1026 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1027 GetObject(font, sizeof(LOGFONT), &logfont);
1028 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) {
1029 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1030 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1031 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1032 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1033 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
1034 }
1035 else {
1036 DlgTisFont = NULL;
1037 }
1038 #endif
1039
1040 return FALSE; /* because we set the focus */
1041
1042 case WM_COMMAND:
1043 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1044
1045 switch (LOWORD(wParam)) {
1046 case IDOK:
1047 #ifndef NO_I18N
1048 if (DlgTisFont != NULL) {
1049 DeleteObject(DlgTisFont);
1050 }
1051 #endif
1052
1053 return end_TIS_dlg(pvar, dlg);
1054
1055 case IDCANCEL: /* kill the connection */
1056 pvar->auth_state.auth_dialog = NULL;
1057 notify_closed_connection(pvar);
1058 EndDialog(dlg, 0);
1059
1060 #ifndef NO_I18N
1061 if (DlgTisFont != NULL) {
1062 DeleteObject(DlgTisFont);
1063 }
1064 #endif
1065
1066 return TRUE;
1067
1068 default:
1069 return FALSE;
1070 }
1071
1072 default:
1073 return FALSE;
1074 }
1075 }
1076
1077 void AUTH_do_cred_dialog(PTInstVar pvar)
1078 {
1079 if (pvar->auth_state.auth_dialog == NULL) {
1080 HWND cur_active = GetActiveWindow();
1081 DLGPROC dlg_proc;
1082 LPCTSTR dialog_template;
1083
1084 switch (pvar->auth_state.mode) {
1085 case TIS_AUTH_MODE:
1086 dialog_template = MAKEINTRESOURCE(IDD_SSHTISAUTH);
1087 dlg_proc = TIS_dlg_proc;
1088 break;
1089 case GENERIC_AUTH_MODE:
1090 default:
1091 dialog_template = MAKEINTRESOURCE(IDD_SSHAUTH);
1092 dlg_proc = auth_dlg_proc;
1093 }
1094
1095 if (!DialogBoxParam(hInst, dialog_template,
1096 cur_active !=
1097 NULL ? cur_active : pvar->NotificationWindow,
1098 dlg_proc, (LPARAM) pvar) == -1) {
1099 #ifndef NO_I18N
1100 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
1101 "Unable to display authentication dialog box.\n"
1102 "Connection terminated.",
1103 _TRUNCATE);
1104 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar);
1105 notify_fatal_error(pvar, pvar->ts->UIMsg);
1106 #else
1107 notify_fatal_error(pvar,
1108 "Unable to display authentication dialog box.\n"
1109 "Connection terminated.");
1110 #endif
1111 }
1112 }
1113 }
1114
1115 static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1116 {
1117 #ifndef NO_I18N
1118 GetWindowText(dlg, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1119 UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar);
1120 SetWindowText(dlg, pvar->ts->UIMsg);
1121
1122 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1123 UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar);
1124 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
1125
1126 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1127 UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar);
1128 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
1129
1130 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1131 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar);
1132 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
1133
1134 GetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1135 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD_KBDINT", pvar);
1136 SetDlgItemText(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, pvar->ts->UIMsg);
1137
1138 GetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1139 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar);
1140 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
1141
1142 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1143 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar);
1144 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
1145
1146 GetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1147 UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar);
1148 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
1149
1150 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1151 UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar);
1152 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
1153
1154 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1155 UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar);
1156 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
1157
1158 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1159 UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar);
1160 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
1161
1162 GetDlgItemText(dlg, IDOK, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1163 UTIL_get_lang_msg("BTN_OK", pvar);
1164 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1165
1166 GetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg));
1167 UTIL_get_lang_msg("BTN_CANCEL", pvar);
1168 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1169 #endif
1170
1171 switch (pvar->settings.DefaultAuthMethod) {
1172 case SSH_AUTH_RSA:
1173 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1174 IDC_SSHUSERSA);
1175 break;
1176 case SSH_AUTH_RHOSTS:
1177 case SSH_AUTH_RHOSTS_RSA:
1178 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1179 IDC_SSHUSERHOSTS);
1180 break;
1181 case SSH_AUTH_TIS:
1182 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1183 IDC_SSHUSETIS);
1184 break;
1185 case SSH_AUTH_PASSWORD:
1186 default:
1187 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1188 IDC_SSHUSEPASSWORD);
1189 }
1190
1191 SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1192 SetDlgItemText(dlg, IDC_RSAFILENAME,
1193 pvar->settings.DefaultRSAPrivateKeyFile);
1194 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1195 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1196 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1197 pvar->settings.DefaultRhostsLocalUserName);
1198
1199 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1200 if (pvar->settings.ssh2_keyboard_interactive) {
1201 SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_SETCHECK, BST_CHECKED, 0);
1202 }
1203
1204 }
1205
1206 static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1207 {
1208 if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1209 pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1210 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1211 if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1212 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1213 } else {
1214 pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1215 }
1216 } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1217 pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1218 } else {
1219 pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1220 }
1221
1222 GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1223 sizeof(pvar->settings.DefaultUserName));
1224 GetDlgItemText(dlg, IDC_RSAFILENAME,
1225 pvar->settings.DefaultRSAPrivateKeyFile,
1226 sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1227 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1228 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1229 sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1230 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1231 pvar->settings.DefaultRhostsLocalUserName,
1232 sizeof(pvar->settings.DefaultRhostsLocalUserName));
1233
1234 // SSH2 keyboard-interactive method (2005.2.22 yutaka)
1235 {
1236 LRESULT ret;
1237 ret = SendMessage(GetDlgItem(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK), BM_GETCHECK, 0, 0);
1238 if (ret & BST_CHECKED) {
1239 pvar->settings.ssh2_keyboard_interactive = 1;
1240 } else {
1241 pvar->settings.ssh2_keyboard_interactive = 0;
1242 }
1243 }
1244
1245 EndDialog(dlg, 1);
1246 return TRUE;
1247 }
1248
1249 static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1250 WPARAM wParam, LPARAM lParam)
1251 {
1252 PTInstVar pvar;
1253 #ifndef NO_I18N
1254 LOGFONT logfont;
1255 HFONT font;
1256 #endif
1257
1258 switch (msg) {
1259 case WM_INITDIALOG:
1260 pvar = (PTInstVar) lParam;
1261 SetWindowLong(dlg, DWL_USER, lParam);
1262
1263 init_default_auth_dlg(pvar, dlg);
1264
1265 #ifndef NO_I18N
1266 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1267 GetObject(font, sizeof(LOGFONT), &logfont);
1268 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1269 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1270 SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1271 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1272 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1273 SendDlgItemMessage(dlg, IDC_KEYBOARD_INTERACTIVE_CHECK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1274 SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1275 SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1276 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1277 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1278 SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1279 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1280 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1281 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1282 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1283 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1284 SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1285 }
1286 else {
1287 DlgAuthSetupFont = NULL;
1288 }
1289 #endif
1290
1291 return TRUE; /* because we do not set the focus */
1292
1293 case WM_COMMAND:
1294 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1295
1296 switch (LOWORD(wParam)) {
1297 case IDOK:
1298
1299 #ifndef NO_I18N
1300 if (DlgAuthSetupFont != NULL) {
1301 DeleteObject(DlgAuthSetupFont);
1302 }
1303 #endif
1304
1305 return end_default_auth_dlg(pvar, dlg);
1306
1307 case IDCANCEL:
1308 EndDialog(dlg, 0);
1309
1310 #ifndef NO_I18N
1311 if (DlgAuthSetupFont != NULL) {
1312 DeleteObject(DlgAuthSetupFont);
1313 }
1314 #endif
1315
1316 return TRUE;
1317
1318 case IDC_CHOOSERSAFILE:
1319 #ifndef NO_I18N
1320 choose_RSA_key_file(dlg, pvar);
1321 #else
1322 choose_RSA_key_file(dlg);
1323 #endif
1324 return TRUE;
1325
1326 case IDC_CHOOSEHOSTRSAFILE:
1327 #ifndef NO_I18N
1328 choose_host_RSA_key_file(dlg, pvar);
1329 #else
1330 choose_host_RSA_key_file(dlg);
1331 #endif
1332 return TRUE;
1333
1334 default:
1335 return FALSE;
1336 }
1337
1338 default:
1339 return FALSE;
1340 }
1341 }
1342
1343 void AUTH_init(PTInstVar pvar)
1344 {
1345 pvar->auth_state.failed_method = SSH_AUTH_NONE;
1346 pvar->auth_state.auth_dialog = NULL;
1347 pvar->auth_state.user = NULL;
1348 pvar->auth_state.flags = 0;
1349 pvar->auth_state.TIS_prompt = NULL;
1350 pvar->auth_state.supported_types = 0;
1351 pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1352 pvar->auth_state.cur_cred.password = NULL;
1353 pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1354 pvar->auth_state.cur_cred.key_pair = NULL;
1355 AUTH_set_generic_mode(pvar);
1356 }
1357
1358 void AUTH_set_generic_mode(PTInstVar pvar)
1359 {
1360 pvar->auth_state.mode = GENERIC_AUTH_MODE;
1361 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1362 }
1363
1364 void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1365 {
1366 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1367 pvar->auth_state.mode = TIS_AUTH_MODE;
1368
1369 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1370 pvar->auth_state.TIS_prompt = malloc(len + 1);
1371 memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1372 pvar->auth_state.TIS_prompt[len] = 0;
1373 } else {
1374 AUTH_set_generic_mode(pvar);
1375 }
1376 }
1377
1378 void AUTH_do_default_cred_dialog(PTInstVar pvar)
1379 {
1380 HWND cur_active = GetActiveWindow();
1381
1382 if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1383 cur_active !=
1384 NULL ? cur_active : pvar->NotificationWindow,
1385 default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1386 #ifndef NO_I18N
1387 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "Unable to display authentication setup dialog box.", _TRUNCATE);
1388 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar);
1389 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1390 #else
1391 notify_nonfatal_error(pvar,
1392 "Unable to display authentication setup dialog box.");
1393 #endif
1394 }
1395 }
1396
1397 void AUTH_destroy_cur_cred(PTInstVar pvar)
1398 {
1399 destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1400 destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1401 if (pvar->auth_state.cur_cred.key_pair != NULL) {
1402 CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1403 pvar->auth_state.cur_cred.key_pair = NULL;
1404 }
1405 }
1406
1407 static char FAR *get_auth_method_name(SSHAuthMethod auth)
1408 {
1409 switch (auth) {
1410 case SSH_AUTH_PASSWORD:
1411 return "password";
1412 case SSH_AUTH_RSA:
1413 return "RSA";
1414 case SSH_AUTH_RHOSTS:
1415 return "rhosts";
1416 case SSH_AUTH_RHOSTS_RSA:
1417 return "rhosts with RSA";
1418 case SSH_AUTH_TIS:
1419 return "challenge/response (TIS)";
1420 default:
1421 return "unknown method";
1422 }
1423 }
1424
1425 void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1426 {
1427 char *method = "unknown";
1428
1429 if (pvar->auth_state.user == NULL) {
1430 strncpy_s(dest, len, "None", _TRUNCATE);
1431 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1432 if (SSHv1(pvar)) {
1433 #ifndef NO_I18N
1434 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "User '%s', using %s", _TRUNCATE);
1435 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1436 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1437 get_auth_method_name(pvar->auth_state.cur_cred.method));
1438 #else
1439 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1440 get_auth_method_name(pvar->auth_state.cur_cred.method));
1441 #endif
1442
1443 } else {
1444 // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1445 // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1446 if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1447 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1448 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1449 if (pvar->keyboard_interactive_done == 1 ||
1450 pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1451 method = "keyboard-interactive";
1452 } else {
1453 method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1454 }
1455 #ifndef NO_I18N
1456 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "User '%s', using %s", _TRUNCATE);
1457 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1458 _snprintf_s(dest, len, _TRUNCATE,
1459 pvar->ts->UIMsg, pvar->auth_state.user, method);
1460 #else
1461 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1462 #endif
1463
1464 } else {
1465 if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1466 method = "RSA";
1467 } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1468 method = "DSA";
1469 }
1470 #ifndef NO_I18N
1471 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "User '%s', using %s", _TRUNCATE);
1472 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1473 _snprintf_s(dest, len, _TRUNCATE,
1474 pvar->ts->UIMsg, pvar->auth_state.user, method);
1475 #else
1476 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user, method);
1477 #endif
1478 }
1479
1480 }
1481
1482 } else {
1483 #ifndef NO_I18N
1484 strncpy_s(pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), "User '%s', using %s", _TRUNCATE);
1485 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar);
1486 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1487 get_auth_method_name(pvar->auth_state.failed_method));
1488 #else
1489 _snprintf(dest, len, "User '%s', using %s", pvar->auth_state.user,
1490 get_auth_method_name(pvar->auth_state.failed_method));
1491 #endif
1492 }
1493
1494 dest[len - 1] = 0;
1495 }
1496
1497 void AUTH_notify_disconnecting(PTInstVar pvar)
1498 {
1499 if (pvar->auth_state.auth_dialog != NULL) {
1500 PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1501 /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1502 EnableWindow(pvar->NotificationWindow, TRUE);
1503 }
1504 }
1505
1506 void AUTH_end(PTInstVar pvar)
1507 {
1508 destroy_malloced_string(&pvar->auth_state.user);
1509 destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1510
1511 AUTH_destroy_cur_cred(pvar);
1512 }
1513
1514 /*
1515 * $Log: not supported by cvs2svn $
1516 * Revision 1.33 2007/06/06 14:10:12 maya
1517 * �v���v���Z�b�T�������\�������������������������AINET6 �� I18N �� #define ���t�]�������B
1518 *
1519 * Revision 1.32 2007/03/17 11:53:29 doda
1520 * �v���C���e�L�X�g�F�����������L�[�{�[�h�C���^���N�e�B�u�F�����g�p�������������������������ASSH�F���_�C�A���O���v���C���e�L�X�g�F����rhosts�F�����\�������������C�������B
1521 *
1522 * Revision 1.31 2007/02/17 17:31:55 yasuhide
1523 * �R�}���h���C����ask4passwd ���w�����������A���O�C���_�C�A���O���p�X�t���[�Y�������t�H�[�J�X����
1524 *
1525 * Revision 1.30 2007/02/17 16:20:21 yasuhide
1526 * SSH2 �����p�����F�����p�X�t���[�Y�������������A�p�X�t���[�Y�_�C�A���O���t�H�[�J�X������
1527 *
1528 * Revision 1.29 2007/02/17 14:01:03 maya
1529 * �\�����b�Z�[�W��������������
1530 *
1531 * Revision 1.28 2007/01/31 13:15:08 maya
1532 * �����t�@�C�������������� \0 ���������F�����������o�O���C�������B
1533 *
1534 * Revision 1.27 2007/01/27 14:29:59 maya
1535 * �p���������{�������A�N�Z�����[�^�L�[�����������B
1536 *
1537 * Revision 1.26 2007/01/22 13:45:19 maya
1538 * �\�����b�Z�[�W��������������
1539 *
1540 * Revision 1.25 2007/01/04 08:36:42 maya
1541 * �t�H���g�����X�������������������B
1542 *
1543 * Revision 1.24 2006/12/06 14:31:13 maya
1544 * �\�����b�Z�[�W��������������
1545 *
1546 * Revision 1.23 2006/12/06 14:25:40 maya
1547 * �\�����b�Z�[�W��������������
1548 *
1549 * Revision 1.22 2006/11/29 16:58:52 maya
1550 * �\�����b�Z�[�W��������������
1551 *
1552 * Revision 1.21 2006/11/23 02:19:30 maya
1553 * �\�����b�Z�[�W�������t�@�C�����������������R�[�h���������J�n�����B
1554 *
1555 * Revision 1.20 2006/09/18 05:08:04 maya
1556 * �R�}���h���C���p�����[�^ '/ask4passwd' �����������B
1557 *
1558 * Revision 1.19 2006/08/05 03:47:49 yutakakn
1559 * �p�X���[�h�������������o������������������������ teraterm.ini �����f�����������������B
1560 *
1561 * Revision 1.18 2006/08/03 15:04:37 yutakakn
1562 * �p�X���[�h�������������������������������������`�F�b�N�{�b�N�X���F���_�C�A���O�����������B
1563 *
1564 * Revision 1.17 2005/09/05 10:46:22 yutakakn
1565 * '/I' �w�����������������F���_�C�A���O�����������������������B
1566 *
1567 * Revision 1.16 2005/08/26 16:26:02 yutakakn
1568 * �������O�C������SSH�F���_�C�A���O�����������������������B
1569 *
1570 * Revision 1.15 2005/07/15 14:58:04 yutakakn
1571 * SSH1���������x���[�U�F�������s�������A�������F�����������������o�O���C���B
1572 *
1573 * Revision 1.14 2005/04/26 13:57:57 yutakakn
1574 * private key�t�@�C���_�C�A���O��3�t�@�C���t�B���^�����������B
1575 *
1576 * Revision 1.13 2005/04/08 14:55:03 yutakakn
1577 * "Duplicate session"��������SSH�������O�C�����s�������������B
1578 *
1579 * Revision 1.12 2005/03/23 12:39:35 yutakakn
1580 * SSH2�F���_�C�A���O�� Use challenge/response to log in ���A�N�Z�����[�^�L�[�������������B
1581 *
1582 * Revision 1.11 2005/03/12 15:07:33 yutakakn
1583 * SSH2 keyboard-interactive�F����TIS�_�C�A���O�����������B
1584 *
1585 * Revision 1.10 2005/03/12 12:08:05 yutakakn
1586 * �p�X���[�h�F�����O���s��keyboard-interactive���\�b�h���A�f�t�H���g�����l������(0)�������B
1587 * �����A�F���_�C�A���O�����x�������������L�����������X���������������B
1588 *
1589 * Revision 1.9 2005/02/22 08:48:11 yutakakn
1590 * TTSSH setup�_�C�A���O�� HeartBeat �����������B
1591 * TTSSH authentication setup�_�C�A���O�� keyboard-interactive �����������B
1592 *
1593 * Revision 1.8 2005/01/27 13:30:33 yutakakn
1594 * ���J���F���������O�C�����T�|�[�g�B
1595 * /auth=publickey, /keyfile �I�v�V�������V�K���������B
1596 * �����A�����������������T�|�[�g�B
1597 *
1598 * Revision 1.7 2005/01/25 13:38:22 yutakakn
1599 * SSH�F���_�C�A���O���ARhosts/TIS���O���[�������O���AEnter�L�[�������������A
1600 * �A�v���P�[�V�����G���[���������������������B
1601 *
1602 * Revision 1.6 2005/01/24 14:07:07 yutakakn
1603 * �Ekeyboard-interactive�F�����T�|�[�g�����B
1604 * �@�����������Ateraterm.ini�� "KeyboardInteractive" �G���g�������������B
1605 * �E�o�[�W�����_�C�A���O�� OpenSSL�o�[�W���� ������
1606 *
1607 * Revision 1.5 2004/12/27 14:35:41 yutakakn
1608 * SSH2�����������������s�����G���[���b�Z�[�W�����������B
1609 *
1610 * Revision 1.4 2004/12/22 17:28:14 yutakakn
1611 * SSH2���J���F��(RSA/DSA)���T�|�[�g�����B
1612 *
1613 * Revision 1.3 2004/12/16 13:01:09 yutakakn
1614 * SSH�������O�C�����A�v���P�[�V�����G���[�������������C�������B
1615 *
1616 * Revision 1.2 2004/12/01 15:37:49 yutakakn
1617 * SSH2�������O�C���@�\�������B
1618 * �����A�p�X���[�h�F�������������B
1619 * �E�R�}���h���C��
1620 * /ssh /auth=�F�����\�b�h /user=���[�U�� /passwd=�p�X���[�h
1621 *
1622 */

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