Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

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