summaryrefslogtreecommitdiffstats
path: root/source/smbd/filename.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1998-09-19 03:34:12 +0000
committerJeremy Allison <jra@samba.org>1998-09-19 03:34:12 +0000
commitf74f39f45fa55c1768d6622a52c494328f22f50b (patch)
treeabecb1e6d79823f263e9e07ac19cf871c745e9dd /source/smbd/filename.c
parentb55f93b213ee61c35e7a87a2be63191d55186bd6 (diff)
downloadsamba-f74f39f45fa55c1768d6622a52c494328f22f50b.tar.gz
samba-f74f39f45fa55c1768d6622a52c494328f22f50b.tar.xz
samba-f74f39f45fa55c1768d6622a52c494328f22f50b.zip
Small bit of paranioa. Ensure that if the incoming name to
unix_convert() was a single '\' (the base directory of the service) that it gets translated to a '.', not a '\0'. Jeremy.
Diffstat (limited to 'source/smbd/filename.c')
-rw-r--r--source/smbd/filename.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/source/smbd/filename.c b/source/smbd/filename.c
index caba4064d7b..7cbb3392cb7 100644
--- a/source/smbd/filename.c
+++ b/source/smbd/filename.c
@@ -150,7 +150,8 @@ static void stat_cache_add( char *full_orig_name, char *orig_translated_path)
/*
* 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;
/*
@@ -245,7 +246,7 @@ static BOOL stat_cache_lookup( char *name, char *dirpath, char **start, SMB_STRU
/*
* 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;
}
@@ -366,6 +367,17 @@ BOOL unix_convert(char *name,connection_struct *conn,char *saved_last_component,
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.
*/