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

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