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 3026 - (hide annotations) (download) (as text)
Thu Oct 4 15:18:31 2007 UTC (16 years, 6 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 45713 byte(s)
no message

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

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