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

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