Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/ttssh2/ttxssh/hosts.c

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

revision 4542 by doda, Wed Jul 27 14:25:26 2011 UTC revision 4559 by doda, Mon Aug 1 07:21:58 2011 UTC
# Line 53  See LICENSE.TXT for the license. Line 53  See LICENSE.TXT for the license.
53    
54  #include <windns.h>  #include <windns.h>
55    
56    #define DNS_TYPE_SSHFP  44
57    typedef struct {
58            BYTE Algorithm;
59            BYTE DigestType;
60            BYTE Digest[1];
61    } DNS_SSHFP_DATA, *PDNS_SSHFP_DATA;
62    enum verifydns_result {
63            DNS_VERIFY_NONE,
64            DNS_VERIFY_NOTFOUND,
65            DNS_VERIFY_MATCH,
66            DNS_VERIFY_MISMATCH,
67            DNS_VERIFY_DIFFERENTTYPE,
68            DNS_VERIFY_AUTH_MATCH,
69            DNS_VERIFY_AUTH_MISMATCH,
70            DNS_VERIFY_AUTH_DIFFERENTTYPE
71    };
72    
73  static HFONT DlgHostsAddFont;  static HFONT DlgHostsAddFont;
74  static HFONT DlgHostsReplaceFont;  static HFONT DlgHostsReplaceFont;
75    
# Line 1309  static BOOL CALLBACK hosts_add_dlg_proc( Line 1326  static BOOL CALLBACK hosts_add_dlg_proc(
1326                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
1327                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1328    
1329                    switch (pvar->dns_key_check) {
1330                    case DNS_VERIFY_NOTFOUND:
1331                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "SSHFP RR not found.");
1332                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1333                            break;
1334                    case DNS_VERIFY_MATCH:
1335                    case DNS_VERIFY_AUTH_MATCH:
1336                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "SSHFP RR found and match.");
1337                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1338                            break;
1339                    case DNS_VERIFY_MISMATCH:
1340                    case DNS_VERIFY_AUTH_MISMATCH:
1341                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "SSHFP RR found but not match.");
1342                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1343                            break;
1344                    case DNS_VERIFY_DIFFERENTTYPE:
1345                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1346                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "SSHFP RR found but different type.");
1347                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1348                            break;
1349                    }
1350    
1351                    switch (pvar->dns_key_check) {
1352                    case DNS_VERIFY_MATCH:
1353                    case DNS_VERIFY_MISMATCH:
1354                    case DNS_VERIFY_DIFFERENTTYPE:
1355                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "SSHFP RR is *not* authenticated by DNSSEC.");
1356                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1357                            break;
1358                    case DNS_VERIFY_AUTH_MATCH:
1359                    case DNS_VERIFY_AUTH_MISMATCH:
1360                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1361                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "SSHFP RR is authenticated by DNSSEC.");
1362                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1363                            break;
1364                    }
1365    
1366                  init_hosts_dlg(pvar, dlg);                  init_hosts_dlg(pvar, dlg);
1367    
1368                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
# Line 1416  static BOOL CALLBACK hosts_replace_dlg_p Line 1470  static BOOL CALLBACK hosts_replace_dlg_p
1470                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
1471                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1472    
1473                    switch (pvar->dns_key_check) {
1474                    case DNS_VERIFY_NOTFOUND:
1475                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "SSHFP RR not found.");
1476                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1477                            break;
1478                    case DNS_VERIFY_MATCH:
1479                    case DNS_VERIFY_AUTH_MATCH:
1480                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "SSHFP RR found and match.");
1481                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1482                            break;
1483                    case DNS_VERIFY_MISMATCH:
1484                    case DNS_VERIFY_AUTH_MISMATCH:
1485                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "SSHFP RR found but not match.");
1486                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1487                            break;
1488                    case DNS_VERIFY_DIFFERENTTYPE:
1489                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1490                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "SSHFP RR found but different type.");
1491                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1492                            break;
1493                    }
1494    
1495                    switch (pvar->dns_key_check) {
1496                    case DNS_VERIFY_MATCH:
1497                    case DNS_VERIFY_MISMATCH:
1498                    case DNS_VERIFY_DIFFERENTTYPE:
1499                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "SSHFP RR is *not* authenticated by DNSSEC.");
1500                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1501                            break;
1502                    case DNS_VERIFY_AUTH_MATCH:
1503                    case DNS_VERIFY_AUTH_MISMATCH:
1504                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1505                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "SSHFP RR is authenticated by DNSSEC.");
1506                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1507                            break;
1508                    }
1509    
1510                  init_hosts_dlg(pvar, dlg);                  init_hosts_dlg(pvar, dlg);
1511    
1512                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
# Line 1521  static BOOL CALLBACK hosts_add2_dlg_proc Line 1612  static BOOL CALLBACK hosts_add2_dlg_proc
1612                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);                  UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg);
1613                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
1614    
1615                    switch (pvar->dns_key_check) {
1616                    case DNS_VERIFY_NOTFOUND:
1617                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "SSHFP RR not found.");
1618                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1619                            break;
1620                    case DNS_VERIFY_MATCH:
1621                    case DNS_VERIFY_AUTH_MATCH:
1622                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "SSHFP RR found and match.");
1623                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1624                            break;
1625                    case DNS_VERIFY_MISMATCH:
1626                    case DNS_VERIFY_AUTH_MISMATCH:
1627                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "SSHFP RR found but not match.");
1628                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1629                            break;
1630                    case DNS_VERIFY_DIFFERENTTYPE:
1631                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1632                            UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "SSHFP RR found but different type.");
1633                            SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg);
1634                            break;
1635                    }
1636    
1637                    switch (pvar->dns_key_check) {
1638                    case DNS_VERIFY_MATCH:
1639                    case DNS_VERIFY_MISMATCH:
1640                    case DNS_VERIFY_DIFFERENTTYPE:
1641                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "SSHFP RR is *not* authenticated by DNSSEC.");
1642                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1643                            break;
1644                    case DNS_VERIFY_AUTH_MATCH:
1645                    case DNS_VERIFY_AUTH_MISMATCH:
1646                    case DNS_VERIFY_AUTH_DIFFERENTTYPE:
1647                            UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "SSHFP RR is authenticated by DNSSEC.");
1648                            SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg);
1649                            break;
1650                    }
1651    
1652                  init_hosts_dlg(pvar, dlg);                  init_hosts_dlg(pvar, dlg);
1653    
1654                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
# Line 1641  int is_numeric_hostname(const char *host Line 1769  int is_numeric_hostname(const char *host
1769          return 0;          return 0;
1770  }  }
1771    
 #define DNS_TYPE_SSHFP  44  
 typedef struct {  
         BYTE Algorithm;  
         BYTE DigestType;  
         BYTE Digest[1];  
 } DNS_SSHFP_DATA, *PDNS_SSHFP_DATA;  
 enum verifydns_result {  
         DNS_VERIFY_NONE,  
         DNS_VERIFY_MATCH,  
         DNS_VERIFY_MISMATCH,  
         DNS_VERIFY_DIFFERENTTYPE,  
         DNS_VERIFY_AUTH_MATCH,  
         DNS_VERIFY_AUTH_MISMATCH,  
         DNS_VERIFY_AUTH_DIFFERENTTYPE  
 };  
   
1772  int verify_hostkey_dns(char FAR *hostname, Key *key)  int verify_hostkey_dns(char FAR *hostname, Key *key)
1773  {  {
1774          DNS_STATUS status;          DNS_STATUS status;
# Line 1664  int verify_hostkey_dns(char FAR *hostnam Line 1776  int verify_hostkey_dns(char FAR *hostnam
1776          PDNS_SSHFP_DATA t;          PDNS_SSHFP_DATA t;
1777          int hostkey_alg, hostkey_dtype, hostkey_dlen;          int hostkey_alg, hostkey_dtype, hostkey_dlen;
1778          BYTE *hostkey_digest;          BYTE *hostkey_digest;
1779          int found = DNS_VERIFY_NONE;          int found = DNS_VERIFY_NOTFOUND;
1780    
1781          switch (key->type) {          switch (key->type) {
1782          case KEY_RSA:          case KEY_RSA:
# Line 1728  int verify_hostkey_dns(char FAR *hostnam Line 1840  int verify_hostkey_dns(char FAR *hostnam
1840  //  //
1841  BOOL HOSTS_check_host_key(PTInstVar pvar, char FAR * hostname, unsigned short tcpport, Key *key)  BOOL HOSTS_check_host_key(PTInstVar pvar, char FAR * hostname, unsigned short tcpport, Key *key)
1842  {  {
1843          int found_different_key = 0, found_different_type_key = 0, dns_sshfp_check = 0;          int found_different_key = 0, found_different_type_key = 0;
1844    
1845            pvar->dns_key_check = DNS_VERIFY_NONE;
1846    
1847          // すでに known_hosts ファイルからホスト公開鍵を読み込んでいるなら、それと比較する。          // すでに known_hosts ファイルからホスト公開鍵を読み込んでいるなら、それと比較する。
1848          if (pvar->hosts_state.prefetched_hostname != NULL          if (pvar->hosts_state.prefetched_hostname != NULL
# Line 1806  BOOL HOSTS_check_host_key(PTInstVar pvar Line 1920  BOOL HOSTS_check_host_key(PTInstVar pvar
1920          }          }
1921    
1922          if (pvar->settings.VerifyHostKeyDNS && !is_numeric_hostname(hostname)) {          if (pvar->settings.VerifyHostKeyDNS && !is_numeric_hostname(hostname)) {
1923                  dns_sshfp_check = verify_hostkey_dns(hostname, key);                  pvar->dns_key_check = verify_hostkey_dns(hostname, key);
1924          }          }
1925    
1926          // known_hostsダイアログは同期的に表示させ、この時点においてユーザに確認          // known_hostsダイアログは同期的に表示させ、この時点においてユーザに確認

Legend:
Removed from v.4542  
changed lines
  Added in v.4559

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