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 3073 by maya, Tue Dec 11 19:33:02 2007 UTC revision 3108 by maya, Tue Feb 12 23:11:49 2008 UTC
# Line 37  SOFTWARE, EVEN IF ADVISED OF THE POSSIBI Line 37  SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
37    
38  #include "resource.h"  #include "resource.h"
39  #include "keyfiles.h"  #include "keyfiles.h"
40    #include "libputty.h"
41    
42  #define AUTH_START_USER_AUTH_ON_ERROR_END 1  #define AUTH_START_USER_AUTH_ON_ERROR_END 1
43    
44  #define MAX_AUTH_CONTROL IDC_SSHUSETIS  #define MAX_AUTH_CONTROL IDC_SSHUSEPAGEANT
45    
46  static HFONT DlgAuthFont;  static HFONT DlgAuthFont;
47  static HFONT DlgTisFont;  static HFONT DlgTisFont;
# Line 57  void destroy_malloced_string(char FAR * Line 58  void destroy_malloced_string(char FAR *
58    
59  static int auth_types_to_control_IDs[] = {  static int auth_types_to_control_IDs[] = {
60          -1, IDC_SSHUSERHOSTS, IDC_SSHUSERSA, IDC_SSHUSEPASSWORD,          -1, IDC_SSHUSERHOSTS, IDC_SSHUSERSA, IDC_SSHUSEPASSWORD,
61          IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1          IDC_SSHUSERHOSTS, IDC_SSHUSETIS, -1,
62            -1, -1, -1, -1, -1, -1, -1, -1, -1, IDC_SSHUSEPAGEANT, -1
63  };  };
64    
65  static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,  static LRESULT CALLBACK password_wnd_proc(HWND control, UINT msg,
# Line 94  static void set_auth_options_status(HWND Line 96  static void set_auth_options_status(HWND
96          BOOL RSA_enabled = controlID == IDC_SSHUSERSA;          BOOL RSA_enabled = controlID == IDC_SSHUSERSA;
97          BOOL rhosts_enabled = controlID == IDC_SSHUSERHOSTS;          BOOL rhosts_enabled = controlID == IDC_SSHUSERHOSTS;
98          BOOL TIS_enabled = controlID == IDC_SSHUSETIS;          BOOL TIS_enabled = controlID == IDC_SSHUSETIS;
99            BOOL PAGEANT_enabled = controlID == IDC_SSHUSEPAGEANT;
100          int i;          int i;
101    
102          CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, controlID);          CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, controlID);
103    
104          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), !TIS_enabled);          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), (!TIS_enabled && !PAGEANT_enabled));
105          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), !TIS_enabled);          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), (!TIS_enabled && !PAGEANT_enabled));
106    
107          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {          for (i = IDC_CHOOSERSAFILE; i <= IDC_RSAFILENAME; i++) {
108                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);                  EnableWindow(GetDlgItem(dlg, i), RSA_enabled);
# Line 304  static void init_auth_dlg(PTInstVar pvar Line 307  static void init_auth_dlg(PTInstVar pvar
307                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
308                          SetDlgItemText(dlg, IDC_SSHPASSWORD, "");                          SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
309    
310                    // /auth=pageant を追加
311                    } else if (pvar->ssh2_authmethod == SSH_AUTH_PAGEANT) {
312                            CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSEPAGEANT);
313                            EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE);
314                            SetDlgItemText(dlg, IDC_SSHPASSWORD, "");
315    
316                  } else {                  } else {
317                          // TODO                          // TODO
318    
# Line 426  static BOOL end_auth_dlg(PTInstVar pvar, Line 435  static BOOL end_auth_dlg(PTInstVar pvar,
435                  }                  }
436          } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {          } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
437                  method = SSH_AUTH_TIS;                  method = SSH_AUTH_TIS;
438            } else if (IsDlgButtonChecked(dlg, IDC_SSHUSEPAGEANT)) {
439                    method = SSH_AUTH_PAGEANT;
440          }          }
441    
442          if (method == SSH_AUTH_RSA || method == SSH_AUTH_RHOSTS_RSA) {          if (method == SSH_AUTH_RSA || method == SSH_AUTH_RHOSTS_RSA) {
# Line 500  static BOOL end_auth_dlg(PTInstVar pvar, Line 511  static BOOL end_auth_dlg(PTInstVar pvar,
511                  }                  }
512    
513          }          }
514            else if (method == SSH_AUTH_PAGEANT) {
515                    pvar->pageant_key = NULL;
516                    pvar->pageant_curkey = NULL;
517                    pvar->pageant_keylistlen = 0;
518                    pvar->pageant_keycount = 0;
519                    pvar->pageant_keycurrent = 0;
520                    pvar->pageant_keyfinal=FALSE;
521    
522                    // Pageant と通信
523                    if (SSHv1(pvar)) {
524                            pvar->pageant_keylistlen = putty_get_ssh1_keylist(&pvar->pageant_key);
525                    }
526                    else {
527                            pvar->pageant_keylistlen = putty_get_ssh2_keylist(&pvar->pageant_key);
528                    }
529                    if (pvar->pageant_keylistlen == 0) {
530                            UTIL_get_lang_msg("MSG_PAGEANT_NOTFOUND", pvar,
531                                              "Can't find Pageant.");
532                            notify_nonfatal_error(pvar, pvar->ts->UIMsg);
533    
534                            return FALSE;
535                    }
536                    pvar->pageant_curkey = pvar->pageant_key;
537    
538                    // 鍵の数
539                    pvar->pageant_keycount = get_uint32_MSBfirst(pvar->pageant_curkey);
540                    if (pvar->pageant_keycount == 0) {
541                            UTIL_get_lang_msg("MSG_PAGEANT_NOKEY", pvar,
542                                              "Pageant has no valid key.");
543                            notify_nonfatal_error(pvar, pvar->ts->UIMsg);
544    
545                            return FALSE;
546                    }
547                    pvar->pageant_curkey += 4;
548            }
549    
550          /* from here on, we cannot fail, so just munge cur_cred in place */          /* from here on, we cannot fail, so just munge cur_cred in place */
551          pvar->auth_state.cur_cred.method = method;          pvar->auth_state.cur_cred.method = method;
# Line 760  static BOOL CALLBACK auth_dlg_proc(HWND Line 806  static BOOL CALLBACK auth_dlg_proc(HWND
806                  case IDC_SSHUSERSA:                  case IDC_SSHUSERSA:
807                  case IDC_SSHUSERHOSTS:                  case IDC_SSHUSERHOSTS:
808                  case IDC_SSHUSETIS:                  case IDC_SSHUSETIS:
809                    case IDC_SSHUSEPAGEANT:
810                          set_auth_options_status(dlg, LOWORD(wParam));                          set_auth_options_status(dlg, LOWORD(wParam));
811                          return TRUE;                          return TRUE;
812    
# Line 798  int AUTH_set_supported_auth_types(PTInst Line 845  int AUTH_set_supported_auth_types(PTInst
845          if (SSHv1(pvar)) {          if (SSHv1(pvar)) {
846                  types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)                  types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
847                         | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)                         | (1 << SSH_AUTH_RHOSTS_RSA) | (1 << SSH_AUTH_RHOSTS)
848                         | (1 << SSH_AUTH_TIS);                         | (1 << SSH_AUTH_TIS) | (1 << SSH_AUTH_PAGEANT);
849          } else {          } else {
850                  // for SSH2(yutaka)                  // for SSH2(yutaka)
851  //              types &= (1 << SSH_AUTH_PASSWORD);  //              types &= (1 << SSH_AUTH_PASSWORD);
852                  // 公開鍵認証を有効にする (2004.12.18 yutaka)                  // 公開鍵認証を有効にする (2004.12.18 yutaka)
853                  // TISを追加。SSH2ではkeyboard-interactiveとして扱う。(2005.3.12 yutaka)                  // TISを追加。SSH2ではkeyboard-interactiveとして扱う。(2005.3.12 yutaka)
854                  types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)                  types &= (1 << SSH_AUTH_PASSWORD) | (1 << SSH_AUTH_RSA)
855                         | (1 << SSH_AUTH_TIS);                         | (1 << SSH_AUTH_TIS) | (1 << SSH_AUTH_PAGEANT);
856          }          }
857          pvar->auth_state.supported_types = types;          pvar->auth_state.supported_types = types;
858    
# Line 882  static void try_default_auth(PTInstVar p Line 929  static void try_default_auth(PTInstVar p
929                                  _strdup(pvar->session_settings.DefaultRhostsLocalUserName);                                  _strdup(pvar->session_settings.DefaultRhostsLocalUserName);
930                          break;                          break;
931    
932                    case SSH_AUTH_PAGEANT:
933                            pvar->auth_state.cur_cred.method = SSH_AUTH_PAGEANT;
934                            break;
935    
936                  case SSH_AUTH_PASSWORD:                  case SSH_AUTH_PASSWORD:
937                          pvar->auth_state.cur_cred.password = _strdup("");                          pvar->auth_state.cur_cred.password = _strdup("");
938                          pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;                          pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD;
# Line 1135  static void init_default_auth_dlg(PTInst Line 1186  static void init_default_auth_dlg(PTInst
1186                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1187                                   IDC_SSHUSETIS);                                   IDC_SSHUSETIS);
1188                  break;                  break;
1189            case SSH_AUTH_PAGEANT:
1190                    CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
1191                                     IDC_SSHUSEPAGEANT);
1192                    break;
1193          case SSH_AUTH_PASSWORD:          case SSH_AUTH_PASSWORD:
1194          default:          default:
1195                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,                  CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL,
# Line 1166  static BOOL end_default_auth_dlg(PTInstV Line 1221  static BOOL end_default_auth_dlg(PTInstV
1221                  }                  }
1222          } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {          } else if (IsDlgButtonChecked(dlg, IDC_SSHUSETIS)) {
1223                  pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;                  pvar->settings.DefaultAuthMethod = SSH_AUTH_TIS;
1224            } else if (IsDlgButtonChecked(dlg, IDC_SSHUSEPAGEANT)) {
1225                    pvar->settings.DefaultAuthMethod = SSH_AUTH_PAGEANT;
1226          } else {          } else {
1227                  pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;                  pvar->settings.DefaultAuthMethod = SSH_AUTH_PASSWORD;
1228          }          }
# Line 1337  static char FAR *get_auth_method_name(SS Line 1394  static char FAR *get_auth_method_name(SS
1394                  return "password";                  return "password";
1395          case SSH_AUTH_RSA:          case SSH_AUTH_RSA:
1396                  return "RSA";                  return "RSA";
1397            case SSH_AUTH_PAGEANT:
1398                    return "RSA (with Pageant)";
1399          case SSH_AUTH_RHOSTS:          case SSH_AUTH_RHOSTS:
1400                  return "rhosts";                  return "rhosts";
1401          case SSH_AUTH_RHOSTS_RSA:          case SSH_AUTH_RHOSTS_RSA:
# Line 1376  void AUTH_get_auth_info(PTInstVar pvar, Line 1435  void AUTH_get_auth_info(PTInstVar pvar,
1435                                              pvar->ts->UIMsg, pvar->auth_state.user, method);                                              pvar->ts->UIMsg, pvar->auth_state.user, method);
1436    
1437                          } else {                          } else {
1438                                  if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {                                  if (pvar->auth_state.cur_cred.method == SSH_AUTH_RSA) {
1439                                          method = "RSA";                                          if (pvar->auth_state.cur_cred.key_pair->RSA_key != NULL) {
1440                                  } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {                                                  method = "RSA";
1441                                          method = "DSA";                                          } else if (pvar->auth_state.cur_cred.key_pair->DSA_key != NULL) {
1442                                                    method = "DSA";
1443                                            }
1444                                    }
1445                                    else if (pvar->auth_state.cur_cred.method == SSH_AUTH_PAGEANT) {
1446                                            int len = get_uint32_MSBfirst(pvar->pageant_curkey + 4);
1447                                            char *s = (char *)malloc(len+1);
1448                                            enum hostkey_type keytype;
1449    
1450                                            memcpy(s, pvar->pageant_curkey+4+4, len);
1451                                            s[len] = '\0';
1452                                            keytype = get_keytype_from_name(s);
1453                                            if (keytype == KEY_RSA) {
1454                                                    method = "RSA with Pageant";
1455                                            } else if (keytype == KEY_DSA) {
1456                                                    method = "DSA with Pageant";
1457                                            }
1458                                            free(s);
1459                                  }                                  }
1460                                  UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");                                  UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s");
1461                                  _snprintf_s(dest, len, _TRUNCATE,                                  _snprintf_s(dest, len, _TRUNCATE,

Legend:
Removed from v.3073  
changed lines
  Added in v.3108

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