Develop and Download Open Source Software

Browse Subversion Repository

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

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

revision 3179 by maya, Tue Dec 2 15:49:12 2008 UTC revision 3188 by doda, Tue Dec 16 05:15:59 2008 UTC
# Line 1609  static int parse_option(PTInstVar pvar, Line 1609  static int parse_option(PTInstVar pvar,
1609                   (MATCH_STR_I(option, "slogin://") == 0) ||                   (MATCH_STR_I(option, "slogin://") == 0) ||
1610                   (MATCH_STR_I(option, "slogin1://") == 0) ||                   (MATCH_STR_I(option, "slogin1://") == 0) ||
1611                   (MATCH_STR_I(option, "slogin2://") == 0)) {                   (MATCH_STR_I(option, "slogin2://") == 0)) {
1612                    //
1613                    // ssh://user@host/ 等のURL形式のサポート
1614                    // 基本的な書式は telnet:// URLに順ずる
1615                    //
1616                    // 参考:
1617                    //   RFC3986: Uniform Resource Identifier (URI): Generic Syntax
1618                    //   RFC4248: The telnet URI Scheme
1619                    //
1620                  char *p, *p2, *p3;                  char *p, *p2, *p3;
1621                  int optlen;                  int optlen, hostlen;
1622    
                 p = strchr(option, ':');  
1623                  optlen = strlen(option);                  optlen = strlen(option);
1624    
1625                    // 最初の':'の前の文字が数字だった場合、それをsshプロトコルバージョンとみなす
1626                    p = strchr(option, ':');
1627                  switch (*(p-1)) {                  switch (*(p-1)) {
1628                  case '1':                  case '1':
1629                          pvar->settings.ssh_protocol_version = 1;                          pvar->settings.ssh_protocol_version = 1;
# Line 1625  static int parse_option(PTInstVar pvar, Line 1633  static int parse_option(PTInstVar pvar,
1633                          break;                          break;
1634                  }                  }
1635    
1636                    // authority part までポインタを移動
1637                  p += 3;                  p += 3;
                 memset(option, ' ', p - option);  
1638    
1639                    // path part を切り捨てる
1640                  if ((p2 = strchr(p, '/')) != NULL) {                  if ((p2 = strchr(p, '/')) != NULL) {
1641                          memset(p2, ' ', strlen(option) - (p2 - option));                          *p2 = 0;
1642                  }                  }
1643    
1644                    // '@'があった場合、それより前はユーザ情報
1645                  if ((p2 = strchr(p, '@')) != NULL) {                  if ((p2 = strchr(p, '@')) != NULL) {
1646                          *p2 = 0;                          *p2 = 0;
1647                            // ':'以降はパスワード
1648                          if ((p3 = strchr(p, ':')) != NULL) {                          if ((p3 = strchr(p, ':')) != NULL) {
1649                                  *p3 = 0;                                  *p3 = 0;
1650                                  strcpy_s(pvar->ssh2_password, sizeof(pvar->ssh2_password), p3 + 1);                                  strcpy_s(pvar->ssh2_password, sizeof(pvar->ssh2_password), p3 + 1);
1651                                  pvar->ssh2_autologin = 1;                                  pvar->ssh2_autologin = 1;
1652                          }                          }
1653                          strcpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), p);                          strcpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), p);
1654                          memset(p, ' ', (p2 - p) + 1);                          // p が host part の先頭('@'の次の文字)を差すようにする
1655                            p = p2 + 1;
1656                  }                  }
1657    
1658                    // host part を option の先頭に移動して、scheme part を潰す
1659                    // port指定が無かった時にport番号を足すための領域確保の意味もある
1660                    hostlen = strlen(p);
1661                    memmove_s(option, optlen, p, hostlen);
1662                    option[hostlen] = 0;
1663    
1664                    // ポート指定が無い時は":22"を足す
1665                    if (strchr(option, ':') == NULL) {
1666                            memcpy_s(option+hostlen, optlen-hostlen, ":22", 3);
1667                            hostlen += 3;
1668                    }
1669    
1670                    // ポート指定より後をすべてスペースで潰す
1671                    memset(option+hostlen, ' ', optlen-hostlen);
1672    
1673                  pvar->settings.Enabled = 1;                  pvar->settings.Enabled = 1;
1674    
1675                  return OPTION_REPLACE;                  return OPTION_REPLACE;

Legend:
Removed from v.3179  
changed lines
  Added in v.3188

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