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 8218 by yutakapon, Sun Sep 22 11:00:31 2019 UTC revision 8220 by zmatsuo, Mon Sep 23 11:41:18 2019 UTC
# Line 243  static void update_server_supported_type Line 243  static void update_server_supported_type
243          }          }
244  }  }
245    
 typedef struct {  
         int tab_focus_entered;  
         WNDPROC proc_org;  
         size_t str_len;  
 } username_proc_data_t;  
   
 static LRESULT CALLBACK username_proc(HWND hWnd, UINT msg,  
                                                                           WPARAM wParam, LPARAM lParam)  
 {  
         username_proc_data_t *data = (username_proc_data_t *)GetWindowLongPtr(hWnd, GWLP_USERDATA);  
         const WNDPROC ProcOrg = data->proc_org;  
         const LRESULT result = CallWindowProc(ProcOrg, hWnd, msg, wParam, lParam);  
   
   
         switch (msg) {  
         case WM_CHAR:  
         case WM_SETTEXT:  
                 if (data->tab_focus_entered == 0) {  
                         // ユーザー名が入力されていた場合、オプションを使うことはないので、  
                         // tabでのフォーカス移動時、オプションボタンをパスするようにする  
                         // 従来と同じキー操作でユーザー名とパスフレーズを入力可能とする  
                         const int len = GetWindowTextLength(hWnd);  
 #if 0  
                         if (len > 0) {  
                                 // ユーザー名を入力して、TABを押したときに引っかかった感じがする場合がある  
                                 // そこで一度でも文字入力があったら、TABストップ不要に倒す  
                                 data->tab_focus_entered = 1;  
                         }  
 #endif  
                         if ((data->str_len == 0 && len != 0) ||  
                                 (data->str_len != 0 && len == 0)) {  
                                 // ユーザー名の文字長が 0になる or 0ではなくなる 時のみ処理  
                                 const HWND dlg = GetParent(hWnd);  
                                 const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);  
                                 LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);  
   
                                 if (len > 0) {  
                                         // 不要tabstop  
                                         style = style & (~(LONG_PTR)WS_TABSTOP);  
                                 }  
                                 else {  
                                         // 要tabstop  
                                         style = style | WS_TABSTOP;  
                                 }  
                                 SetWindowLongPtr(hWndOption, GWL_STYLE, style);  
                                 data->str_len = len;  
                         }  
                 }  
                 break;  
         case WM_NCDESTROY:  
                 free(data);  
                 break;  
         }  
         return result;  
 }  
   
246  static void init_auth_dlg(PTInstVar pvar, HWND dlg, BOOL *UseControlChar)  static void init_auth_dlg(PTInstVar pvar, HWND dlg, BOOL *UseControlChar)
247  {  {
248          const static DlgTextInfo text_info[] = {          const static DlgTextInfo text_info[] = {
# Line 358  static void init_auth_dlg(PTInstVar pvar Line 302  static void init_auth_dlg(PTInstVar pvar
302                  SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
303          }          }
304    
         // usernameのサブクラス化  
         {  
                 HWND hWndUserName = GetDlgItem(dlg, IDC_SSHUSERNAME);  
                 username_proc_data_t *data = (username_proc_data_t *)malloc(sizeof(username_proc_data_t));  
                 if (data != NULL) {  
                         SetWindowLongPtr(hWndUserName, GWLP_USERDATA, (LONG_PTR)data);  
                         data->tab_focus_entered = 0;  
                         data->str_len = 0;  
                         data->proc_org =  
                                 (WNDPROC)SetWindowLongPtr(hWndUserName, GWLP_WNDPROC, (LONG_PTR)username_proc);  
                 }  
         }  
   
305          if (pvar->auth_state.user != NULL) {          if (pvar->auth_state.user != NULL) {
306                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);                  SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);
307                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
# Line 849  char *GetClipboardTextA(HWND hWnd, BOOL Line 780  char *GetClipboardTextA(HWND hWnd, BOOL
780  }  }
781    
782    
 BOOL autologin_sent_none;  
783  static INT_PTR CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,  static INT_PTR CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
784                                                                            LPARAM lParam)                                                                            LPARAM lParam)
785  {  {
# Line 858  static INT_PTR CALLBACK auth_dlg_proc(HW Line 788  static INT_PTR CALLBACK auth_dlg_proc(HW
788          const int IDC_TIMER3 = 302; // challenge で ask4passwd でCheckAuthListFirst が FALSE のとき          const int IDC_TIMER3 = 302; // challenge で ask4passwd でCheckAuthListFirst が FALSE のとき
789          const int autologin_timeout = 10; // ミリ秒          const int autologin_timeout = 10; // ミリ秒
790          PTInstVar pvar;          PTInstVar pvar;
791            static BOOL autologin_sent_none;
792          static BOOL UseControlChar;          static BOOL UseControlChar;
793          static BOOL ShowPassPhrase;          static BOOL ShowPassPhrase;
794          static HICON hIconDropdown;          static HICON hIconDropdown;
795            static size_t username_str_len;
796          TCHAR uimsg[MAX_UIMSG];          TCHAR uimsg[MAX_UIMSG];
797    
798          switch (msg) {          switch (msg) {
# Line 871  static INT_PTR CALLBACK auth_dlg_proc(HW Line 803  static INT_PTR CALLBACK auth_dlg_proc(HW
803    
804                  UseControlChar = TRUE;                  UseControlChar = TRUE;
805                  ShowPassPhrase = FALSE;                  ShowPassPhrase = FALSE;
806                    username_str_len = 0;
807                  init_auth_dlg(pvar, dlg, &UseControlChar);                  init_auth_dlg(pvar, dlg, &UseControlChar);
808    
809                  // "▼"画像をセットする                  // "▼"画像をセットする
# Line 1035  canceled: Line 968  canceled:
968                          return TRUE;                          return TRUE;
969    
970                  case IDC_SSHUSERNAME:                  case IDC_SSHUSERNAME:
971                          // ユーザ名がフォーカスを失ったとき (2007.9.29 maya)                          switch (HIWORD(wParam)) {
972                          if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&                          case EN_KILLFOCUS: {
973                              (pvar->ssh_state.status_flags & STATUS_HOST_OK) &&                                  // ユーザ名がフォーカスを失ったとき (2007.9.29 maya)
974                              HIWORD(wParam) == EN_KILLFOCUS) {                                  if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
975                                  // 設定が有効でまだ取りに行っていないなら                                          (pvar->ssh_state.status_flags & STATUS_HOST_OK)) {
976                                  if (SSHv2(pvar) &&                                          // 設定が有効でまだ取りに行っていないなら
977                                          pvar->session_settings.CheckAuthListFirst &&                                          if (SSHv2(pvar) &&
978                                          !pvar->tryed_ssh2_authlist) {                                                  pvar->session_settings.CheckAuthListFirst &&
979                                          // ダイアログのユーザ名を反映                                                  !pvar->tryed_ssh2_authlist) {
980                                          if (pvar->auth_state.user == NULL) {                                                  // ダイアログのユーザ名を反映
981                                                  pvar->auth_state.user =                                                  if (pvar->auth_state.user == NULL) {
982                                                          alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));                                                          pvar->auth_state.user =
983                                          }                                                                  alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
984                                                    }
985    
986                                          // ユーザ名が入力されているかチェックする                                                  // ユーザ名が入力されているかチェックする
987                                          if (strlen(pvar->auth_state.user) == 0) {                                                  if (strlen(pvar->auth_state.user) == 0) {
988                                                  return FALSE;                                                          return FALSE;
989                                          }                                                  }
990    
991                                          // ユーザ名を変更させない                                                  // ユーザ名を変更させない
992                                          EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);                                                  EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
993                                          EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);                                                  EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
994    
995                                          // 認証メソッド none を送る                                                  // 認証メソッド none を送る
996                                          do_SSH2_userauth(pvar);                                                  do_SSH2_userauth(pvar);
997                                          return TRUE;                                                  return TRUE;
998                                            }
999                                  }                                  }
1000                                    return FALSE;
1001                            }
1002                            case EN_CHANGE: {
1003                                    // ユーザー名が入力されていた場合、オプションを使うことはないので、
1004                                    // tabでのフォーカス移動時、オプションボタンをパスするようにする
1005                                    // 従来と同じキー操作でユーザー名とパスフレーズを入力可能とする
1006                                    HWND hWnd = (HWND)lParam;
1007                                    const int len = GetWindowTextLength(hWnd);
1008                                    if ((username_str_len == 0 && len != 0) ||
1009                                            (username_str_len != 0 && len == 0)) {
1010                                            // ユーザー名の文字長が 0になる or 0ではなくなる 時のみ処理
1011                                            const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);
1012                                            LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);
1013    
1014                                            if (len > 0) {
1015                                                    // 不要tabstop
1016                                                    style = style & (~(LONG_PTR)WS_TABSTOP);
1017                                            }
1018                                            else {
1019                                                    // 要tabstop
1020                                                    style = style | WS_TABSTOP;
1021                                            }
1022                                            SetWindowLongPtr(hWndOption, GWL_STYLE, style);
1023                                    }
1024                                    username_str_len = len;
1025                                    return FALSE;
1026                            }
1027                          }                          }
   
1028                          return FALSE;                          return FALSE;
1029    
1030                  case IDC_SSHUSEPASSWORD:                  case IDC_SSHUSEPASSWORD:

Legend:
Removed from v.8218  
changed lines
  Added in v.8220

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