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 3025 - (hide annotations) (download) (as text)
Thu Oct 4 15:15:04 2007 UTC (16 years, 6 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 45715 byte(s)
/auth=challange コマンドラインパラメータを追加した。

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

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