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 3036 - (hide annotations) (download) (as text)
Tue Oct 16 15:28:14 2007 UTC (16 years, 5 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 46075 byte(s)
SSH2 の暗号方式として AES256 をサポートした。

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 static HFONT DlgAuthFont;
46     static HFONT DlgTisFont;
47     static HFONT DlgAuthSetupFont;
48    
49 yutakakn 2890 void destroy_malloced_string(char FAR * FAR * str)
50 yutakakn 2728 {
51     if (*str != NULL) {
52     memset(*str, 0, strlen(*str));
53     free(*str);
54     *str = NULL;
55     }
56     }
57    
58     static int auth_types_to_control_IDs[] = {
59     -1, IDC_SSHUSERHOSTS, IDC_SSHUSERSA, IDC_SSHUSEPASSWORD,
60     IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1
61     };
62    
63     static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,
64 maya 3003 WPARAM wParam, LPARAM lParam)
65 yutakakn 2728 {
66     switch (msg) {
67     case WM_CHAR:
68     if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) {
69     char chars[] = { (char) wParam, 0 };
70    
71     SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,
72 maya 3003 (LPARAM) (char FAR *) chars);
73 yutakakn 2728 return 0;
74     }
75     }
76    
77     return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA),
78 maya 3003 control, msg, wParam, lParam);
79 yutakakn 2728 }
80    
81     static void init_password_control(HWND dlg)
82     {
83     HWND passwordControl = GetDlgItem(dlg, IDC_SSHPASSWORD);
84    
85     SetWindowLong(passwordControl, GWL_USERDATA,
86 maya 3003 SetWindowLong(passwordControl, GWL_WNDPROC,
87     (LONG) password_wnd_proc));
88 yutakakn 2728
89     SetFocus(passwordControl);
90     }
91    
92     static void set_auth_options_status(HWND dlg, int controlID)
93     {
94     BOOL RSA_enabled = controlID == IDC_SSHUSERSA;
95     BOOL rhosts_enabled = controlID == IDC_SSHUSERHOSTS;
96     BOOL TIS_enabled = controlID == IDC_SSHUSETIS;
97     int i;
98    
99     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, controlID);
100    
101     EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), !TIS_enabled);
102     EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), !TIS_enabled);
103    
104     for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {
105     EnableWindow(GetDlgItem(dlg, i), RSA_enabled);
106     }
107    
108     for (i = IDC_LOCALUSERNAMELABEL; i <= IDC_HOSTRSAFILENAME; i++) {
109     EnableWindow(GetDlgItem(dlg, i), rhosts_enabled);
110     }
111     }
112    
113     static void init_auth_machine_banner(PTInstVar pvar, HWND dlg)
114     {
115 maya 2994 char buf[1024], buf2[1024];
116    
117 maya 2937 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf2, sizeof(buf2));
118 maya 2992 _snprintf_s(buf, sizeof(buf), _TRUNCATE, buf2, SSH_get_host_name(pvar));
119 yutakakn 2728 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf);
120     }
121    
122     static void update_server_supported_types(PTInstVar pvar, HWND dlg)
123     {
124     int supported_methods = pvar->auth_state.supported_types;
125     int cur_control = -1;
126     int control;
127     HWND focus = GetFocus();
128    
129     if (supported_methods == 0) {
130     return;
131     }
132    
133     for (control = IDC_SSHUSEPASSWORD; control <= MAX_AUTH_CONTROL;
134 maya 3003 control++) {
135 yutakakn 2728 BOOL enabled = FALSE;
136     int method;
137     HWND item = GetDlgItem(dlg, control);
138    
139     if (item != NULL) {
140     for (method = 0; method <= SSH_AUTH_MAX; method++) {
141     if (auth_types_to_control_IDs[method] == control
142 maya 3003 && (supported_methods & (1 << method)) != 0) {
143     enabled = TRUE;
144 yutakakn 2728 }
145     }
146    
147     EnableWindow(item, enabled);
148    
149     if (IsDlgButtonChecked(dlg, control)) {
150     cur_control = control;
151     }
152     }
153     }
154    
155     if (cur_control >= 0) {
156     if (!IsWindowEnabled(GetDlgItem(dlg, cur_control))) {
157     do {
158     cur_control++;
159     if (cur_control > MAX_AUTH_CONTROL) {
160     cur_control = IDC_SSHUSEPASSWORD;
161     }
162     } while (!IsWindowEnabled(GetDlgItem(dlg, cur_control)));
163    
164     set_auth_options_status(dlg, cur_control);
165    
166     if (focus != NULL && !IsWindowEnabled(focus)) {
167     SetFocus(GetDlgItem(dlg, cur_control));
168     }
169     }
170     }
171     }
172    
173     static void init_auth_dlg(PTInstVar pvar, HWND dlg)
174     {
175     int default_method = pvar->session_settings.DefaultAuthMethod;
176 maya 2994 char uimsg[MAX_UIMSG];
177 yutakakn 2728
178 maya 2994 GetWindowText(dlg, uimsg, sizeof(uimsg));
179     UTIL_get_lang_msg("DLG_AUTH_TITLE", pvar, uimsg);
180 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
181 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));
182     UTIL_get_lang_msg("DLG_AUTH_BANNER", pvar, uimsg);
183 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
184 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, uimsg, sizeof(uimsg));
185     UTIL_get_lang_msg("DLG_AUTH_BANNER2", pvar, uimsg);
186 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg);
187 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg));
188     UTIL_get_lang_msg("DLG_AUTH_USERNAME", pvar, uimsg);
189 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
190 maya 2994 GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, uimsg, sizeof(uimsg));
191     UTIL_get_lang_msg("DLG_AUTH_PASSWORD", pvar, uimsg);
192 maya 2937 SetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg);
193 maya 2994 GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, uimsg, sizeof(uimsg));
194     UTIL_get_lang_msg("DLG_AUTH_REMEMBER_PASSWORD", pvar, uimsg);
195 maya 2937 SetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg);
196 maya 2994 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg));
197     UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD", pvar, uimsg);
198 maya 2937 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
199 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg));
200     UTIL_get_lang_msg("DLG_AUTH_METHOD_RSA", pvar, uimsg);
201 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
202 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg));
203     UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar, uimsg);
204 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
205 maya 2994 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg));
206     UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg);
207 maya 2937 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
208 maya 2994 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg));
209     UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg);
210 maya 2937 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
211 maya 2994 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg));
212     UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg);
213 maya 2937 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
214 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
215     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
216 maya 2937 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
217 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
218     UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
219 maya 2937 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
220    
221 yutakakn 2728 init_auth_machine_banner(pvar, dlg);
222     init_password_control(dlg);
223    
224     if (pvar->auth_state.failed_method != SSH_AUTH_NONE) {
225     /* must be retrying a failed attempt */
226 maya 2994 UTIL_get_lang_msg("DLG_AUTH_BANNER2_FAILED", pvar, "Authentication failed. Please retry.");
227     SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg);
228     UTIL_get_lang_msg("DLG_AUTH_TITLE_FAILED", pvar, "Retrying SSH Authentication");
229 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
230 yutakakn 2728 default_method = pvar->auth_state.failed_method;
231     }
232    
233     set_auth_options_status(dlg,
234 maya 3003 auth_types_to_control_IDs[default_method]);
235 yutakakn 2728
236     if (default_method == SSH_AUTH_TIS) {
237     /* we disabled the password control, so fix the focus */
238     SetFocus(GetDlgItem(dlg, IDC_SSHUSETIS));
239     }
240    
241     if (pvar->auth_state.user != NULL) {
242     SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);
243     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
244     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
245     } else if (pvar->session_settings.DefaultUserName[0] != 0) {
246     SetDlgItemText(dlg, IDC_SSHUSERNAME,
247 maya 3003 pvar->session_settings.DefaultUserName);
248 yutakakn 2728 } else {
249     SetFocus(GetDlgItem(dlg, IDC_SSHUSERNAME));
250     }
251    
252     SetDlgItemText(dlg, IDC_RSAFILENAME,
253 maya 3003 pvar->session_settings.DefaultRSAPrivateKeyFile);
254 yutakakn 2728 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
255 maya 3003 pvar->session_settings.DefaultRhostsHostPrivateKeyFile);
256 yutakakn 2728 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
257 maya 3003 pvar->session_settings.DefaultRhostsLocalUserName);
258 yutakakn 2728
259     update_server_supported_types(pvar, dlg);
260 yutakakn 2739
261 yutakakn 2784 // SSH2 autologin
262 yutakakn 2739 // ���[�U�A�p�X���[�h�A�F�����\�b�h���������������A������������OK�{�^�������������B
263 yutakakn 2784 //
264     // (2004.12.1 yutaka)
265     // (2005.1.26 yutaka) ���J���F���T�|�[�g
266 maya 2908 // �������O�C���������������A�������������������X���\ (2006.9.18 maya)
267     #if 0
268 yutakakn 2739 if (pvar->ssh2_autologin == 1) {
269 maya 2908 #endif
270     if (strlen(pvar->ssh2_username) > 0) {
271     SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username);
272     }
273     if (pvar->ssh2_autologin == 1) {
274     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
275     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
276     }
277 yutakakn 2739
278     SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password);
279 maya 2908 if (pvar->ssh2_autologin == 1) {
280     EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
281     EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);
282     }
283 yutakakn 2739
284 yutakakn 2844 // '/I' �w�������������������������� (2005.9.5 yutaka)
285     if (pvar->ts->Minimize) {
286     //20050822���� start T.Takahashi
287     ShowWindow(dlg,SW_MINIMIZE);
288     //20050822���� end T.Takahashi
289     }
290    
291 yutakakn 2784 if (pvar->ssh2_authmethod == SSH_AUTH_PASSWORD) {
292 yutakakn 2739 CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPASSWORD);
293 yutakakn 2784
294     } else if (pvar->ssh2_authmethod == SSH_AUTH_RSA) {
295     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSERSA);
296    
297     SetDlgItemText(dlg, IDC_RSAFILENAME, pvar->ssh2_keyfile);
298 maya 2908 if (pvar->ssh2_autologin == 1) {
299     EnableWindow(GetDlgItem(dlg, IDC_CHOOSERSAFILE), FALSE);
300     EnableWindow(GetDlgItem(dlg, IDC_RSAFILENAME), FALSE);
301     }
302 yutakakn 2784
303 maya 3028 // /auth=challenge ������ (2007.10.5 maya)
304 maya 3025 } else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {
305     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS);
306     EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
307     SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
308    
309 yutakakn 2739 } else {
310     // TODO
311    
312     }
313 maya 3025
314 yasuhide 2963 if (pvar->ask4passwd == 1) {
315     SetFocus(GetDlgItem(dlg, IDC_SSHPASSWORD));
316     }
317 maya 2908 #if 0
318 yutakakn 2739 }
319 maya 2908 #endif
320 yutakakn 2739
321 yutakakn 2800 #if 1
322     if (pvar->settings.ssh_protocol_version == 1) {
323 maya 2994 UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE1", pvar,
324 maya 3003 "Use challenge/response to log in(&TIS)");
325 maya 2937 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
326 yutakakn 2800 } else {
327 maya 2994 UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE2", pvar,
328 maya 3003 "Use &challenge/response to log in(keyboard-interactive)");
329 maya 2937 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
330 yutakakn 2800 }
331     #endif
332    
333 yutakakn 2890 // �p�X���[�h���o���������`�F�b�N�{�b�N�X�����f�t�H���g���L�������� (2006.8.3 yutaka)
334 yutakakn 2891 if (pvar->ts_SSH->remember_password) {
335 yutakakn 2890 SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_SETCHECK, BST_CHECKED, 0);
336     } else {
337     SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_SETCHECK, BST_UNCHECKED, 0);
338     }
339    
340 yutakakn 2728 }
341    
342     static char FAR *alloc_control_text(HWND ctl)
343     {
344     int len = GetWindowTextLength(ctl);
345     char FAR *result = malloc(len + 1);
346    
347     if (result != NULL) {
348     GetWindowText(ctl, result, len + 1);
349     result[len] = 0;
350     }
351    
352     return result;
353     }
354    
355 maya 2937 static int get_key_file_name(HWND parent, char FAR * buf, int bufsize, PTInstVar pvar)
356 yutakakn 2728 {
357     OPENFILENAME params;
358     char fullname_buf[2048] = "identity";
359 maya 2937 char filter[MAX_UIMSG];
360 yutakakn 2728
361 yutakakn 2762 ZeroMemory(&params, sizeof(params));
362 yutakakn 2728 params.lStructSize = sizeof(OPENFILENAME);
363     params.hwndOwner = parent;
364 yutakakn 2762 // �t�B���^������ (2004.12.19 yutaka)
365 yutakakn 2818 // 3�t�@�C���t�B���^������ (2005.4.26 yutaka)
366 maya 2994 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_FILTER", pvar,
367 maya 3003 "identity files\\0identity;id_rsa;id_dsa\\0identity(RSA1)\\0identity\\0id_rsa(SSH2)\\0id_rsa\\0id_dsa(SSH2)\\0id_dsa\\0all(*.*)\\0*.*\\0\\0");
368 maya 2937 memcpy(filter, pvar->ts->UIMsg, sizeof(filter));
369     params.lpstrFilter = filter;
370 yutakakn 2728 params.lpstrCustomFilter = NULL;
371     params.nFilterIndex = 0;
372     buf[0] = 0;
373     params.lpstrFile = fullname_buf;
374     params.nMaxFile = sizeof(fullname_buf);
375     params.lpstrFileTitle = NULL;
376     params.lpstrInitialDir = NULL;
377 maya 2994 UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_TITLE", pvar,
378 maya 3003 "Choose a file with the RSA/DSA private key");
379 maya 2937 params.lpstrTitle = pvar->ts->UIMsg;
380 yutakakn 2728 params.Flags =
381     OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
382     params.lpstrDefExt = NULL;
383    
384     if (GetOpenFileName(&params) != 0) {
385     copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf);
386     return 1;
387     } else {
388     return 0;
389     }
390     }
391    
392 maya 2937 static void choose_RSA_key_file(HWND dlg, PTInstVar pvar)
393 yutakakn 2728 {
394     char buf[1024];
395    
396 maya 2937 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
397 yutakakn 2728 SetDlgItemText(dlg, IDC_RSAFILENAME, buf);
398     }
399     }
400    
401 maya 2937 static void choose_host_RSA_key_file(HWND dlg, PTInstVar pvar)
402 yutakakn 2728 {
403     char buf[1024];
404    
405 maya 2937 if (get_key_file_name(dlg, buf, sizeof(buf), pvar)) {
406 yutakakn 2728 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME, buf);
407     }
408     }
409    
410     static BOOL end_auth_dlg(PTInstVar pvar, HWND dlg)
411     {
412     int method = SSH_AUTH_PASSWORD;
413     char FAR *password =
414     alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
415     CRYPTKeyPair FAR *key_pair = NULL;
416    
417     if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
418     method = SSH_AUTH_RSA;
419     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
420     if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
421     method = SSH_AUTH_RHOSTS_RSA;
422     } else {
423     method = SSH_AUTH_RHOSTS;
424     }
425     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
426     method = SSH_AUTH_TIS;
427     }
428    
429     if (method == SSH_AUTH_RSA || method == SSH_AUTH_RHOSTS_RSA) {
430     char buf[2048];
431     int file_ctl_ID =
432     method == SSH_AUTH_RSA ? IDC_RSAFILENAME : IDC_HOSTRSAFILENAME;
433    
434     buf[0] = 0;
435     GetDlgItemText(dlg, file_ctl_ID, buf, sizeof(buf));
436     if (buf[0] == 0) {
437 maya 2994 UTIL_get_lang_msg("MSG_KEYSPECIFY_ERROR", pvar,
438 maya 3003 "You must specify a file containing the RSA/DSA private key.");
439 maya 2937 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
440 yutakakn 2728 SetFocus(GetDlgItem(dlg, file_ctl_ID));
441     destroy_malloced_string(&password);
442     return FALSE;
443 yutakakn 2762 }
444    
445     if (SSHv1(pvar)) {
446 yutakakn 2728 BOOL invalid_passphrase = FALSE;
447    
448     key_pair = KEYFILES_read_private_key(pvar, buf, password,
449 maya 3003 &invalid_passphrase,
450     FALSE);
451 yutakakn 2728
452     if (key_pair == NULL) {
453     if (invalid_passphrase) {
454     HWND passwordCtl = GetDlgItem(dlg, IDC_SSHPASSWORD);
455    
456     SetFocus(passwordCtl);
457     SendMessage(passwordCtl, EM_SETSEL, 0, -1);
458     } else {
459     SetFocus(GetDlgItem(dlg, file_ctl_ID));
460     }
461     destroy_malloced_string(&password);
462     return FALSE;
463     }
464 yutakakn 2762
465     } else { // SSH2(yutaka)
466     BOOL invalid_passphrase = FALSE;
467 yutakakn 2769 char errmsg[256];
468 yutakakn 2762
469 yutakakn 2769 memset(errmsg, 0, sizeof(errmsg));
470 yutakakn 2784 //GetCurrentDirectory(sizeof(errmsg), errmsg);
471 yutakakn 2769
472 yutakakn 2762 key_pair = read_SSH2_private_key(pvar, buf, password,
473 maya 3003 &invalid_passphrase,
474     FALSE,
475     errmsg,
476     sizeof(errmsg)
477     );
478 yutakakn 2762
479     if (key_pair == NULL) { // read error
480 yutakakn 2769 char buf[1024];
481 maya 2994 UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar,
482 maya 3003 "read error SSH2 private key file\r\n%s");
483 maya 2992 _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, errmsg);
484 yutakakn 2769 notify_nonfatal_error(pvar, buf);
485 yasuhide 2962 // �p�X�t���[�Y���������v����������������IDC_SSHPASSWORD���t�H�[�J�X������ (2006.10.29 yasuhide)
486     if (invalid_passphrase) {
487     HWND passwordCtl = GetDlgItem(dlg, IDC_SSHPASSWORD);
488    
489     SetFocus(passwordCtl);
490     SendMessage(passwordCtl, EM_SETSEL, 0, -1);
491     } else {
492     SetFocus(GetDlgItem(dlg, file_ctl_ID));
493     }
494 yutakakn 2762 destroy_malloced_string(&password);
495     return FALSE;
496     }
497    
498 yutakakn 2728 }
499 yutakakn 2762
500 yutakakn 2728 }
501    
502     /* from here on, we cannot fail, so just munge cur_cred in place */
503     pvar->auth_state.cur_cred.method = method;
504     pvar->auth_state.cur_cred.key_pair = key_pair;
505     /* we can't change the user name once it's set. It may already have
506     been sent to the server, and it can only be sent once. */
507     if (pvar->auth_state.user == NULL) {
508     pvar->auth_state.user =
509     alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
510     }
511 yutakakn 2811
512 yutakakn 2890 // �p�X���[�h���������������������������� (2006.8.3 yutaka)
513     if (SendMessage(GetDlgItem(dlg, IDC_REMEMBER_PASSWORD), BM_GETCHECK, 0,0) == BST_CHECKED) {
514 yutakakn 2891 pvar->settings.remember_password = 1; // �o��������
515     pvar->ts_SSH->remember_password = 1;
516 yutakakn 2890 } else {
517 yutakakn 2891 pvar->settings.remember_password = 0; // ���������������Y����
518     pvar->ts_SSH->remember_password = 0;
519 yutakakn 2890 }
520    
521 yutakakn 2811 // ���J���F���������A�Z�b�V�������������p�X���[�h���g�����������������������������������B
522     // (2005.4.8 yutaka)
523     if (method == SSH_AUTH_PASSWORD || method == SSH_AUTH_RSA) {
524 yutakakn 2728 pvar->auth_state.cur_cred.password = password;
525     } else {
526     destroy_malloced_string(&password);
527     }
528     if (method == SSH_AUTH_RHOSTS || method == SSH_AUTH_RHOSTS_RSA) {
529     if (pvar->session_settings.DefaultAuthMethod != SSH_AUTH_RHOSTS) {
530 maya 2994 UTIL_get_lang_msg("MSG_RHOSTS_NOTDEFAULT_ERROR", pvar,
531 maya 3003 "Rhosts authentication will probably fail because it was not "
532     "the default authentication method.\n"
533     "To use Rhosts authentication "
534     "in TTSSH, you need to set it to be the default by restarting\n"
535     "TTSSH and selecting \"SSH Authentication...\" from the Setup menu"
536     "before connecting.");
537 maya 2937 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
538 yutakakn 2728 }
539    
540     pvar->auth_state.cur_cred.rhosts_client_user =
541     alloc_control_text(GetDlgItem(dlg, IDC_LOCALUSERNAME));
542     }
543     pvar->auth_state.auth_dialog = NULL;
544    
545     GetDlgItemText(dlg, IDC_RSAFILENAME,
546 maya 3003 pvar->session_settings.DefaultRSAPrivateKeyFile,
547     sizeof(pvar->session_settings.
548     DefaultRSAPrivateKeyFile));
549 yutakakn 2728 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
550 maya 3003 pvar->session_settings.DefaultRhostsHostPrivateKeyFile,
551     sizeof(pvar->session_settings.
552     DefaultRhostsHostPrivateKeyFile));
553 yutakakn 2728 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
554 maya 3003 pvar->session_settings.DefaultRhostsLocalUserName,
555     sizeof(pvar->session_settings.
556     DefaultRhostsLocalUserName));
557 yutakakn 2728
558     if (SSHv1(pvar)) {
559     SSH_notify_user_name(pvar);
560     SSH_notify_cred(pvar);
561     } else {
562     // for SSH2(yutaka)
563     do_SSH2_userauth(pvar);
564     }
565    
566     EndDialog(dlg, 1);
567 maya 3003 if (DlgAuthFont != NULL) {
568     DeleteObject(DlgAuthFont);
569     }
570 maya 2949
571 yutakakn 2728 return TRUE;
572     }
573    
574     static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
575 maya 3003 LPARAM lParam)
576 yutakakn 2728 {
577 maya 3029 const int IDC_TIMER1 = 300;
578     const int IDC_TIMER2 = 301;
579     const int IDC_TIMER3 = 302;
580     const int autologin_timeout = 10; // �~���b
581 yutakakn 2728 PTInstVar pvar;
582 maya 2943 LOGFONT logfont;
583     HFONT font;
584 yutakakn 2728
585     switch (msg) {
586     case WM_INITDIALOG:
587     pvar = (PTInstVar) lParam;
588     pvar->auth_state.auth_dialog = dlg;
589     SetWindowLong(dlg, DWL_USER, lParam);
590    
591     init_auth_dlg(pvar, dlg);
592 yutakakn 2739
593 maya 2943 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
594     GetObject(font, sizeof(LOGFONT), &logfont);
595 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthFont, pvar)) {
596 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
597     SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
598     SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
599 maya 2946 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
600 maya 2943 SendDlgItemMessage(dlg, IDC_SSHPASSWORDCAPTION, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
601 maya 2946 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
602 maya 2943 SendDlgItemMessage(dlg, IDC_REMEMBER_PASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
603     SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
604     SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
605     SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
606 maya 2946 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
607 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
608     SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
609 maya 2946 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
610 maya 2943 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
611 maya 2946 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
612 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
613     SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
614     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthFont, MAKELPARAM(TRUE,0));
615     }
616     else {
617     DlgAuthFont = NULL;
618     }
619    
620 yutakakn 2739 // SSH2 autologin���L�����������A�^�C�}���d�|�����B (2004.12.1 yutaka)
621     if (pvar->ssh2_autologin == 1) {
622     SetTimer(dlg, IDC_TIMER1, autologin_timeout, 0);
623     }
624 maya 3015 else {
625     // �T�|�[�g�������������\�b�h���`�F�b�N�����B(2007.9.24 maya)
626     // �������L�����A�����������s�����������A���[�U�����m����������
627     if (pvar->session_settings.CheckAuthListFirst &&
628 maya 3029 !pvar->tryed_ssh2_authlist &&
629     GetWindowTextLength(GetDlgItem(dlg, IDC_SSHUSERNAME)) > 0) {
630     SetTimer(dlg, IDC_TIMER2, autologin_timeout, 0);
631 maya 3015 }
632 maya 3029 else {
633     SetTimer(dlg, IDC_TIMER3, autologin_timeout, 0);
634     }
635 maya 3015 }
636 yutakakn 2728 return FALSE; /* because we set the focus */
637    
638 yutakakn 2739 case WM_TIMER:
639 yutakakn 2752 pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
640     // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2004.12.16 yutaka)
641 maya 3015 if (wParam == IDC_TIMER1) {
642     // �������O�C��������
643 maya 3016 if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
644     (pvar->ssh_state.status_flags & STATUS_HOST_OK)) {
645 maya 3015 KillTimer(dlg, IDC_TIMER1);
646     SendMessage(dlg, WM_COMMAND, IDOK, 0);
647     }
648 yutakakn 2752 }
649 maya 3015 else if (wParam == IDC_TIMER2) {
650     // authlist ����������
651 maya 3029 if (SSHv2(pvar)) {
652     if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
653     (pvar->ssh_state.status_flags & STATUS_HOST_OK)) {
654 maya 3015 KillTimer(dlg, IDC_TIMER2);
655 yutakakn 2739
656 maya 3029 // �_�C�A���O�����[�U������������
657     if (pvar->auth_state.user == NULL) {
658     pvar->auth_state.user =
659     alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
660     }
661    
662 maya 3015 // ���[�U�������X��������
663     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
664    
665     // none ������
666     do_SSH2_userauth(pvar);
667 maya 3029
668     // TIS �p�� OK �������^�C�}�[���d�|��������
669     // �F�������s������������������
670     // Unexpected SSH2 message �������B
671 maya 3015 }
672 maya 3029 }
673     else if (SSHv1(pvar)) {
674     KillTimer(dlg, IDC_TIMER2);
675     // TIS �p�� OK �������^�C�}�[���d�|����
676     if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {
677     SendMessage(dlg, WM_COMMAND, IDOK, 0);
678 maya 3015 }
679 maya 3029 // SSH1 ���� none ����������
680 maya 3015 }
681 maya 3029 // �v���g�R���o�[�W�����m���O������������
682 maya 3015 }
683 maya 3029 else if (wParam == IDC_TIMER3) {
684     if (SSHv2(pvar) || SSHv1(pvar)) {
685     KillTimer(dlg, IDC_TIMER3);
686     // TIS �p�� OK �������^�C�}�[���d�|����
687     if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {
688     SendMessage(dlg, WM_COMMAND, IDOK, 0);
689     }
690     }
691     // �v���g�R���o�[�W�����m���O������������
692     }
693 maya 3015 return FALSE;
694    
695 yutakakn 2728 case WM_COMMAND:
696     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
697    
698     switch (LOWORD(wParam)) {
699     case IDOK:
700 yutakakn 2783 // �F�������������������A�F���f�[�^�����M�����B�����������A�������B(2001.1.25 yutaka)
701 maya 3016 if (pvar->userauth_retry_count == 0 &&
702     ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) ||
703     !(pvar->ssh_state.status_flags & STATUS_HOST_OK))) {
704 yutakakn 2783 return FALSE;
705     }
706 maya 2943
707 yutakakn 2728 return end_auth_dlg(pvar, dlg);
708    
709     case IDCANCEL: /* kill the connection */
710     pvar->auth_state.auth_dialog = NULL;
711     notify_closed_connection(pvar);
712     EndDialog(dlg, 0);
713 maya 2943
714     if (DlgAuthFont != NULL) {
715     DeleteObject(DlgAuthFont);
716     }
717    
718 yutakakn 2728 return TRUE;
719    
720 maya 3015 case IDC_SSHUSERNAME:
721     // ���[�U�����t�H�[�J�X������������ (2007.9.29 maya)
722     if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
723 maya 3016 (pvar->ssh_state.status_flags & STATUS_HOST_OK) &&
724 maya 3015 HIWORD(wParam) == EN_KILLFOCUS) {
725     // �������L���������������s��������������
726     if (SSHv2(pvar) &&
727     pvar->session_settings.CheckAuthListFirst &&
728     !pvar->tryed_ssh2_authlist) {
729     // �_�C�A���O�����[�U�������f
730     if (pvar->auth_state.user == NULL) {
731     pvar->auth_state.user =
732     alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
733     }
734    
735 maya 3023 // ���[�U���������������������`�F�b�N����
736     if (strlen(pvar->auth_state.user) == 0) {
737     return FALSE;
738     }
739    
740 maya 3015 // ���[�U�������X��������
741     EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
742    
743     // none ������
744     do_SSH2_userauth(pvar);
745     return TRUE;
746     }
747     }
748    
749     return FALSE;
750    
751 yutakakn 2728 case IDC_SSHUSEPASSWORD:
752     case IDC_SSHUSERSA:
753     case IDC_SSHUSERHOSTS:
754     case IDC_SSHUSETIS:
755     set_auth_options_status(dlg, LOWORD(wParam));
756     return TRUE;
757    
758     case IDC_CHOOSERSAFILE:
759 maya 2937 choose_RSA_key_file(dlg, pvar);
760 yutakakn 2728 return TRUE;
761    
762     case IDC_CHOOSEHOSTRSAFILE:
763 maya 2937 choose_host_RSA_key_file(dlg, pvar);
764 yutakakn 2728 return TRUE;
765    
766     default:
767     return FALSE;
768     }
769    
770     default:
771     return FALSE;
772     }
773     }
774    
775     char FAR *AUTH_get_user_name(PTInstVar pvar)
776     {
777     return pvar->auth_state.user;
778     }
779    
780     int AUTH_set_supported_auth_types(PTInstVar pvar, int types)
781     {
782     char buf[1024];
783    
784 maya 2992 _snprintf_s(buf, sizeof(buf), _TRUNCATE,
785 maya 3003 "Server reports supported authentication method mask = %d",
786     types);
787 yutakakn 2728 buf[sizeof(buf) - 1] = 0;
788     notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE);
789    
790     if (SSHv1(pvar)) {
791     types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
792 maya 3003 | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)
793     | (1 << SSH_AUTH_TIS);
794 yutakakn 2728 } else {
795     // for SSH2(yutaka)
796 yutakakn 2762 // types &= (1 << SSH_AUTH_PASSWORD);
797     // ���J���F�����L�������� (2004.12.18 yutaka)
798 yutakakn 2800 // TIS�������BSSH2����keyboard-interactive�����������B(2005.3.12 yutaka)
799 yutakakn 2762 types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
800 maya 3003 | (1 << SSH_AUTH_TIS);
801 yutakakn 2728 }
802     pvar->auth_state.supported_types = types;
803    
804     if (types == 0) {
805 maya 2994 UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar,
806 maya 3003 "Server does not support any of the authentication options\n"
807     "provided by TTSSH. This connection will now close.");
808 maya 2937 notify_fatal_error(pvar, pvar->ts->UIMsg);
809 yutakakn 2728 return 0;
810     } else {
811     if (pvar->auth_state.auth_dialog != NULL) {
812     update_server_supported_types(pvar,
813 maya 3003 pvar->auth_state.auth_dialog);
814 yutakakn 2728 }
815    
816     return 1;
817     }
818     }
819    
820     static void start_user_auth(PTInstVar pvar)
821     {
822 yutakakn 2739 // �F���_�C�A���O���\�������� (2004.12.1 yutaka)
823 yutakakn 2728 PostMessage(pvar->NotificationWindow, WM_COMMAND, (WPARAM) ID_SSHAUTH,
824     (LPARAM) NULL);
825     pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
826     }
827    
828     static void try_default_auth(PTInstVar pvar)
829     {
830     if (pvar->session_settings.TryDefaultAuth) {
831     switch (pvar->session_settings.DefaultAuthMethod) {
832     case SSH_AUTH_RSA:{
833     BOOL invalid_passphrase;
834     char password[] = "";
835    
836     pvar->auth_state.cur_cred.key_pair
837     =
838     KEYFILES_read_private_key(pvar,
839 maya 3003 pvar->session_settings.
840     DefaultRSAPrivateKeyFile,
841     password,
842     &invalid_passphrase, TRUE);
843 yutakakn 2728 if (pvar->auth_state.cur_cred.key_pair == NULL) {
844     return;
845     } else {
846     pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
847     }
848     break;
849     }
850    
851     case SSH_AUTH_RHOSTS:
852     if (pvar->session_settings.
853     DefaultRhostsHostPrivateKeyFile[0] != 0) {
854     BOOL invalid_passphrase;
855     char password[] = "";
856    
857     pvar->auth_state.cur_cred.key_pair
858     =
859     KEYFILES_read_private_key(pvar,
860 maya 3003 pvar->session_settings.
861     DefaultRhostsHostPrivateKeyFile,
862     password,
863     &invalid_passphrase, TRUE);
864 yutakakn 2728 if (pvar->auth_state.cur_cred.key_pair == NULL) {
865     return;
866     } else {
867     pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS_RSA;
868     }
869     } else {
870     pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS;
871     }
872    
873     pvar->auth_state.cur_cred.rhosts_client_user =
874     _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
875     break;
876    
877     case SSH_AUTH_PASSWORD:
878     pvar->auth_state.cur_cred.password = _strdup("");
879     pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
880     break;
881    
882     case SSH_AUTH_TIS:
883     default:
884     return;
885     }
886    
887     pvar->auth_state.user =
888     _strdup(pvar->session_settings.DefaultUserName);
889     }
890     }
891    
892     void AUTH_notify_end_error(PTInstVar pvar)
893     {
894     if ((pvar->auth_state.flags & AUTH_START_USER_AUTH_ON_ERROR_END) != 0) {
895     start_user_auth(pvar);
896     pvar->auth_state.flags &= ~AUTH_START_USER_AUTH_ON_ERROR_END;
897     }
898     }
899    
900     void AUTH_advance_to_next_cred(PTInstVar pvar)
901     {
902     pvar->auth_state.failed_method = pvar->auth_state.cur_cred.method;
903    
904     if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
905     try_default_auth(pvar);
906    
907     if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
908     if (pvar->err_msg != NULL) {
909     pvar->auth_state.flags |=
910     AUTH_START_USER_AUTH_ON_ERROR_END;
911     } else {
912 yutakakn 2739 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
913     // �R�}���h���C���w������������
914 yutakakn 2728 start_user_auth(pvar);
915     }
916     }
917     } else {
918 yutakakn 2739 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
919     // �R�}���h���C���w������(/auth=xxxx)������
920 yutakakn 2728 start_user_auth(pvar);
921     }
922     }
923    
924     static void init_TIS_dlg(PTInstVar pvar, HWND dlg)
925     {
926 maya 2994 char uimsg[MAX_UIMSG];
927    
928     GetWindowText(dlg, uimsg, sizeof(uimsg));
929     UTIL_get_lang_msg("DLG_TIS_TITLE", pvar, uimsg);
930 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
931 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));
932     UTIL_get_lang_msg("DLG_TIS_BANNER", pvar, uimsg);
933 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
934 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
935     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
936 maya 2961 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
937 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
938     UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
939 maya 2961 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
940 maya 2937
941 yutakakn 2728 init_auth_machine_banner(pvar, dlg);
942     init_password_control(dlg);
943    
944     if (pvar->auth_state.TIS_prompt != NULL) {
945     if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
946     pvar->auth_state.TIS_prompt[10000] = 0;
947     }
948     SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
949     pvar->auth_state.TIS_prompt);
950     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
951     }
952     }
953    
954     static BOOL end_TIS_dlg(PTInstVar pvar, HWND dlg)
955     {
956     char FAR *password =
957     alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
958    
959     pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
960     pvar->auth_state.cur_cred.password = password;
961     pvar->auth_state.auth_dialog = NULL;
962    
963 yutakakn 2800 // add
964     if (SSHv2(pvar)) {
965     pvar->keyboard_interactive_password_input = 1;
966     handle_SSH2_userauth_inforeq(pvar);
967     }
968    
969 yutakakn 2728 SSH_notify_cred(pvar);
970    
971     EndDialog(dlg, 1);
972     return TRUE;
973     }
974    
975     static BOOL CALLBACK TIS_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
976 maya 3003 LPARAM lParam)
977 yutakakn 2728 {
978     PTInstVar pvar;
979 maya 2943 LOGFONT logfont;
980     HFONT font;
981 yutakakn 2728
982     switch (msg) {
983     case WM_INITDIALOG:
984     pvar = (PTInstVar) lParam;
985     pvar->auth_state.auth_dialog = dlg;
986     SetWindowLong(dlg, DWL_USER, lParam);
987    
988     init_TIS_dlg(pvar, dlg);
989 maya 2943
990     font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
991     GetObject(font, sizeof(LOGFONT), &logfont);
992 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) {
993 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
994     SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
995 maya 2946 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
996 maya 2943 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
997     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
998     }
999     else {
1000     DlgTisFont = NULL;
1001     }
1002    
1003 maya 3028 // /auth=challenge ������ (2007.10.5 maya)
1004 maya 3025 if (pvar->ssh2_autologin == 1) {
1005     SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password);
1006     SendMessage(dlg, WM_COMMAND, IDOK, 0);
1007     }
1008    
1009 yutakakn 2728 return FALSE; /* because we set the focus */
1010    
1011     case WM_COMMAND:
1012     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1013    
1014     switch (LOWORD(wParam)) {
1015     case IDOK:
1016 maya 2943 if (DlgTisFont != NULL) {
1017     DeleteObject(DlgTisFont);
1018     }
1019    
1020 yutakakn 2728 return end_TIS_dlg(pvar, dlg);
1021    
1022     case IDCANCEL: /* kill the connection */
1023     pvar->auth_state.auth_dialog = NULL;
1024     notify_closed_connection(pvar);
1025     EndDialog(dlg, 0);
1026 maya 2943
1027     if (DlgTisFont != NULL) {
1028     DeleteObject(DlgTisFont);
1029     }
1030    
1031 yutakakn 2728 return TRUE;
1032    
1033     default:
1034     return FALSE;
1035     }
1036    
1037     default:
1038     return FALSE;
1039     }
1040     }
1041    
1042     void AUTH_do_cred_dialog(PTInstVar pvar)
1043     {
1044     if (pvar->auth_state.auth_dialog == NULL) {
1045     HWND cur_active = GetActiveWindow();
1046     DLGPROC dlg_proc;
1047     LPCTSTR dialog_template;
1048    
1049     switch (pvar->auth_state.mode) {
1050     case TIS_AUTH_MODE:
1051     dialog_template = MAKEINTRESOURCE(IDD_SSHTISAUTH);
1052     dlg_proc = TIS_dlg_proc;
1053     break;
1054     case GENERIC_AUTH_MODE:
1055     default:
1056     dialog_template = MAKEINTRESOURCE(IDD_SSHAUTH);
1057     dlg_proc = auth_dlg_proc;
1058     }
1059    
1060     if (!DialogBoxParam(hInst, dialog_template,
1061 maya 3003 cur_active !=
1062     NULL ? cur_active : pvar->NotificationWindow,
1063     dlg_proc, (LPARAM) pvar) == -1) {
1064 maya 2994 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar,
1065 maya 3003 "Unable to display authentication dialog box.\n"
1066     "Connection terminated.");
1067 maya 2937 notify_fatal_error(pvar, pvar->ts->UIMsg);
1068 yutakakn 2728 }
1069     }
1070     }
1071    
1072     static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1073     {
1074 maya 2994 char uimsg[MAX_UIMSG];
1075    
1076     GetWindowText(dlg, uimsg, sizeof(uimsg));
1077     UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar, uimsg);
1078 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
1079 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));
1080     UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar, uimsg);
1081 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
1082 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg));
1083     UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar, uimsg);
1084 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
1085 maya 2994 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg));
1086     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar, uimsg);
1087 maya 2937 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
1088 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg));
1089     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar, uimsg);
1090 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
1091 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg));
1092     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar, uimsg);
1093 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
1094 maya 2994 GetDlgItemText(dlg, IDC_SSHUSETIS, uimsg, sizeof(uimsg));
1095     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar, uimsg);
1096 maya 2937 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
1097 maya 2994 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg));
1098     UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg);
1099 maya 2937 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
1100 maya 2994 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg));
1101     UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg);
1102 maya 2937 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
1103 maya 2994 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg));
1104     UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg);
1105 maya 2937 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
1106 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
1107     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
1108 maya 2937 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1109 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
1110     UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg);
1111 maya 2937 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1112    
1113 yutakakn 2728 switch (pvar->settings.DefaultAuthMethod) {
1114     case SSH_AUTH_RSA:
1115     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1116 maya 3003 IDC_SSHUSERSA);
1117 yutakakn 2728 break;
1118     case SSH_AUTH_RHOSTS:
1119     case SSH_AUTH_RHOSTS_RSA:
1120     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1121 maya 3003 IDC_SSHUSERHOSTS);
1122 yutakakn 2728 break;
1123     case SSH_AUTH_TIS:
1124     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1125 maya 3003 IDC_SSHUSETIS);
1126 yutakakn 2728 break;
1127     case SSH_AUTH_PASSWORD:
1128     default:
1129     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1130 maya 3003 IDC_SSHUSEPASSWORD);
1131 yutakakn 2728 }
1132    
1133     SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1134     SetDlgItemText(dlg, IDC_RSAFILENAME,
1135 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile);
1136 yutakakn 2728 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1137 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1138 yutakakn 2728 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1139 maya 3003 pvar->settings.DefaultRhostsLocalUserName);
1140 yutakakn 2728 }
1141    
1142     static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1143     {
1144     if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1145     pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1146     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1147     if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1148     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1149     } else {
1150     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1151     }
1152     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1153     pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1154     } else {
1155     pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1156     }
1157    
1158     GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1159 maya 3003 sizeof(pvar->settings.DefaultUserName));
1160 yutakakn 2728 GetDlgItemText(dlg, IDC_RSAFILENAME,
1161 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile,
1162     sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1163 yutakakn 2728 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1164 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1165     sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1166 yutakakn 2728 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1167 maya 3003 pvar->settings.DefaultRhostsLocalUserName,
1168     sizeof(pvar->settings.DefaultRhostsLocalUserName));
1169 yutakakn 2728
1170     EndDialog(dlg, 1);
1171     return TRUE;
1172     }
1173    
1174     static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1175     WPARAM wParam, LPARAM lParam)
1176     {
1177     PTInstVar pvar;
1178 maya 2943 LOGFONT logfont;
1179     HFONT font;
1180 yutakakn 2728
1181     switch (msg) {
1182     case WM_INITDIALOG:
1183     pvar = (PTInstVar) lParam;
1184     SetWindowLong(dlg, DWL_USER, lParam);
1185    
1186     init_default_auth_dlg(pvar, dlg);
1187 maya 2943
1188     font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1189     GetObject(font, sizeof(LOGFONT), &logfont);
1190 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1191 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1192     SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1193 maya 2946 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1194 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1195     SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1196     SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1197 maya 2946 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1198 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1199     SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1200 maya 2946 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1201 maya 2943 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1202 maya 2946 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1203 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1204     SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1205     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1206     }
1207     else {
1208     DlgAuthSetupFont = NULL;
1209     }
1210    
1211 yutakakn 2728 return TRUE; /* because we do not set the focus */
1212    
1213     case WM_COMMAND:
1214     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1215    
1216     switch (LOWORD(wParam)) {
1217     case IDOK:
1218 maya 2943
1219     if (DlgAuthSetupFont != NULL) {
1220     DeleteObject(DlgAuthSetupFont);
1221     }
1222    
1223 yutakakn 2728 return end_default_auth_dlg(pvar, dlg);
1224    
1225     case IDCANCEL:
1226     EndDialog(dlg, 0);
1227 maya 2943
1228     if (DlgAuthSetupFont != NULL) {
1229     DeleteObject(DlgAuthSetupFont);
1230     }
1231    
1232 yutakakn 2728 return TRUE;
1233    
1234     case IDC_CHOOSERSAFILE:
1235 maya 2937 choose_RSA_key_file(dlg, pvar);
1236 yutakakn 2728 return TRUE;
1237    
1238     case IDC_CHOOSEHOSTRSAFILE:
1239 maya 2937 choose_host_RSA_key_file(dlg, pvar);
1240 yutakakn 2728 return TRUE;
1241    
1242     default:
1243     return FALSE;
1244     }
1245    
1246     default:
1247     return FALSE;
1248     }
1249     }
1250    
1251     void AUTH_init(PTInstVar pvar)
1252     {
1253     pvar->auth_state.failed_method = SSH_AUTH_NONE;
1254     pvar->auth_state.auth_dialog = NULL;
1255     pvar->auth_state.user = NULL;
1256     pvar->auth_state.flags = 0;
1257     pvar->auth_state.TIS_prompt = NULL;
1258     pvar->auth_state.supported_types = 0;
1259     pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1260     pvar->auth_state.cur_cred.password = NULL;
1261     pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1262     pvar->auth_state.cur_cred.key_pair = NULL;
1263     AUTH_set_generic_mode(pvar);
1264     }
1265    
1266     void AUTH_set_generic_mode(PTInstVar pvar)
1267     {
1268     pvar->auth_state.mode = GENERIC_AUTH_MODE;
1269     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1270     }
1271    
1272     void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1273     {
1274     if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1275     pvar->auth_state.mode = TIS_AUTH_MODE;
1276    
1277     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1278     pvar->auth_state.TIS_prompt = malloc(len + 1);
1279     memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1280     pvar->auth_state.TIS_prompt[len] = 0;
1281     } else {
1282     AUTH_set_generic_mode(pvar);
1283     }
1284     }
1285    
1286     void AUTH_do_default_cred_dialog(PTInstVar pvar)
1287     {
1288     HWND cur_active = GetActiveWindow();
1289    
1290     if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1291 maya 3003 cur_active != NULL ? cur_active
1292     : pvar->NotificationWindow,
1293     default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1294 maya 2994 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar,
1295 maya 3003 "Unable to display authentication setup dialog box.");
1296 maya 2937 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1297 yutakakn 2728 }
1298     }
1299    
1300     void AUTH_destroy_cur_cred(PTInstVar pvar)
1301     {
1302     destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1303     destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1304     if (pvar->auth_state.cur_cred.key_pair != NULL) {
1305     CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1306     pvar->auth_state.cur_cred.key_pair = NULL;
1307     }
1308     }
1309    
1310     static char FAR *get_auth_method_name(SSHAuthMethod auth)
1311     {
1312     switch (auth) {
1313     case SSH_AUTH_PASSWORD:
1314     return "password";
1315     case SSH_AUTH_RSA:
1316     return "RSA";
1317     case SSH_AUTH_RHOSTS:
1318     return "rhosts";
1319     case SSH_AUTH_RHOSTS_RSA:
1320     return "rhosts with RSA";
1321     case SSH_AUTH_TIS:
1322     return "challenge/response (TIS)";
1323     default:
1324     return "unknown method";
1325     }
1326     }
1327    
1328     void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1329     {
1330 yutakakn 2782 char *method = "unknown";
1331    
1332 yutakakn 2728 if (pvar->auth_state.user == NULL) {
1333 maya 2992 strncpy_s(dest, len, "None", _TRUNCATE);
1334 yutakakn 2728 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1335 yutakakn 2762 if (SSHv1(pvar)) {
1336 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1337 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1338 maya 3003 get_auth_method_name(pvar->auth_state.cur_cred.method));
1339 yutakakn 2762
1340 yutakakn 2800 } else {
1341     // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1342     // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1343     if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1344     pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1345 yutakakn 2782 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1346 maya 3011 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1347 yutakakn 2782 method = "keyboard-interactive";
1348     } else {
1349     method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1350     }
1351 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1352 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1353 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1354 yutakakn 2782
1355 yutakakn 2762 } else {
1356     if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1357     method = "RSA";
1358     } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1359     method = "DSA";
1360     }
1361 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1362 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1363 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1364 yutakakn 2762 }
1365    
1366     }
1367    
1368 yutakakn 2728 } else {
1369 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1370 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1371 maya 3003 get_auth_method_name(pvar->auth_state.failed_method));
1372 yutakakn 2728 }
1373    
1374     dest[len - 1] = 0;
1375     }
1376    
1377     void AUTH_notify_disconnecting(PTInstVar pvar)
1378     {
1379     if (pvar->auth_state.auth_dialog != NULL) {
1380     PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1381     /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1382     EnableWindow(pvar->NotificationWindow, TRUE);
1383     }
1384     }
1385    
1386     void AUTH_end(PTInstVar pvar)
1387     {
1388     destroy_malloced_string(&pvar->auth_state.user);
1389     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1390    
1391     AUTH_destroy_cur_cred(pvar);
1392     }

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