Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Annotation of /trunk/ttssh2/ttxssh/auth.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3029 - (hide annotations) (download) (as text)
Fri Oct 5 02:08:13 2007 UTC (16 years, 8 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 46106 byte(s)
SSH1 でうまく動かないのを修正した。
TIS で OK ボタンを自動的に押すタイミングを修正した。

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_DSA)
801     | (1 << SSH_AUTH_TIS);
802 yutakakn 2728 }
803     pvar->auth_state.supported_types = types;
804    
805     if (types == 0) {
806 maya 2994 UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar,
807 maya 3003 "Server does not support any of the authentication options\n"
808     "provided by TTSSH. This connection will now close.");
809 maya 2937 notify_fatal_error(pvar, pvar->ts->UIMsg);
810 yutakakn 2728 return 0;
811     } else {
812     if (pvar->auth_state.auth_dialog != NULL) {
813     update_server_supported_types(pvar,
814 maya 3003 pvar->auth_state.auth_dialog);
815 yutakakn 2728 }
816    
817     return 1;
818     }
819     }
820    
821     static void start_user_auth(PTInstVar pvar)
822     {
823 yutakakn 2739 // �F���_�C�A���O���\�������� (2004.12.1 yutaka)
824 yutakakn 2728 PostMessage(pvar->NotificationWindow, WM_COMMAND, (WPARAM) ID_SSHAUTH,
825     (LPARAM) NULL);
826     pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
827     }
828    
829     static void try_default_auth(PTInstVar pvar)
830     {
831     if (pvar->session_settings.TryDefaultAuth) {
832     switch (pvar->session_settings.DefaultAuthMethod) {
833     case SSH_AUTH_RSA:{
834     BOOL invalid_passphrase;
835     char password[] = "";
836    
837     pvar->auth_state.cur_cred.key_pair
838     =
839     KEYFILES_read_private_key(pvar,
840 maya 3003 pvar->session_settings.
841     DefaultRSAPrivateKeyFile,
842     password,
843     &invalid_passphrase, TRUE);
844 yutakakn 2728 if (pvar->auth_state.cur_cred.key_pair == NULL) {
845     return;
846     } else {
847     pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
848     }
849     break;
850     }
851    
852     case SSH_AUTH_RHOSTS:
853     if (pvar->session_settings.
854     DefaultRhostsHostPrivateKeyFile[0] != 0) {
855     BOOL invalid_passphrase;
856     char password[] = "";
857    
858     pvar->auth_state.cur_cred.key_pair
859     =
860     KEYFILES_read_private_key(pvar,
861 maya 3003 pvar->session_settings.
862     DefaultRhostsHostPrivateKeyFile,
863     password,
864     &invalid_passphrase, TRUE);
865 yutakakn 2728 if (pvar->auth_state.cur_cred.key_pair == NULL) {
866     return;
867     } else {
868     pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS_RSA;
869     }
870     } else {
871     pvar->auth_state.cur_cred.method = SSH_AUTH_RHOSTS;
872     }
873    
874     pvar->auth_state.cur_cred.rhosts_client_user =
875     _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
876     break;
877    
878     case SSH_AUTH_PASSWORD:
879     pvar->auth_state.cur_cred.password = _strdup("");
880     pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
881     break;
882    
883     case SSH_AUTH_TIS:
884     default:
885     return;
886     }
887    
888     pvar->auth_state.user =
889     _strdup(pvar->session_settings.DefaultUserName);
890     }
891     }
892    
893     void AUTH_notify_end_error(PTInstVar pvar)
894     {
895     if ((pvar->auth_state.flags & AUTH_START_USER_AUTH_ON_ERROR_END) != 0) {
896     start_user_auth(pvar);
897     pvar->auth_state.flags &= ~AUTH_START_USER_AUTH_ON_ERROR_END;
898     }
899     }
900    
901     void AUTH_advance_to_next_cred(PTInstVar pvar)
902     {
903     pvar->auth_state.failed_method = pvar->auth_state.cur_cred.method;
904    
905     if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
906     try_default_auth(pvar);
907    
908     if (pvar->auth_state.cur_cred.method == SSH_AUTH_NONE) {
909     if (pvar->err_msg != NULL) {
910     pvar->auth_state.flags |=
911     AUTH_START_USER_AUTH_ON_ERROR_END;
912     } else {
913 yutakakn 2739 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
914     // �R�}���h���C���w������������
915 yutakakn 2728 start_user_auth(pvar);
916     }
917     }
918     } else {
919 yutakakn 2739 // �������F���_�C�A���O���o�������� (2004.12.1 yutaka)
920     // �R�}���h���C���w������(/auth=xxxx)������
921 yutakakn 2728 start_user_auth(pvar);
922     }
923     }
924    
925     static void init_TIS_dlg(PTInstVar pvar, HWND dlg)
926     {
927 maya 2994 char uimsg[MAX_UIMSG];
928    
929     GetWindowText(dlg, uimsg, sizeof(uimsg));
930     UTIL_get_lang_msg("DLG_TIS_TITLE", pvar, uimsg);
931 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
932 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));
933     UTIL_get_lang_msg("DLG_TIS_BANNER", pvar, uimsg);
934 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
935 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
936     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
937 maya 2961 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
938 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
939     UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
940 maya 2961 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
941 maya 2937
942 yutakakn 2728 init_auth_machine_banner(pvar, dlg);
943     init_password_control(dlg);
944    
945     if (pvar->auth_state.TIS_prompt != NULL) {
946     if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
947     pvar->auth_state.TIS_prompt[10000] = 0;
948     }
949     SetDlgItemText(dlg, IDC_SSHAUTHBANNER2,
950     pvar->auth_state.TIS_prompt);
951     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
952     }
953     }
954    
955     static BOOL end_TIS_dlg(PTInstVar pvar, HWND dlg)
956     {
957     char FAR *password =
958     alloc_control_text(GetDlgItem(dlg, IDC_SSHPASSWORD));
959    
960     pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
961     pvar->auth_state.cur_cred.password = password;
962     pvar->auth_state.auth_dialog = NULL;
963    
964 yutakakn 2800 // add
965     if (SSHv2(pvar)) {
966     pvar->keyboard_interactive_password_input = 1;
967     handle_SSH2_userauth_inforeq(pvar);
968     }
969    
970 yutakakn 2728 SSH_notify_cred(pvar);
971    
972     EndDialog(dlg, 1);
973     return TRUE;
974     }
975    
976     static BOOL CALLBACK TIS_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
977 maya 3003 LPARAM lParam)
978 yutakakn 2728 {
979     PTInstVar pvar;
980 maya 2943 LOGFONT logfont;
981     HFONT font;
982 yutakakn 2728
983     switch (msg) {
984     case WM_INITDIALOG:
985     pvar = (PTInstVar) lParam;
986     pvar->auth_state.auth_dialog = dlg;
987     SetWindowLong(dlg, DWL_USER, lParam);
988    
989     init_TIS_dlg(pvar, dlg);
990 maya 2943
991     font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
992     GetObject(font, sizeof(LOGFONT), &logfont);
993 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) {
994 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
995     SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER2, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
996 maya 2946 SendDlgItemMessage(dlg, IDC_SSHPASSWORD, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
997 maya 2943 SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
998     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgTisFont, MAKELPARAM(TRUE,0));
999     }
1000     else {
1001     DlgTisFont = NULL;
1002     }
1003    
1004 maya 3028 // /auth=challenge ������ (2007.10.5 maya)
1005 maya 3025 if (pvar->ssh2_autologin == 1) {
1006     SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password);
1007     SendMessage(dlg, WM_COMMAND, IDOK, 0);
1008     }
1009    
1010 yutakakn 2728 return FALSE; /* because we set the focus */
1011    
1012     case WM_COMMAND:
1013     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1014    
1015     switch (LOWORD(wParam)) {
1016     case IDOK:
1017 maya 2943 if (DlgTisFont != NULL) {
1018     DeleteObject(DlgTisFont);
1019     }
1020    
1021 yutakakn 2728 return end_TIS_dlg(pvar, dlg);
1022    
1023     case IDCANCEL: /* kill the connection */
1024     pvar->auth_state.auth_dialog = NULL;
1025     notify_closed_connection(pvar);
1026     EndDialog(dlg, 0);
1027 maya 2943
1028     if (DlgTisFont != NULL) {
1029     DeleteObject(DlgTisFont);
1030     }
1031    
1032 yutakakn 2728 return TRUE;
1033    
1034     default:
1035     return FALSE;
1036     }
1037    
1038     default:
1039     return FALSE;
1040     }
1041     }
1042    
1043     void AUTH_do_cred_dialog(PTInstVar pvar)
1044     {
1045     if (pvar->auth_state.auth_dialog == NULL) {
1046     HWND cur_active = GetActiveWindow();
1047     DLGPROC dlg_proc;
1048     LPCTSTR dialog_template;
1049    
1050     switch (pvar->auth_state.mode) {
1051     case TIS_AUTH_MODE:
1052     dialog_template = MAKEINTRESOURCE(IDD_SSHTISAUTH);
1053     dlg_proc = TIS_dlg_proc;
1054     break;
1055     case GENERIC_AUTH_MODE:
1056     default:
1057     dialog_template = MAKEINTRESOURCE(IDD_SSHAUTH);
1058     dlg_proc = auth_dlg_proc;
1059     }
1060    
1061     if (!DialogBoxParam(hInst, dialog_template,
1062 maya 3003 cur_active !=
1063     NULL ? cur_active : pvar->NotificationWindow,
1064     dlg_proc, (LPARAM) pvar) == -1) {
1065 maya 2994 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar,
1066 maya 3003 "Unable to display authentication dialog box.\n"
1067     "Connection terminated.");
1068 maya 2937 notify_fatal_error(pvar, pvar->ts->UIMsg);
1069 yutakakn 2728 }
1070     }
1071     }
1072    
1073     static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1074     {
1075 maya 2994 char uimsg[MAX_UIMSG];
1076    
1077     GetWindowText(dlg, uimsg, sizeof(uimsg));
1078     UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar, uimsg);
1079 maya 2937 SetWindowText(dlg, pvar->ts->UIMsg);
1080 maya 2994 GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));
1081     UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar, uimsg);
1082 maya 2937 SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);
1083 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg));
1084     UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar, uimsg);
1085 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);
1086 maya 2994 GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg));
1087     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar, uimsg);
1088 maya 2937 SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);
1089 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg));
1090     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar, uimsg);
1091 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);
1092 maya 2994 GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg));
1093     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar, uimsg);
1094 maya 2937 SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);
1095 maya 2994 GetDlgItemText(dlg, IDC_SSHUSETIS, uimsg, sizeof(uimsg));
1096     UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar, uimsg);
1097 maya 2937 SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
1098 maya 2994 GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg));
1099     UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg);
1100 maya 2937 SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);
1101 maya 2994 GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg));
1102     UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg);
1103 maya 2937 SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);
1104 maya 2994 GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg));
1105     UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg);
1106 maya 2937 SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);
1107 maya 2994 GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));
1108     UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
1109 maya 2937 SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
1110 maya 2994 GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));
1111     UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg);
1112 maya 2937 SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1113    
1114 yutakakn 2728 switch (pvar->settings.DefaultAuthMethod) {
1115     case SSH_AUTH_RSA:
1116     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1117 maya 3003 IDC_SSHUSERSA);
1118 yutakakn 2728 break;
1119     case SSH_AUTH_RHOSTS:
1120     case SSH_AUTH_RHOSTS_RSA:
1121     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1122 maya 3003 IDC_SSHUSERHOSTS);
1123 yutakakn 2728 break;
1124     case SSH_AUTH_TIS:
1125     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1126 maya 3003 IDC_SSHUSETIS);
1127 yutakakn 2728 break;
1128     case SSH_AUTH_PASSWORD:
1129     default:
1130     CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1131 maya 3003 IDC_SSHUSEPASSWORD);
1132 yutakakn 2728 }
1133    
1134     SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName);
1135     SetDlgItemText(dlg, IDC_RSAFILENAME,
1136 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile);
1137 yutakakn 2728 SetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1138 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile);
1139 yutakakn 2728 SetDlgItemText(dlg, IDC_LOCALUSERNAME,
1140 maya 3003 pvar->settings.DefaultRhostsLocalUserName);
1141 yutakakn 2728 }
1142    
1143     static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
1144     {
1145     if (IsDlgButtonChecked(dlg, IDC_SSHUSERSA)) {
1146     pvar->settings.DefaultAuthMethod = SSH_AUTH_RSA;
1147     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSERHOSTS)) {
1148     if (GetWindowTextLength(GetDlgItem(dlg, IDC_HOSTRSAFILENAME)) > 0) {
1149     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS_RSA;
1150     } else {
1151     pvar->settings.DefaultAuthMethod = SSH_AUTH_RHOSTS;
1152     }
1153     } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1154     pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1155     } else {
1156     pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1157     }
1158    
1159     GetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->settings.DefaultUserName,
1160 maya 3003 sizeof(pvar->settings.DefaultUserName));
1161 yutakakn 2728 GetDlgItemText(dlg, IDC_RSAFILENAME,
1162 maya 3003 pvar->settings.DefaultRSAPrivateKeyFile,
1163     sizeof(pvar->settings.DefaultRSAPrivateKeyFile));
1164 yutakakn 2728 GetDlgItemText(dlg, IDC_HOSTRSAFILENAME,
1165 maya 3003 pvar->settings.DefaultRhostsHostPrivateKeyFile,
1166     sizeof(pvar->settings.DefaultRhostsHostPrivateKeyFile));
1167 yutakakn 2728 GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1168 maya 3003 pvar->settings.DefaultRhostsLocalUserName,
1169     sizeof(pvar->settings.DefaultRhostsLocalUserName));
1170 yutakakn 2728
1171     EndDialog(dlg, 1);
1172     return TRUE;
1173     }
1174    
1175     static BOOL CALLBACK default_auth_dlg_proc(HWND dlg, UINT msg,
1176     WPARAM wParam, LPARAM lParam)
1177     {
1178     PTInstVar pvar;
1179 maya 2943 LOGFONT logfont;
1180     HFONT font;
1181 yutakakn 2728
1182     switch (msg) {
1183     case WM_INITDIALOG:
1184     pvar = (PTInstVar) lParam;
1185     SetWindowLong(dlg, DWL_USER, lParam);
1186    
1187     init_default_auth_dlg(pvar, dlg);
1188 maya 2943
1189     font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
1190     GetObject(font, sizeof(LOGFONT), &logfont);
1191 maya 2946 if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) {
1192 maya 2943 SendDlgItemMessage(dlg, IDC_SSHAUTHBANNER, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1193     SendDlgItemMessage(dlg, IDC_SSHUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1194 maya 2946 SendDlgItemMessage(dlg, IDC_SSHUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1195 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSEPASSWORD, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1196     SendDlgItemMessage(dlg, IDC_SSHUSERSA, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1197     SendDlgItemMessage(dlg, IDC_CHOOSERSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1198 maya 2946 SendDlgItemMessage(dlg, IDC_RSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1199 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSERHOSTS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1200     SendDlgItemMessage(dlg, IDC_LOCALUSERNAMELABEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1201 maya 2946 SendDlgItemMessage(dlg, IDC_LOCALUSERNAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1202 maya 2943 SendDlgItemMessage(dlg, IDC_CHOOSEHOSTRSAFILE, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1203 maya 2946 SendDlgItemMessage(dlg, IDC_HOSTRSAFILENAME, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1204 maya 2943 SendDlgItemMessage(dlg, IDC_SSHUSETIS, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1205     SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1206     SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgAuthSetupFont, MAKELPARAM(TRUE,0));
1207     }
1208     else {
1209     DlgAuthSetupFont = NULL;
1210     }
1211    
1212 yutakakn 2728 return TRUE; /* because we do not set the focus */
1213    
1214     case WM_COMMAND:
1215     pvar = (PTInstVar) GetWindowLong(dlg, DWL_USER);
1216    
1217     switch (LOWORD(wParam)) {
1218     case IDOK:
1219 maya 2943
1220     if (DlgAuthSetupFont != NULL) {
1221     DeleteObject(DlgAuthSetupFont);
1222     }
1223    
1224 yutakakn 2728 return end_default_auth_dlg(pvar, dlg);
1225    
1226     case IDCANCEL:
1227     EndDialog(dlg, 0);
1228 maya 2943
1229     if (DlgAuthSetupFont != NULL) {
1230     DeleteObject(DlgAuthSetupFont);
1231     }
1232    
1233 yutakakn 2728 return TRUE;
1234    
1235     case IDC_CHOOSERSAFILE:
1236 maya 2937 choose_RSA_key_file(dlg, pvar);
1237 yutakakn 2728 return TRUE;
1238    
1239     case IDC_CHOOSEHOSTRSAFILE:
1240 maya 2937 choose_host_RSA_key_file(dlg, pvar);
1241 yutakakn 2728 return TRUE;
1242    
1243     default:
1244     return FALSE;
1245     }
1246    
1247     default:
1248     return FALSE;
1249     }
1250     }
1251    
1252     void AUTH_init(PTInstVar pvar)
1253     {
1254     pvar->auth_state.failed_method = SSH_AUTH_NONE;
1255     pvar->auth_state.auth_dialog = NULL;
1256     pvar->auth_state.user = NULL;
1257     pvar->auth_state.flags = 0;
1258     pvar->auth_state.TIS_prompt = NULL;
1259     pvar->auth_state.supported_types = 0;
1260     pvar->auth_state.cur_cred.method = SSH_AUTH_NONE;
1261     pvar->auth_state.cur_cred.password = NULL;
1262     pvar->auth_state.cur_cred.rhosts_client_user = NULL;
1263     pvar->auth_state.cur_cred.key_pair = NULL;
1264     AUTH_set_generic_mode(pvar);
1265     }
1266    
1267     void AUTH_set_generic_mode(PTInstVar pvar)
1268     {
1269     pvar->auth_state.mode = GENERIC_AUTH_MODE;
1270     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1271     }
1272    
1273     void AUTH_set_TIS_mode(PTInstVar pvar, char FAR * prompt, int len)
1274     {
1275     if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1276     pvar->auth_state.mode = TIS_AUTH_MODE;
1277    
1278     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1279     pvar->auth_state.TIS_prompt = malloc(len + 1);
1280     memcpy(pvar->auth_state.TIS_prompt, prompt, len);
1281     pvar->auth_state.TIS_prompt[len] = 0;
1282     } else {
1283     AUTH_set_generic_mode(pvar);
1284     }
1285     }
1286    
1287     void AUTH_do_default_cred_dialog(PTInstVar pvar)
1288     {
1289     HWND cur_active = GetActiveWindow();
1290    
1291     if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHAUTHSETUP),
1292 maya 3003 cur_active != NULL ? cur_active
1293     : pvar->NotificationWindow,
1294     default_auth_dlg_proc, (LPARAM) pvar) == -1) {
1295 maya 2994 UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar,
1296 maya 3003 "Unable to display authentication setup dialog box.");
1297 maya 2937 notify_nonfatal_error(pvar, pvar->ts->UIMsg);
1298 yutakakn 2728 }
1299     }
1300    
1301     void AUTH_destroy_cur_cred(PTInstVar pvar)
1302     {
1303     destroy_malloced_string(&pvar->auth_state.cur_cred.password);
1304     destroy_malloced_string(&pvar->auth_state.cur_cred.rhosts_client_user);
1305     if (pvar->auth_state.cur_cred.key_pair != NULL) {
1306     CRYPT_free_key_pair(pvar->auth_state.cur_cred.key_pair);
1307     pvar->auth_state.cur_cred.key_pair = NULL;
1308     }
1309     }
1310    
1311     static char FAR *get_auth_method_name(SSHAuthMethod auth)
1312     {
1313     switch (auth) {
1314     case SSH_AUTH_PASSWORD:
1315     return "password";
1316     case SSH_AUTH_RSA:
1317     return "RSA";
1318     case SSH_AUTH_RHOSTS:
1319     return "rhosts";
1320     case SSH_AUTH_RHOSTS_RSA:
1321     return "rhosts with RSA";
1322     case SSH_AUTH_TIS:
1323     return "challenge/response (TIS)";
1324     default:
1325     return "unknown method";
1326     }
1327     }
1328    
1329     void AUTH_get_auth_info(PTInstVar pvar, char FAR * dest, int len)
1330     {
1331 yutakakn 2782 char *method = "unknown";
1332    
1333 yutakakn 2728 if (pvar->auth_state.user == NULL) {
1334 maya 2992 strncpy_s(dest, len, "None", _TRUNCATE);
1335 yutakakn 2728 } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) {
1336 yutakakn 2762 if (SSHv1(pvar)) {
1337 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1338 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1339 maya 3003 get_auth_method_name(pvar->auth_state.cur_cred.method));
1340 yutakakn 2762
1341 yutakakn 2800 } else {
1342     // SSH2:�F�����\�b�h������ (2004.12.23 yutaka)
1343     // keyboard-interactive���\�b�h������ (2005.3.12 yutaka)
1344     if (pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD ||
1345     pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1346 yutakakn 2782 // keyboard-interactive���\�b�h������ (2005.1.24 yutaka)
1347 maya 3011 if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
1348 yutakakn 2782 method = "keyboard-interactive";
1349     } else {
1350     method = get_auth_method_name(pvar->auth_state.cur_cred.method);
1351     }
1352 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1353 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1354 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1355 yutakakn 2782
1356 yutakakn 2762 } else {
1357     if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1358     method = "RSA";
1359     } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1360     method = "DSA";
1361     }
1362 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1363 maya 2992 _snprintf_s(dest, len, _TRUNCATE,
1364 maya 3003 pvar->ts->UIMsg, pvar->auth_state.user, method);
1365 yutakakn 2762 }
1366    
1367     }
1368    
1369 yutakakn 2728 } else {
1370 maya 2994 UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1371 maya 2992 _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user,
1372 maya 3003 get_auth_method_name(pvar->auth_state.failed_method));
1373 yutakakn 2728 }
1374    
1375     dest[len - 1] = 0;
1376     }
1377    
1378     void AUTH_notify_disconnecting(PTInstVar pvar)
1379     {
1380     if (pvar->auth_state.auth_dialog != NULL) {
1381     PostMessage(pvar->auth_state.auth_dialog, WM_COMMAND, IDCANCEL, 0);
1382     /* the main window might not go away if it's not enabled. (see vtwin.cpp) */
1383     EnableWindow(pvar->NotificationWindow, TRUE);
1384     }
1385     }
1386    
1387     void AUTH_end(PTInstVar pvar)
1388     {
1389     destroy_malloced_string(&pvar->auth_state.user);
1390     destroy_malloced_string(&pvar->auth_state.TIS_prompt);
1391    
1392     AUTH_destroy_cur_cred(pvar);
1393     }

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