Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/auth.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 7611 by zmatsuo, Tue Apr 23 16:52:22 2019 UTC revision 7632 by zmatsuo, Fri Apr 26 17:18:36 2019 UTC
# Line 38  Line 38 
38  #include <fcntl.h>  #include <fcntl.h>
39  #include <stdlib.h>  #include <stdlib.h>
40  #include <errno.h>  #include <errno.h>
41    #include <Lmcons.h>             // for UNLEN
42  #include <crtdbg.h>  #include <crtdbg.h>
43    
44  #include "resource.h"  #include "resource.h"
# Line 85  typedef struct { Line 86  typedef struct {
86          WNDPROC ProcOrg;          WNDPROC ProcOrg;
87          PTInstVar pvar;          PTInstVar pvar;
88          TipWin *tipwin;          TipWin *tipwin;
89            BOOL *UseControlChar;
90  } TPasswordControlData;  } TPasswordControlData;
91    
92    static void password_wnd_proc_close_tooltip(TPasswordControlData *data)
93    {
94            if (data->tipwin != NULL) {
95                    TipWinDestroy(data->tipwin);
96                    data->tipwin = NULL;
97            }
98    }
99    
100  static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,  static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,
101                                                                                    WPARAM wParam, LPARAM lParam)                                                                                    WPARAM wParam, LPARAM lParam)
102  {  {
# Line 94  static LRESULT CALLBACK password_wnd_pro Line 104  static LRESULT CALLBACK password_wnd_pro
104          TPasswordControlData *data = (TPasswordControlData *)GetWindowLongPtr(control, GWLP_USERDATA);          TPasswordControlData *data = (TPasswordControlData *)GetWindowLongPtr(control, GWLP_USERDATA);
105          switch (msg) {          switch (msg) {
106          case WM_CHAR:          case WM_CHAR:
107                  if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) {                  if ((data->UseControlChar == NULL || *data->UseControlChar == TRUE) &&
108                            (GetKeyState(VK_CONTROL) & 0x8000) != 0)
109                    {       // 制御文字を使用する && CTRLキーが押されている
110                          TCHAR chars[] = { (TCHAR) wParam, 0 };                          TCHAR chars[] = { (TCHAR) wParam, 0 };
111    
112                          SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,                          SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,
# Line 118  static LRESULT CALLBACK password_wnd_pro Line 130  static LRESULT CALLBACK password_wnd_pro
130    
131                          return 0;                          return 0;
132                  } else {                  } else {
133                          if (data->tipwin != NULL) {                          password_wnd_proc_close_tooltip(data);
                                 TipWinDestroy(data->tipwin);  
                                 data->tipwin = NULL;  
                         }  
134                  }                  }
135                  break;                  break;
136          case WM_KILLFOCUS:          case WM_KILLFOCUS:
137                  if (data->tipwin != NULL) {                  password_wnd_proc_close_tooltip(data);
                         TipWinDestroy(data->tipwin);  
                         data->tipwin = NULL;  
                 }  
138                  break;                  break;
139          }          }
140    
# Line 137  static LRESULT CALLBACK password_wnd_pro Line 143  static LRESULT CALLBACK password_wnd_pro
143    
144          if (msg == WM_NCDESTROY) {          if (msg == WM_NCDESTROY) {
145                  SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR)data->ProcOrg);                  SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR)data->ProcOrg);
146                  if (data->tipwin != NULL) {                  password_wnd_proc_close_tooltip(data);
                         TipWinDestroy(data->tipwin);  
                         data->tipwin = NULL;  
                 }  
147                  free(data);                  free(data);
148          }          }
149    
150          return result;          return result;
151  }  }
152    
153  void init_password_control(PTInstVar pvar, HWND dlg, int item)  void init_password_control(PTInstVar pvar, HWND dlg, int item, BOOL *UseControlChar)
154  {  {
155          HWND passwordControl = GetDlgItem(dlg, item);          HWND passwordControl = GetDlgItem(dlg, item);
156          TPasswordControlData *data = (TPasswordControlData *)malloc(sizeof(TPasswordControlData));          TPasswordControlData *data = (TPasswordControlData *)malloc(sizeof(TPasswordControlData));
157          data->ProcOrg = (WNDPROC)GetWindowLongPtr(passwordControl, GWLP_WNDPROC);          data->ProcOrg = (WNDPROC)GetWindowLongPtr(passwordControl, GWLP_WNDPROC);
158          data->pvar = pvar;          data->pvar = pvar;
159          data->tipwin = NULL;          data->tipwin = NULL;
160            data->UseControlChar = UseControlChar;
161          SetWindowLongPtr(passwordControl, GWLP_WNDPROC, (LONG_PTR)password_wnd_proc);          SetWindowLongPtr(passwordControl, GWLP_WNDPROC, (LONG_PTR)password_wnd_proc);
162          SetWindowLongPtr(passwordControl, GWLP_USERDATA, (LONG_PTR)data);          SetWindowLongPtr(passwordControl, GWLP_USERDATA, (LONG_PTR)data);
163          SetFocus(passwordControl);          SetFocus(passwordControl);
# Line 171  static void set_auth_options_status(HWND Line 175  static void set_auth_options_status(HWND
175    
176          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled));          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled));
177          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled));          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled));
178          EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), (!TIS_enabled && !PAGEANT_enabled));          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), (!TIS_enabled && !PAGEANT_enabled));
179    
180          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {
181                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);
# Line 242  static void update_server_supported_type Line 246  static void update_server_supported_type
246          }          }
247  }  }
248    
249  static void init_auth_dlg(PTInstVar pvar, HWND dlg)  static void init_auth_dlg(PTInstVar pvar, HWND dlg, BOOL *UseControlChar)
250  {  {
251            const static DlgTextInfo text_info[] = {
252                    { 0, "DLG_AUTH_TITLE" },
253                    { IDC_SSHAUTHBANNER, "DLG_AUTH_BANNER" },
254                    { IDC_SSHAUTHBANNER2, "DLG_AUTH_BANNER2" },
255                    { IDC_SSHUSERNAMELABEL, "DLG_AUTH_USERNAME" },
256                    { IDC_SSHPASSWORDCAPTION, "DLG_AUTH_PASSWORD" },
257                    { IDC_REMEMBER_PASSWORD, "DLG_AUTH_REMEMBER_PASSWORD" },
258                    { IDC_FORWARD_AGENT, "DLG_AUTH_FWDAGENT" },
259                    { IDC_SSHUSEPASSWORD, "DLG_AUTH_METHOD_PASSWORD" },
260                    { IDC_SSHUSERSA, "DLG_AUTH_METHOD_RSA" },
261                    { IDC_SSHUSERHOSTS, "DLG_AUTH_METHOD_RHOST" },
262                    { IDC_SSHUSEPAGEANT, "DLG_AUTH_METHOD_PAGEANT" },
263                    { IDC_RSAFILENAMELABEL, "DLG_AUTH_PRIVATEKEY" },
264                    { IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" },
265                    { IDC_HOSTRSAFILENAMELABEL, "DLG_AUTH_HOST_PRIVATEKEY" },
266                    { IDOK, "BTN_OK" },
267                    { IDCANCEL, "BTN_DISCONNECT" },
268            };
269          int default_method = pvar->session_settings.DefaultAuthMethod;          int default_method = pvar->session_settings.DefaultAuthMethod;
         char uimsg[MAX_UIMSG];  
270    
271          GetWindowText(dlg, uimsg, sizeof(uimsg));          SetI18DlgStrs("TTSSH", dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile);
         UTIL_get_lang_msg("DLG_AUTH_TITLE", pvar, uimsg);  
         SetWindowText(dlg, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_BANNER", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_BANNER2", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_USERNAME", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_PASSWORD", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_REMEMBER_PASSWORD", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_FORWARD_AGENT, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_FWDAGENT", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_FORWARD_AGENT, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_METHOD_RSA", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_METHOD_PAGEANT", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSEPAGEANT, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("BTN_OK", pvar, uimsg);  
         SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);  
         SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);  
272    
273          init_auth_machine_banner(pvar, dlg);          init_auth_machine_banner(pvar, dlg);
274          init_password_control(pvar, dlg, IDC_SSHPASSWORD);          init_password_control(pvar, dlg, IDC_SSHPASSWORD, UseControlChar);
275    
276          // 認証失敗後はラベルを書き換え          // 認証失敗後はラベルを書き換え
277          if (pvar->auth_state.failed_method != SSH_AUTH_NONE) {          if (pvar->auth_state.failed_method != SSH_AUTH_NONE) {
# Line 333  static void init_auth_dlg(PTInstVar pvar Line 307  static void init_auth_dlg(PTInstVar pvar
307          if (pvar->auth_state.user != NULL) {          if (pvar->auth_state.user != NULL) {
308                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);
309                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
310                    EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
311                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
312          }          }
313          else if (strlen(pvar->ssh2_username) > 0) {          else if (strlen(pvar->ssh2_username) > 0) {
314                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username);                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username);
315                  if (pvar->ssh2_autologin == 1) {                  if (pvar->ssh2_autologin == 1) {
316                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
317                            EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
318                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE);
319                  }                  }
320          }          }
321          else if (pvar->session_settings.DefaultUserName[0] != 0) {          else {
322                  SetDlgItemText(dlg, IDC_SSHUSERNAME,                  switch(pvar->session_settings.DefaultUserType) {
323                                 pvar->session_settings.DefaultUserName);                  case 0:
324                            // 入力しない
325                            break;
326                    case 1:
327                            // use DefaultUserName
328                            if (pvar->session_settings.DefaultUserName[0] == 0) {
329                                    // 「入力しない」にしておく
330                                    pvar->session_settings.DefaultUserType = 0;
331                            } else {
332                                    SetDlgItemText(dlg, IDC_SSHUSERNAME,
333                                                               pvar->session_settings.DefaultUserName);
334                            }
335                            break;
336                    case 2: {
337                            TCHAR user_name[UNLEN+1];
338                            DWORD len = _countof(user_name);
339                            BOOL r = GetUserName(user_name, &len);
340                            if (r != 0) {
341                                    SetDlgItemText(dlg, IDC_SSHUSERNAME, user_name);
342                            }
343                            break;
344                    }
345                    default:
346                            // 入力しないにしておく
347                            pvar->session_settings.DefaultUserType = 0;
348                    }
349          }          }
350    
351          if (strlen(pvar->ssh2_password) > 0) {          if (strlen(pvar->ssh2_password) > 0) {
# Line 352  static void init_auth_dlg(PTInstVar pvar Line 353  static void init_auth_dlg(PTInstVar pvar
353                  if (pvar->ssh2_autologin == 1) {                  if (pvar->ssh2_autologin == 1) {
354                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
355                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);
356                          EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE);
357                  }                  }
358          }          }
359    
# Line 379  static void init_auth_dlg(PTInstVar pvar Line 380  static void init_auth_dlg(PTInstVar pvar
380          } else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {          } else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {
381                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS);                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS);
382                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
383                  EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE);
384                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
385    
386          // /auth=pageant を追加          // /auth=pageant を追加
387          } else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) {          } else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) {
388                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT);                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT);
389                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
390                  EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION), FALSE);
391                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
392    
393          } else {          } else {
# Line 798  static BOOL CALLBACK auth_dlg_proc(HWND Line 799  static BOOL CALLBACK auth_dlg_proc(HWND
799          PTInstVar pvar;          PTInstVar pvar;
800  //      LOGFONT logfont;  //      LOGFONT logfont;
801  //      HFONT font;  //      HFONT font;
802            static BOOL UseControlChar;
803            static BOOL ShowPassPhrase;
804    
805          switch (msg) {          switch (msg) {
806          case WM_INITDIALOG:          case WM_INITDIALOG:
# Line 805  static BOOL CALLBACK auth_dlg_proc(HWND Line 808  static BOOL CALLBACK auth_dlg_proc(HWND
808                  pvar->auth_state.auth_dialog = dlg;                  pvar->auth_state.auth_dialog = dlg;
809                  SetWindowLong(dlg, DWL_USER, lParam);                  SetWindowLong(dlg, DWL_USER, lParam);
810    
811                  init_auth_dlg(pvar, dlg);                  UseControlChar = TRUE;
812                    ShowPassPhrase = FALSE;
813                    init_auth_dlg(pvar, dlg, &UseControlChar);
814  #if 0  #if 0
815                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
816                  GetObject(font, sizeof(LOGFONT), &logfont);                  GetObject(font, sizeof(LOGFONT), &logfont);
# Line 836  static BOOL CALLBACK auth_dlg_proc(HWND Line 841  static BOOL CALLBACK auth_dlg_proc(HWND
841                          DlgAuthFont = NULL;                          DlgAuthFont = NULL;
842                  }                  }
843  #endif  #endif
844    
845                  // SSH2 autologinが有効の場合は、タイマを仕掛ける。 (2004.12.1 yutaka)                  // SSH2 autologinが有効の場合は、タイマを仕掛ける。 (2004.12.1 yutaka)
846                  if (pvar->ssh2_autologin == 1) {                  if (pvar->ssh2_autologin == 1) {
847                          autologin_sent_none = FALSE;                          autologin_sent_none = FALSE;
# Line 918  static BOOL CALLBACK auth_dlg_proc(HWND Line 924  static BOOL CALLBACK auth_dlg_proc(HWND
924    
925                                          // ユーザ名を変更させない                                          // ユーザ名を変更させない
926                                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
927                                            EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
928    
929                                          // 認証メソッド none を送る                                          // 認証メソッド none を送る
930                                          do_SSH2_userauth(pvar);                                          do_SSH2_userauth(pvar);
# Line 1011  canceled: Line 1018  canceled:
1018    
1019                                          // ユーザ名を変更させない                                          // ユーザ名を変更させない
1020                                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
1021                                            EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
1022    
1023                                          // 認証メソッド none を送る                                          // 認証メソッド none を送る
1024                                          do_SSH2_userauth(pvar);                                          do_SSH2_userauth(pvar);
# Line 1041  canceled: Line 1049  canceled:
1049                          pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT);                          pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT);
1050                          return TRUE;                          return TRUE;
1051    
1052                  case IDC_FROM_CLIPBOARD: {                  case IDC_SSHPASSWORD_OPTION: {
1053                          char *clipboard = GetClipboardTextA(dlg, TRUE);                          TCHAR uimsg[MAX_UIMSG];
1054                          if (clipboard != NULL) {                          HMENU hMenu= CreatePopupMenu();
1055                                  SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard);                          GetI18nStrT("TTSSH", "DLG_AUTH_PASTE_CLIPBOARD",
1056                                  free(clipboard);                                                  uimsg, _countof(uimsg),
1057                                  SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDOK), TRUE);                                                  "Paste from &clipboard",
1058                                  return FALSE;                                                  pvar->ts->UILanguageFile);
1059                            AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, uimsg);
1060                            GetI18nStrT("ttssh", "DLG_AUTH_CLEAR_CLIPBOARD",
1061                                                    uimsg, _countof(uimsg),
1062                                                    "Paste from &clipboard and cl&ear clipboard",
1063                                                    pvar->ts->UILanguageFile);
1064                            AppendMenu(hMenu, MF_ENABLED | MF_STRING, 2, uimsg);
1065                            GetI18nStrT("ttssh", "DLG_AUTH_USE_CONTORL_CHARACTERS",
1066                                                    uimsg, _countof(uimsg),
1067                                                    "Use control charac&ters",
1068                                                    pvar->ts->UILanguageFile);
1069                            AppendMenu(hMenu, MF_ENABLED | MF_STRING  | (UseControlChar ? MFS_CHECKED : 0), 3, uimsg);
1070                            GetI18nStrT("ttssh", "DLG_AUTH_SHOW_PASSPHRASE",
1071                                                    uimsg, _countof(uimsg),
1072                                                    "&Show passphrase",
1073                                                    pvar->ts->UILanguageFile);
1074                            AppendMenu(hMenu, MF_ENABLED | MF_STRING | (ShowPassPhrase ? MFS_CHECKED : 0), 4, uimsg);
1075                            RECT rect;
1076                            HWND hWndButton = GetDlgItem(dlg, IDC_SSHPASSWORD_OPTION);
1077                            GetWindowRect(hWndButton, &rect);
1078                            int result = TrackPopupMenu(hMenu, TPM_RETURNCMD, rect.left, rect.bottom, 0 , hWndButton, NULL);
1079                            DestroyMenu(hMenu);
1080                            switch(result) {
1081                            case 1:
1082                            case 2: {
1083                                    // クリップボードからペースト
1084                                    BOOL clear_clipboard = result == 2;
1085                                    char *clipboard = GetClipboardTextA(dlg, clear_clipboard);
1086                                    if (clipboard != NULL) {
1087                                            SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard);
1088                                            free(clipboard);
1089                                            SendDlgItemMessage(dlg, IDC_SSHPASSWORD, EM_SETSEL, 0, -1);
1090                                            SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHPASSWORD), TRUE);
1091                                            return FALSE;
1092                                    }
1093                                    return TRUE;
1094                            }
1095                            case 3:
1096                                    // 制御コード使用/未使用
1097                                    UseControlChar = !UseControlChar;
1098                                    break;
1099                            case 4:
1100                                    // パスフレーズ表示/非表示
1101                                    ShowPassPhrase = !ShowPassPhrase;
1102                                    {
1103                                            // 伏せ字 on/off を切り替える
1104                                            HWND hWnd = GetDlgItem(dlg, IDC_SSHPASSWORD);
1105                                            static wchar_t password_char;
1106                                            if (password_char == 0) {
1107                                                    wchar_t c = (wchar_t)SendMessage(hWnd, EM_GETPASSWORDCHAR, 0, 0);
1108                                                    password_char = c;
1109                                            }
1110                                            if (ShowPassPhrase) {
1111                                                    SendMessage(hWnd, EM_SETPASSWORDCHAR, 0, 0);
1112                                            } else {
1113    #if !defined(UNICODE)
1114                                                    if (password_char < 0x100) {
1115                                                            SendMessageA(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0);
1116                                                    } else {
1117                                                            // TODO W系直呼び ↓うまくいかない
1118                                                            //SendMessageW(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0);
1119                                                            SendMessageA(hWnd, EM_SETPASSWORDCHAR, (WPARAM)'*', 0);
1120                                                    }
1121    #else
1122                                                    SendMessageW(hWnd, EM_SETPASSWORDCHAR, (WPARAM)password_char, 0);
1123    #endif
1124                                            }
1125                                            //InvalidateRect(hWnd, NULL, TRUE);
1126                                            SendDlgItemMessage(dlg, IDC_SSHPASSWORD, EM_SETSEL, 0, -1);
1127                                            SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHPASSWORD), TRUE);
1128                                            return TRUE;
1129                                    }
1130                                    break;
1131                            }
1132                            break;
1133                    }
1134    
1135                    case IDC_USERNAME_OPTION: {
1136                            TCHAR uimsg[MAX_UIMSG];
1137                            HMENU hMenu= CreatePopupMenu();
1138                            GetI18nStrT("TTSSH", "DLG_AUTH_PASTE_WINDOWS_USERNAME",
1139                                                    uimsg, _countof(uimsg),
1140                                                    "Paste &Windows username",
1141                                                    pvar->ts->UILanguageFile);
1142                            AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, uimsg);
1143                            RECT rect;
1144                            HWND hWndButton = GetDlgItem(dlg, IDC_USERNAME_OPTION);
1145                            GetWindowRect(hWndButton, &rect);
1146                            int result = TrackPopupMenu(hMenu, TPM_RETURNCMD, rect.left, rect.bottom, 0 , hWndButton, NULL);
1147                            DestroyMenu(hMenu);
1148                            switch (result) {
1149                            case 1: {
1150                                    TCHAR user_name[UNLEN+1];
1151                                    DWORD len = _countof(user_name);
1152                                    BOOL r = GetUserName(user_name, &len);
1153                                    if (r != 0) {
1154                                            SetDlgItemText(dlg, IDC_SSHUSERNAME, user_name);
1155                                            SendDlgItemMessage(dlg, IDC_SSHUSERNAME, EM_SETSEL, 0, -1);
1156                                            SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDC_SSHUSERNAME), TRUE);
1157                                    }
1158                                    break;
1159                            }
1160                          }                          }
1161                          return TRUE;                          return TRUE;
1162                  }                  }
# Line 1225  static void init_TIS_dlg(PTInstVar pvar, Line 1334  static void init_TIS_dlg(PTInstVar pvar,
1334          SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);          SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1335    
1336          init_auth_machine_banner(pvar, dlg);          init_auth_machine_banner(pvar, dlg);
1337          init_password_control(pvar, dlg, IDC_SSHPASSWORD);          init_password_control(pvar, dlg, IDC_SSHPASSWORD, NULL);
1338    
1339          if (pvar->auth_state.TIS_prompt != NULL) {          if (pvar->auth_state.TIS_prompt != NULL) {
1340                  if (strlen(pvar->auth_state.TIS_prompt) > 10000) {                  if (strlen(pvar->auth_state.TIS_prompt) > 10000) {
# Line 1363  void AUTH_do_cred_dialog(PTInstVar pvar) Line 1472  void AUTH_do_cred_dialog(PTInstVar pvar)
1472    
1473  static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)  static void init_default_auth_dlg(PTInstVar pvar, HWND dlg)
1474  {  {
1475          char uimsg[MAX_UIMSG];          int id;
1476            TCHAR user_name[UNLEN+1];
1477            DWORD len;
1478            TCHAR uimsg[MAX_UIMSG];
1479            TCHAR uimsg2[MAX_UIMSG];
1480            const static DlgTextInfo text_info[] = {
1481                    { 0, "DLG_AUTHSETUP_TITLE" },
1482                    { IDC_SSHAUTHBANNER, "DLG_AUTHSETUP_BANNER" },
1483                    { IDC_SSH_NO_USERNAME, "DLG_AUTHSETUP_NO_USERNAME" },
1484                    { IDC_SSH_DEFAULTUSERNAME, "DLG_AUTHSETUP_USERNAME" },
1485                    { IDC_SSH_WINDOWS_USERNAME, "DLG_AUTHSETUP_SYSTEM_USERNAME" },
1486                    { IDC_SSH_WINDOWS_USERNAME_TEXT, "DLG_AUTHSETUP_SYSTEM_USERNAME_TEXT" },
1487                    { IDC_SSHUSEPASSWORD, "DLG_AUTHSETUP_METHOD_PASSWORD" },
1488                    { IDC_SSHUSERSA, "DLG_AUTHSETUP_METHOD_RSA" },
1489                    { IDC_SSHUSERHOSTS, "DLG_AUTHSETUP_METHOD_RHOST" },
1490                    { IDC_SSHUSETIS, "DLG_AUTHSETUP_METHOD_CHALLENGE" },
1491                    { IDC_SSHUSEPAGEANT, "DLG_AUTHSETUP_METHOD_PAGEANT" },
1492                    { IDC_RSAFILENAMELABEL, "DLG_AUTH_PRIVATEKEY" },
1493                    { IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" },
1494                    { IDC_HOSTRSAFILENAMELABEL, "DLG_AUTH_HOST_PRIVATEKEY" },
1495                    { IDC_CHECKAUTH, "DLG_AUTHSETUP_CHECKAUTH" },
1496                    { IDOK, "BTN_OK" },
1497                    { IDCANCEL, "BTN_CANCEL" },
1498            };
1499    
1500          GetWindowText(dlg, uimsg, sizeof(uimsg));          SetI18DlgStrs("TTSSH", dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile);
         UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar, uimsg);  
         SetWindowText(dlg, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_BANNER", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_USERNAME", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PASSWORD", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RSA", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_RHOST", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSETIS, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_CHALLENGE", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_METHOD_PAGEANT", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_SSHUSEPAGEANT, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDC_CHECKAUTH, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("DLG_AUTHSETUP_CHECKAUTH", pvar, uimsg);  
         SetDlgItemText(dlg, IDC_CHECKAUTH, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("BTN_OK", pvar, uimsg);  
         SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);  
         GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg));  
         UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg);  
         SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);  
1501    
1502          switch (pvar->settings.DefaultAuthMethod) {          switch (pvar->settings.DefaultAuthMethod) {
1503          case SSH_AUTH_RSA:          case SSH_AUTH_RSA:
# Line 1443  static void init_default_auth_dlg(PTInst Line 1534  static void init_default_auth_dlg(PTInst
1534          if (pvar->settings.CheckAuthListFirst) {          if (pvar->settings.CheckAuthListFirst) {
1535                  CheckDlgButton(dlg, IDC_CHECKAUTH, TRUE);                  CheckDlgButton(dlg, IDC_CHECKAUTH, TRUE);
1536          }          }
1537    
1538            if (pvar->session_settings.DefaultUserName[0] == 0) {
1539                    // 空なので「入力しない」にしておく
1540                    pvar->session_settings.DefaultUserType = 0;
1541            }
1542            id = pvar->settings.DefaultUserType == 1 ? IDC_SSH_DEFAULTUSERNAME :
1543                    pvar->settings.DefaultUserType == 2 ? IDC_SSH_WINDOWS_USERNAME :
1544                    IDC_SSH_NO_USERNAME;
1545            CheckRadioButton(dlg, IDC_SSH_NO_USERNAME, IDC_SSH_WINDOWS_USERNAME, id);
1546    
1547            len = _countof(user_name);
1548            GetUserName(user_name, &len);
1549    
1550            GetDlgItemText(dlg, IDC_SSH_WINDOWS_USERNAME_TEXT, uimsg, _countof(uimsg));
1551            _stprintf_s(uimsg2, _countof(uimsg2), uimsg, user_name);
1552            SetDlgItemText(dlg, IDC_SSH_WINDOWS_USERNAME_TEXT, uimsg2);
1553  }  }
1554    
1555  static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)  static BOOL end_default_auth_dlg(PTInstVar pvar, HWND dlg)
# Line 1474  static BOOL end_default_auth_dlg(PTInstV Line 1581  static BOOL end_default_auth_dlg(PTInstV
1581          GetDlgItemText(dlg, IDC_LOCALUSERNAME,          GetDlgItemText(dlg, IDC_LOCALUSERNAME,
1582                         pvar->settings.DefaultRhostsLocalUserName,                         pvar->settings.DefaultRhostsLocalUserName,
1583                         sizeof(pvar->settings.DefaultRhostsLocalUserName));                         sizeof(pvar->settings.DefaultRhostsLocalUserName));
1584            pvar->settings.DefaultUserType =
1585                    IsDlgButtonChecked(dlg, IDC_SSH_DEFAULTUSERNAME) ? 1 :
1586                    IsDlgButtonChecked(dlg, IDC_SSH_WINDOWS_USERNAME) ? 2 : 0;
1587    
1588          if (IsDlgButtonChecked(dlg, IDC_CHECKAUTH)) {          if (IsDlgButtonChecked(dlg, IDC_CHECKAUTH)) {
1589                  pvar->settings.CheckAuthListFirst = TRUE;                  pvar->settings.CheckAuthListFirst = TRUE;

Legend:
Removed from v.7611  
changed lines
  Added in v.7632

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