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 2961 - (show annotations) (download) (as text)
Sat Feb 17 14:01:03 2007 UTC (17 years, 1 month ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 50155 byte(s)
表示メッセージの読み込み対応

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

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