Small bit of paranioa. Ensure that if the incoming name to
authorJeremy Allison <jra@samba.org>
Sat, 19 Sep 1998 03:34:12 +0000 (03:34 +0000)
committerJeremy Allison <jra@samba.org>
Sat, 19 Sep 1998 03:34:12 +0000 (03:34 +0000)
unix_convert() was a single '\' (the base directory of the service)
that it gets translated to a '.', not a '\0'.
Jeremy.
(This used to be commit f74f39f45fa55c1768d6622a52c494328f22f50b)

source3/smbd/filename.c

index caba4064d7b081a2be3b56f3e81d1ab52aaa5c11..7cbb3392cb7423b5916e0256c28d1a61df72f42a 100644 (file)
@@ -150,7 +150,8 @@ static void stat_cache_add( char *full_orig_name, char *orig_translated_path)
   /*
    * Don't cache trivial valid directory entries.
    */
   /*
    * Don't cache trivial valid directory entries.
    */
-  if((strcmp(full_orig_name, ".") == 0) || (strcmp(full_orig_name, "..") == 0))
+  if((*full_orig_name == '\0') || (strcmp(full_orig_name, ".") == 0) ||
+     (strcmp(full_orig_name, "..") == 0))
     return;
 
   /*
     return;
 
   /*
@@ -245,7 +246,7 @@ static BOOL stat_cache_lookup( char *name, char *dirpath, char **start, SMB_STRU
   /*
    * Don't lookup trivial valid directory entries.
    */
   /*
    * Don't lookup trivial valid directory entries.
    */
-  if((strcmp(name, ".") == 0) || (strcmp(name, "..") == 0)) {
+  if((*name == '\0') || (strcmp(name, ".") == 0) || (strcmp(name, "..") == 0)) {
     global_stat_cache_misses++;
     return False;
   }
     global_stat_cache_misses++;
     return False;
   }
@@ -365,6 +366,17 @@ BOOL unix_convert(char *name,connection_struct *conn,char *saved_last_component,
 
   trim_string(name,"/","/");
 
 
   trim_string(name,"/","/");
 
+  /*
+   * If we trimmed down to a single '\0' character
+   * then we should use the "." directory to avoid
+   * searching the cache.
+   */
+
+  if(!*name) {
+    name[0] = '.';
+    name[1] = '\0';
+  }
+
   /*
    * Ensure saved_last_component is valid even if file exists.
    */
   /*
    * Ensure saved_last_component is valid even if file exists.
    */