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

Diff for /src/usr.bin/ssh/match.c between version 1.12.2.2 and 1.13

version 1.12.2.2, 2002/03/09 00:20:44 version 1.13, 2001/06/24 05:25:10
Line 104 
Line 104 
 }  }
   
 /*  /*
  * Tries to match the string against the   * Tries to match the host name (which must be in all lowercase) against the
  * comma-separated sequence of subpatterns (each possibly preceded by ! to   * comma-separated sequence of subpatterns (each possibly preceded by ! to
  * indicate negation).  Returns -1 if negation matches, 1 if there is   * indicate negation).  Returns -1 if negation matches, 1 if there is
  * a positive match, 0 if there is no match at all.   * a positive match, 0 if there is no match at all.
  */   */
   
 int  int
 match_pattern_list(const char *string, const char *pattern, u_int len,  match_hostname(const char *host, const char *pattern, u_int len)
     int dolower)  
 {  {
         char sub[1024];          char sub[1024];
         int negated;          int negated;
Line 133 
Line 132 
                  * subpattern to lowercase.                   * subpattern to lowercase.
                  */                   */
                 for (subi = 0;                  for (subi = 0;
                     i < len && subi < sizeof(sub) - 1 && pattern[i] != ',';                       i < len && subi < sizeof(sub) - 1 && pattern[i] != ',';
                     subi++, i++)                       subi++, i++)
                         sub[subi] = dolower && isupper(pattern[i]) ?                          sub[subi] = isupper(pattern[i]) ? tolower(pattern[i]) : pattern[i];
                             tolower(pattern[i]) : pattern[i];  
                 /* If subpattern too long, return failure (no match). */                  /* If subpattern too long, return failure (no match). */
                 if (subi >= sizeof(sub) - 1)                  if (subi >= sizeof(sub) - 1)
                         return 0;                          return 0;
Line 148 
Line 146 
                 /* Null-terminate the subpattern. */                  /* Null-terminate the subpattern. */
                 sub[subi] = '\0';                  sub[subi] = '\0';
   
                 /* Try to match the subpattern against the string. */                  /* Try to match the subpattern against the host name. */
                 if (match_pattern(string, sub)) {                  if (match_pattern(host, sub)) {
                         if (negated)                          if (negated)
                                 return -1;              /* Negative */                                  return -1;              /* Negative */
                         else                          else
Line 165 
Line 163 
 }  }
   
 /*  /*
  * Tries to match the host name (which must be in all lowercase) against the  
  * comma-separated sequence of subpatterns (each possibly preceded by ! to  
  * indicate negation).  Returns -1 if negation matches, 1 if there is  
  * a positive match, 0 if there is no match at all.  
  */  
 int  
 match_hostname(const char *host, const char *pattern, u_int len)  
 {  
         return match_pattern_list(host, pattern, len, 1);  
 }  
   
 /*  
  * returns 0 if we get a negative match for the hostname or the ip   * returns 0 if we get a negative match for the hostname or the ip
  * or if we get no match at all.  returns 1 otherwise.   * or if we get no match at all.  returns 1 otherwise.
  */   */
Line 199 
Line 185 
 }  }
   
 /*  /*
  * match user, user@host_or_ip, user@host_or_ip_list against pattern  
  */  
 int  
 match_user(const char *user, const char *host, const char *ipaddr,  
     const char *pattern)  
 {  
         char *p, *pat;  
         int ret;  
   
         if ((p = strchr(pattern,'@')) == NULL)  
                 return match_pattern(user, pattern);  
   
         pat = xstrdup(pattern);  
         p = strchr(pat, '@');  
         *p++ = '\0';  
   
         if ((ret = match_pattern(user, pat)) == 1)  
                 ret = match_host_and_ip(host, ipaddr, p);  
         xfree(pat);  
   
         return ret;  
 }  
   
 /*  
  * Returns first item from client-list that is also supported by server-list,   * Returns first item from client-list that is also supported by server-list,
  * caller must xfree() returned string.   * caller must xfree() returned string.
  */   */
 #define MAX_PROP        40  #define MAX_PROP        20
 #define SEP     ","  #define SEP     ","
 char *  char *
 match_list(const char *client, const char *server, u_int *next)  match_list(const char *client, const char *server, u_int *next)
Line 239 
Line 201 
         s = sp = xstrdup(server);          s = sp = xstrdup(server);
   
         for ((p = strsep(&sp, SEP)), i=0; p && *p != '\0';          for ((p = strsep(&sp, SEP)), i=0; p && *p != '\0';
             (p = strsep(&sp, SEP)), i++) {               (p = strsep(&sp, SEP)), i++) {
                 if (i < MAX_PROP)                  if (i < MAX_PROP)
                         sproposals[i] = p;                          sproposals[i] = p;
                 else                  else
Line 248 
Line 210 
         nproposals = i;          nproposals = i;
   
         for ((p = strsep(&cp, SEP)), i=0; p && *p != '\0';          for ((p = strsep(&cp, SEP)), i=0; p && *p != '\0';
             (p = strsep(&cp, SEP)), i++) {               (p = strsep(&cp, SEP)), i++) {
                 for (j = 0; j < nproposals; j++) {                  for (j = 0; j < nproposals; j++) {
                         if (strcmp(p, sproposals[j]) == 0) {                          if (strcmp(p, sproposals[j]) == 0) {
                                 ret = xstrdup(p);                                  ret = xstrdup(p);

Legend:
Removed from v.1.12.2.2  
changed lines
  Added in v.1.13