[BACK]Return to readconf.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/readconf.c between version 1.279 and 1.280

version 1.279, 2017/09/21 19:16:53 version 1.280, 2017/10/21 23:06:24
Line 668 
Line 668 
         return result;          return result;
 }  }
   
 /* Check and prepare a domain name: removes trailing '.' and lowercases */  
 static void  
 valid_domain(char *name, const char *filename, int linenum)  
 {  
         size_t i, l = strlen(name);  
         u_char c, last = '\0';  
   
         if (l == 0)  
                 fatal("%s line %d: empty hostname suffix", filename, linenum);  
         if (!isalpha((u_char)name[0]) && !isdigit((u_char)name[0]))  
                 fatal("%s line %d: hostname suffix \"%.100s\" "  
                     "starts with invalid character", filename, linenum, name);  
         for (i = 0; i < l; i++) {  
                 c = tolower((u_char)name[i]);  
                 name[i] = (char)c;  
                 if (last == '.' && c == '.')  
                         fatal("%s line %d: hostname suffix \"%.100s\" contains "  
                             "consecutive separators", filename, linenum, name);  
                 if (c != '.' && c != '-' && !isalnum(c) &&  
                     c != '_') /* technically invalid, but common */  
                         fatal("%s line %d: hostname suffix \"%.100s\" contains "  
                             "invalid characters", filename, linenum, name);  
                 last = c;  
         }  
         if (name[l - 1] == '.')  
                 name[l - 1] = '\0';  
 }  
   
 /*  /*
  * Returns the number of the token pointed to by cp or oBadOption.   * Returns the number of the token pointed to by cp or oBadOption.
  */   */
Line 1547 
Line 1519 
         case oCanonicalDomains:          case oCanonicalDomains:
                 value = options->num_canonical_domains != 0;                  value = options->num_canonical_domains != 0;
                 while ((arg = strdelim(&s)) != NULL && *arg != '\0') {                  while ((arg = strdelim(&s)) != NULL && *arg != '\0') {
                         valid_domain(arg, filename, linenum);                          const char *errstr;
                           if (!valid_domain(arg, 1, &errstr)) {
                                   fatal("%s line %d: %s", filename, linenum,
                                       errstr);
                           }
                         if (!*activep || value)                          if (!*activep || value)
                                 continue;                                  continue;
                         if (options->num_canonical_domains >= MAX_CANON_DOMAINS)                          if (options->num_canonical_domains >= MAX_CANON_DOMAINS)
Line 2277 
Line 2253 
   
                 if (first) {                  if (first) {
                         /* First argument and configuration is active */                          /* First argument and configuration is active */
                         if (parse_user_host_port(cp, &user, &host, &port) != 0)                          if (parse_ssh_uri(cp, &user, &host, &port) == -1 ||
                               parse_user_host_port(cp, &user, &host, &port) != 0)
                                 goto out;                                  goto out;
                 } else {                  } else {
                         /* Subsequent argument or inactive configuration */                          /* Subsequent argument or inactive configuration */
                         if (parse_user_host_port(cp, NULL, NULL, NULL) != 0)                          if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 ||
                               parse_user_host_port(cp, NULL, NULL, NULL) != 0)
                                 goto out;                                  goto out;
                 }                  }
                 first = 0; /* only check syntax for subsequent hosts */                  first = 0; /* only check syntax for subsequent hosts */
Line 2304 
Line 2282 
         free(user);          free(user);
         free(host);          free(host);
         return ret;          return ret;
   }
   
   int
   parse_ssh_uri(const char *uri, char **userp, char **hostp, int *portp)
   {
           char *path;
           int r;
   
           r = parse_uri("ssh", uri, userp, hostp, portp, &path);
           if (r == 0 && path != NULL)
                   r = -1;         /* path not allowed */
           return r;
 }  }
   
 /* XXX the following is a near-vebatim copy from servconf.c; refactor */  /* XXX the following is a near-vebatim copy from servconf.c; refactor */

Legend:
Removed from v.1.279  
changed lines
  Added in v.1.280