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 3023 - (hide annotations) (download) (as text)
Wed Oct 3 16:19:17 2007 UTC (16 years, 6 months ago) by maya
Original Path: ttssh2/trunk/ttxssh/auth.c
File MIME type: text/x-csrc
File size: 45055 byte(s)
認証リストの取得前にユーザ名の長さもチェックするようにした。

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

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