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 7477 by doda, Wed Mar 13 03:14:00 2019 UTC revision 7507 by zmatsuo, Fri Mar 22 17:19:15 2019 UTC
# Line 41  Line 41 
41  #include "resource.h"  #include "resource.h"
42  #include "keyfiles.h"  #include "keyfiles.h"
43  #include "libputty.h"  #include "libputty.h"
44    #include "tipwin.h"
45    
46  #define AUTH_START_USER_AUTH_ON_ERROR_END 1  #define AUTH_START_USER_AUTH_ON_ERROR_END 1
47    
# Line 64  static int auth_types_to_control_IDs[] = Line 65  static int auth_types_to_control_IDs[] =
65          IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1,          IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1,
66          -1, -1, -1, -1, -1, -1, -1, -1, -1, IDC_SSHUSEPAGEANT, -1          -1, -1, -1, -1, -1, -1, -1, -1, -1, IDC_SSHUSEPAGEANT, -1
67  };  };
68    static TipWin *tipwin;
69    
70  LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,  LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,
71                                     WPARAM wParam, LPARAM lParam)                                     WPARAM wParam, LPARAM lParam)
# Line 71  LRESULT CALLBACK password_wnd_proc(HWND Line 73  LRESULT CALLBACK password_wnd_proc(HWND
73          switch (msg) {          switch (msg) {
74          case WM_CHAR:          case WM_CHAR:
75                  if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) {                  if ((GetKeyState(VK_CONTROL) & 0x8000) != 0) {
76                          char chars[] = { (char) wParam, 0 };                          TCHAR chars[] = { (TCHAR) wParam, 0 };
77    
78                          SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,                          SendMessage(control, EM_REPLACESEL, (WPARAM) TRUE,
79                                      (LPARAM) (char *) chars);                                      (LPARAM) (TCHAR *) chars);
80    
81                            if (tipwin == NULL) {
82                                    TCHAR *s;
83                                    if (wParam == 'V' - 'A' + 1) {
84                                            s = _T("制御文字を入力しています")
85                                                    _T("\n")
86                                                    _T("クリップボードからの貼り付けのショートカットはCTRL+Insertです");
87                                    } else {
88                                            s = _T("制御文字を入力しています");
89                                    }
90                                    RECT rect;
91                                    GetWindowRect(control, &rect);
92                                    tipwin = TipWinCreate(control, rect.left, rect.bottom, s);
93                            }
94    
95                          return 0;                          return 0;
96                    } else {
97                            if (tipwin != NULL) {
98                                    TipWinDestroy(tipwin);
99                                    tipwin = NULL;
100                            }
101                    }
102                    break;
103            case WM_NCDESTROY:
104                    if (tipwin != NULL) {
105                            TipWinDestroy(tipwin);
106                            tipwin = NULL;
107                  }                  }
108                    break;
109          }          }
110    
111          return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA),          return CallWindowProc((WNDPROC) GetWindowLong(control, GWL_USERDATA),
# Line 106  static void set_auth_options_status(HWND Line 135  static void set_auth_options_status(HWND
135    
136          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled));          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled));
137          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled));          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled));
138            EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), (!TIS_enabled && !PAGEANT_enabled));
139    
140          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {
141                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);
# Line 286  static void init_auth_dlg(PTInstVar pvar Line 316  static void init_auth_dlg(PTInstVar pvar
316                  if (pvar->ssh2_autologin == 1) {                  if (pvar->ssh2_autologin == 1) {
317                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
318                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE);
319                            EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);
320                  }                  }
321          }          }
322    
# Line 312  static void init_auth_dlg(PTInstVar pvar Line 343  static void init_auth_dlg(PTInstVar pvar
343          } else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {          } else if (pvar->ssh2_authmethod == SSH_AUTH_TIS) {
344                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS);                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSETIS);
345                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
346                    EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);
347                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
348    
349          // /auth=pageant を追加          // /auth=pageant を追加
350          } else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) {          } else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) {
351                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT);                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT);
352                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                  EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
353                    EnableWindow(GetDlgItem(dlg, IDC_FROM_CLIPBOARD), FALSE);
354                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");                  SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
355    
356          } else {          } else {
# Line 676  static BOOL end_auth_dlg(PTInstVar pvar, Line 709  static BOOL end_auth_dlg(PTInstVar pvar,
709          return TRUE;          return TRUE;
710  }  }
711    
712    /**
713     *      クリップボードからANSI文字列を取得する
714     *      文字列長が必要なときはstrlen()すること
715     *      @param  hWnd
716     *      @param  emtpy   TRUEのときクリップボードを空にする
717     *      @retval 文字列へのポインタ 使用後free()すること
718     *                      文字がない(またはエラー時)はNULL
719     */
720    char *GetClipboardTextA(HWND hWnd, BOOL empty)
721    {
722            HGLOBAL hGlobal;
723            const char *lpStr;
724            size_t length;
725            char *pool;
726    
727        OpenClipboard(hWnd);
728        hGlobal = (HGLOBAL)GetClipboardData(CF_TEXT);
729        if (hGlobal == NULL) {
730            CloseClipboard();
731                    return NULL;
732        }
733        lpStr = (const char *)GlobalLock(hGlobal);
734            length = GlobalSize(hGlobal);
735            if (length == 0) {
736                    pool = NULL;
737            } else {
738                    pool = (char *)malloc(length + 1);      // +1 for terminator
739                    memcpy(pool, lpStr, length);
740                    pool[length] = '\0';
741            }
742            GlobalUnlock(hGlobal);
743            if (empty) {
744                    EmptyClipboard();
745            }
746            CloseClipboard();
747    
748            return pool;
749    }
750    
751    
752  BOOL autologin_sent_none;  BOOL autologin_sent_none;
753  static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,  static BOOL CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
754                                     LPARAM lParam)                                     LPARAM lParam)
# Line 929  canceled: Line 1002  canceled:
1002                          pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT);                          pvar->session_settings.ForwardAgent = IsDlgButtonChecked(dlg, IDC_FORWARD_AGENT);
1003                          return TRUE;                          return TRUE;
1004    
1005                    case IDC_FROM_CLIPBOARD: {
1006                            char *clipboard = GetClipboardTextA(dlg, TRUE);
1007                            if (clipboard != NULL) {
1008                                    SetDlgItemTextA(dlg, IDC_SSHPASSWORD, clipboard);
1009                                    free(clipboard);
1010                                    SendMessage(dlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(dlg, IDOK), TRUE);
1011                                    return FALSE;
1012                            }
1013                            return TRUE;
1014                    }
1015    
1016                  default:                  default:
1017                          return FALSE;                          return FALSE;
1018                  }                  }

Legend:
Removed from v.7477  
changed lines
  Added in v.7507

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