fielding    96/12/01 05:48:23

  Modified:    src       mod_access.c
  Log:
  Fix bug reported by Dean Gaudet regarding hostnames which begin with
  a digit being improperly treated as IP addresses in find_allowdeny.
  Reviewed by: Randy Terbush, Chuck Murcko
  
  Revision  Changes    Path
  1.11      +21 -9     apache/src/mod_access.c
  
  Index: mod_access.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_access.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -C3 -r1.10 -r1.11
  *** mod_access.c      1996/11/18 19:40:49     1.10
  --- mod_access.c      1996/12/01 13:48:23     1.11
  ***************
  *** 167,178 ****
        return (what[l] == '\0' || what[l] == '.');
    }
    
    int find_allowdeny (request_rec *r, array_header *a, int method)
    {
        allowdeny *ap = (allowdeny *)a->elts;
        int mmask = (1 << method);
  !     int i, gothost=0;
  !     const char *remotehost=NULL;
    
        for (i = 0; i < a->nelts; ++i) {
            if (!(mmask & ap[i].limited))
  --- 167,185 ----
        return (what[l] == '\0' || what[l] == '.');
    }
    
  + static int is_ip(const char *host)
  + {
  +     while (*host && ((*host == '.') || isdigit(*host))) host++;
  +     return (*host == '\0');
  + }
  + 
    int find_allowdeny (request_rec *r, array_header *a, int method)
    {
        allowdeny *ap = (allowdeny *)a->elts;
        int mmask = (1 << method);
  !     int i;
  !     int gothost = 0;
  !     const char *remotehost = NULL;
    
        for (i = 0; i < a->nelts; ++i) {
            if (!(mmask & ap[i].limited))
  ***************
  *** 191,205 ****
        
        if (!strcmp (ap[i].from, "all"))
            return 1;
  !     if (!gothost)
  !     {
            remotehost = get_remote_host(r->connection, r->per_dir_config,
  !                                      REMOTE_HOST);
  !         gothost = 1;
        }
  !         if (remotehost != NULL && isalpha(remotehost[0]))
  !             if (in_domain(ap[i].from, remotehost))
  !                 return 1;
            if (in_ip (ap[i].from, r->connection->remote_ip))
                return 1;
        }
  --- 198,217 ----
        
        if (!strcmp (ap[i].from, "all"))
            return 1;
  ! 
  !     if (!gothost) {
            remotehost = get_remote_host(r->connection, r->per_dir_config,
  !                                      REMOTE_HOST);
  ! 
  !         if ((remotehost == NULL) || is_ip(remotehost))
  !             gothost = 1;
  !         else
  !             gothost = 2;
        }
  ! 
  !         if ((gothost == 2) && in_domain(ap[i].from, remotehost))
  !             return 1;
  ! 
            if (in_ip (ap[i].from, r->connection->remote_ip))
                return 1;
        }
  
  
  

Reply via email to