coar        98/11/05 12:11:30

  Modified:    src      CHANGES
               src/main http_request.c util.c
  Log:
        Fix some problems with the handling of UNC paths.
  
  Submitted by: Ken Parzygnat <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.1136    +3 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1135
  retrieving revision 1.1136
  diff -u -r1.1135 -r1.1136
  --- CHANGES   1998/11/05 20:07:48     1.1135
  +++ CHANGES   1998/11/05 20:11:23     1.1136
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3.4
   
  +  *) Fix problems with handling of UNC names (e.g., \\host\path)
  +     on Win32.  [Ken Parzygnat <[EMAIL PROTECTED]>]
  +
     *) Rework os_canonical_*() on Win32 so it's simpler, more
        robust, and works.  [Ken Parzygnat <[EMAIL PROTECTED]>]
        PR#2555, 2915, 3064, 3232
  
  
  
  1.137     +26 -4     apache-1.3/src/main/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/http_request.c,v
  retrieving revision 1.136
  retrieving revision 1.137
  diff -u -r1.136 -r1.137
  --- http_request.c    1998/11/05 20:07:52     1.136
  +++ http_request.c    1998/11/05 20:11:27     1.137
  @@ -180,6 +180,7 @@
       int rv;
   #ifdef WIN32
       char buf[5];
  +    BOOL bStripSlash=TRUE;
   #endif
   
       if (r->finfo.st_mode) {
  @@ -198,12 +199,33 @@
        path=buf;
        end=buf+4;
       }
  -#endif
   
  -    /* Advance over trailing slashes ... NOT part of filename */
  +    /* If UNC name == //machine/share/, do not 
  +     * advance over the trailing slash.  Any other
  +     * UNC name is OK to strip the slash.
  +     */
  +    cp = end;
  +    if (strlen(path) > 2 && path[0] == '/' && path[1] == '/' && 
  +        path[2] != '/' && cp[-1] == '/') {
  +        char *p;
  +        int iCount=0;
  +        p = path;
  +        while (p = strchr(p,'/')) {
  +            p++;
  +            iCount++;
  +        }
  +    
  +        if (iCount == 4)
  +            bStripSlash = FALSE;
  +    }
   
  -    for (cp = end; cp > path && cp[-1] == '/'; --cp)
  -        continue;
  +    if (bStripSlash)
  +#endif
  +        /* Advance over trailing slashes ... NOT part of filename 
  +         * if file is not a UNC name (Win32 only).
  +         */
  +        for (cp = end; cp > path && cp[-1] == '/'; --cp)
  +            continue;
   
   
       while (cp > path) {
  
  
  
  1.138     +7 -0      apache-1.3/src/main/util.c
  
  Index: util.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/util.c,v
  retrieving revision 1.137
  retrieving revision 1.138
  diff -u -r1.137 -r1.138
  --- util.c    1998/10/24 15:10:48     1.137
  +++ util.c    1998/11/05 20:11:27     1.138
  @@ -424,6 +424,13 @@
       char *d, *s;
   
       s = d = name;
  +
  +#ifdef WIN32
  +    /* Check for UNC names.  Leave leading two slashes. */
  +    if (s[0] == '/' && s[1] == '/')
  +        *d++ = *s++;
  +#endif
  +
       while (*s) {
        if ((*d++ = *s) == '/') {
            do {
  
  
  

Reply via email to