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 3063 - (hide annotations) (download) (as text)
Sat Nov 3 13:34:24 2007 UTC (16 years, 5 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 46590 byte(s)
"CheckAuthListFirst" のためのチェックボックスを "SSH Authentication" ダイアログに追加した。

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 3063 GetDlgItemText(dlg, IDC_CHECKAUTH, uimsg, sizeof(uimsg));
1107     UTIL_get_lang_msg("DLG_AUTHSETUP_CHECKAUTH", pvar, uimsg);
1108     SetDlgItemText(dlg, IDC_CHECKAUTH, pvar->ts->UIMsg);
1109 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
1110     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
1111 maya 2937 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1112 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
1113     UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg);
1114 maya 2937 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1115    
1116 yutakakn 2728 switch (pvar->settings.DefaultAuthMethod) {
1117     case SSH_AUTH_RSA:
1118     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1119 maya 3003 IDC_SSHUSERSA);
1120 yutakakn 2728 break;
1121     case SSH_AUTH_RHOSTS:
1122     case SSH_AUTH_RHOSTS_RSA:
1123     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1124 maya 3003 IDC_SSHUSERHOSTS);
1125 yutakakn 2728 break;
1126     case SSH_AUTH_TIS:
1127     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1128 maya 3003 IDC_SSHUSETIS);
1129 yutakakn 2728 break;
1130     case SSH_AUTH_PASSWORD:
1131     default:
1132     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1133 maya 3003 IDC_SSHUSEPASSWORD);
1134 yutakakn 2728 }
1135    
1136     SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1137     SetDlgItemText(dlg, IDC_RSAFILENAME,
1138 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile);
1139 yutakakn 2728 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1140 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1141 yutakakn 2728 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1142 maya 3003 pvar->settings.DefaultRhostsLocalUserName);
1143 maya 3063
1144     if (pvar->settings.CheckAuthListFirst) {
1145     CheckDlgButton(dlg, IDC_CHECKAUTH, TRUE);
1146     }
1147 yutakakn 2728 }
1148    
1149     static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1150     {
1151     if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1152     pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1153     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1154     if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1155     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1156     } else {
1157     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1158     }
1159     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1160     pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1161     } else {
1162     pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1163     }
1164    
1165     GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1166 maya 3003 sizeof(pvar->settings.DefaultUserName));
1167 yutakakn 2728 GetDlgItemText(dlg, IDC_RSAFILENAME,
1168 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile,
1169     sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1170 yutakakn 2728 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1171 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1172     sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1173 yutakakn 2728 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1174 maya 3003 pvar->settings.DefaultRhostsLocalUserName,
1175     sizeof(pvar->settings.DefaultRhostsLocalUserName));
1176 yutakakn 2728
1177 maya 3063 if (IsDlgButtonChecked(dlg, IDC_CHECKAUTH)) {
1178     pvar->settings.CheckAuthListFirst = TRUE;
1179     }
1180     else {
1181     pvar->settings.CheckAuthListFirst = FALSE;
1182     }
1183    
1184 yutakakn 2728 EndDialog(dlg, 1);
1185     return TRUE;
1186     }
1187    
1188     static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1189     WPARAM wParam, LPARAM lParam)
1190     {
1191     PTInstVar pvar;
1192 maya 2943 LOGFONT logfont;
1193     HFONT font;
1194 yutakakn 2728
1195     switch (msg) {
1196     case WM_INITDIALOG:
1197     pvar = (PTInstVar) lParam;
1198     SetWindowLong(dlg, DWL_USER, lParam);
1199    
1200     init_default_auth_dlg(pvar, dlg);
1201 maya 2943
1202     font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1203     GetObject(font, sizeof(LOGFONT), &logfont);
1204 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1205 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1206     SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1207 maya 2946 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1208 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1209     SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1210     SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1211 maya 2946 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1212 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1213     SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1214 maya 2946 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1215 maya 2943 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1216 maya 2946 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1217 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1218 maya 3063 SendDlgItemMessage(dlg, IDC_CHECKAUTH, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1219 maya 2943 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1220     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1221     }
1222     else {
1223     DlgAuthSetupFont = NULL;
1224     }
1225    
1226 yutakakn 2728 return TRUE; /* because we do not set the focus */
1227    
1228     case WM_COMMAND:
1229     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1230    
1231     switch (LOWORD(wParam)) {
1232     case IDOK:
1233 maya 2943
1234     if (DlgAuthSetupFont != NULL) {
1235     DeleteObject(DlgAuthSetupFont);
1236     }
1237    
1238 yutakakn 2728 return end_default_auth_dlg(pvar, dlg);
1239    
1240     case IDCANCEL:
1241     EndDialog(dlg, 0);
1242 maya 2943
1243     if (DlgAuthSetupFont != NULL) {
1244     DeleteObject(DlgAuthSetupFont);
1245     }
1246    
1247 yutakakn 2728 return TRUE;
1248    
1249     case IDC_CHOOSERSAFILE:
1250 maya 2937 choose_RSA_key_file(dlg, pvar);
1251 yutakakn 2728 return TRUE;
1252    
1253     case IDC_CHOOSEHOSTRSAFILE:
1254 maya 2937 choose_host_RSA_key_file(dlg, pvar);
1255 yutakakn 2728 return TRUE;
1256    
1257     default:
1258     return FALSE;
1259     }
1260    
1261     default:
1262     return FALSE;
1263     }
1264     }
1265    
1266     void AUTH_init(PTInstVar pvar)
1267     {
1268     pvar->auth_state.failed_method = SSH_AUTH_NONE;
1269     pvar->auth_state.auth_dialog = NULL;
1270     pvar->auth_state.user = NULL;
1271     pvar->auth_state.flags = 0;
1272     pvar->auth_state.TIS_prompt = NULL;
1273     pvar->auth_state.supported_types = 0;
1274     pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1275     pvar->auth_state.cur_cred.password = NULL;
1276     pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1277     pvar->auth_state.cur_cred.key_pair = NULL;
1278     AUTH_set_generic_mode(pvar);
1279     }
1280    
1281     void AUTH_set_generic_mode(PTInstVar pvar)
1282     {
1283     pvar->auth_state.mode = GENERIC_AUTH_MODE;
1284     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1285     }
1286    
1287     void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1288     {
1289     if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1290     pvar->auth_state.mode = TIS_AUTH_MODE;
1291    
1292     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1293     pvar->auth_state.TIS_prompt = malloc(len + 1);
1294     memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1295     pvar->auth_state.TIS_prompt[len] = 0;
1296     } else {
1297     AUTH_set_generic_mode(pvar);
1298     }
1299     }
1300    
1301     void AUTH_do_default_cred_dialog(PTInstVar pvar)
1302     {
1303     HWND cur_active = GetActiveWindow();
1304    
1305     if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1306 maya 3003 cur_active != NULL ? cur_active
1307     : pvar->NotificationWindow,
1308     default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1309 maya 2994 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar,
1310 maya 3003 "Unable to display authentication setup dialog box.");
1311 maya 2937 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1312 yutakakn 2728 }
1313     }
1314    
1315     void AUTH_destroy_cur_cred(PTInstVar pvar)
1316     {
1317     destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1318     destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1319     if (pvar->auth_state.cur_cred.key_pair != NULL) {
1320     CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1321     pvar->auth_state.cur_cred.key_pair = NULL;
1322     }
1323     }
1324    
1325     static char FAR *get_auth_method_name(SSHAuthMethod auth)
1326     {
1327     switch (auth) {
1328     case SSH_AUTH_PASSWORD:
1329     return "password";
1330     case SSH_AUTH_RSA:
1331     return "RSA";
1332     case SSH_AUTH_RHOSTS:
1333     return "rhosts";
1334     case SSH_AUTH_RHOSTS_RSA:
1335     return "rhosts with RSA";
1336     case SSH_AUTH_TIS:
1337     return "challenge/response (TIS)";
1338     default:
1339     return "unknown method";
1340     }
1341     }
1342    
1343     void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1344     {
1345 yutakakn 2782 char *method = "unknown";
1346    
1347 yutakakn 2728 if (pvar->auth_state.user == NULL) {
1348 maya 2992 strncpy_s(dest, len, "None", _TRUNCATE);
1349 yutakakn 2728 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1350 yutakakn 2762 if (SSHv1(pvar)) {
1351 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1352 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1353 maya 3003 get_auth_method_name(pvar->auth_state.cur_cred.method));
1354 yutakakn 2762
1355 yutakakn 2800 } else {
1356     // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1357     // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1358     if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1359     pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1360 yutakakn 2782 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1361 maya 3011 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1362 yutakakn 2782 method = "keyboard-interactive";
1363     } else {
1364     method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1365     }
1366 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1367 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1368 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1369 yutakakn 2782
1370 yutakakn 2762 } else {
1371     if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1372     method = "RSA";
1373     } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1374     method = "DSA";
1375     }
1376 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1377 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1378 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1379 yutakakn 2762 }
1380    
1381     }
1382    
1383 yutakakn 2728 } else {
1384 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1385 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1386 maya 3003 get_auth_method_name(pvar->auth_state.failed_method));
1387 yutakakn 2728 }
1388    
1389     dest[len - 1] = 0;
1390     }
1391    
1392     void AUTH_notify_disconnecting(PTInstVar pvar)
1393     {
1394     if (pvar->auth_state.auth_dialog != NULL) {
1395     PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1396     /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1397     EnableWindow(pvar->NotificationWindow, TRUE);
1398     }
1399     }
1400    
1401     void AUTH_end(PTInstVar pvar)
1402     {
1403     destroy_malloced_string(&pvar->auth_state.user);
1404     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1405    
1406     AUTH_destroy_cur_cred(pvar);
1407     }

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