[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.14 and 1.14.2.1

version 1.14, 2001/06/27 04:48:53 version 1.14.2.1, 2002/03/07 17:37:46
Line 104 
Line 104 
 }  }
   
 /*  /*
  * Tries to match the host name (which must be in all lowercase) against the   * Tries to match the string 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_hostname(const char *host, const char *pattern, u_int len)  match_pattern_list(const char *string, const char *pattern, u_int len,
       int dolower)
 {  {
         char sub[1024];          char sub[1024];
         int negated;          int negated;
Line 132 
Line 133 
                  * 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] = isupper(pattern[i]) ? tolower(pattern[i]) : pattern[i];                          sub[subi] = dolower && isupper(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 146 
Line 148 
                 /* Null-terminate the subpattern. */                  /* Null-terminate the subpattern. */
                 sub[subi] = '\0';                  sub[subi] = '\0';
   
                 /* Try to match the subpattern against the host name. */                  /* Try to match the subpattern against the string. */
                 if (match_pattern(host, sub)) {                  if (match_pattern(string, sub)) {
                         if (negated)                          if (negated)
                                 return -1;              /* Negative */                                  return -1;              /* Negative */
                         else                          else
Line 163 
Line 165 
 }  }
   
 /*  /*
    * 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 212 
Line 226 
  * 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        20  #define MAX_PROP        40
 #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 225 
Line 239 
         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 234 
Line 248 
         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.14  
changed lines
  Added in v.1.14.2.1