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

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