summaryrefslogtreecommitdiff
path: root/source3/smbd/mangle_hash.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-05-14 19:30:29 +0000
committerJeremy Allison <jra@samba.org>2002-05-14 19:30:29 +0000
commit099b4889a2383b27d4d0ca4c0eb2175a0e87b67d (patch)
tree182ed6914fc9752102d18833da21082efbcbc2f1 /source3/smbd/mangle_hash.c
parent615e6071945ebb4f89cdb897659e8f2956349a1b (diff)
downloadsamba-099b4889a2383b27d4d0ca4c0eb2175a0e87b67d.tar.gz
samba-099b4889a2383b27d4d0ca4c0eb2175a0e87b67d.tar.bz2
samba-099b4889a2383b27d4d0ca4c0eb2175a0e87b67d.zip
Removed lp_strip_dot code - ensured that mangling code treats names ending
in '.' as invalid long filenames (special treatment for '.' and '..' which are valid - yes Andrew I did this without strlen :-) :-). Jeremy. (This used to be commit 3180d8ba4ace9417033039d61d04c255da6f6a01)
Diffstat (limited to 'source3/smbd/mangle_hash.c')
-rw-r--r--source3/smbd/mangle_hash.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source3/smbd/mangle_hash.c b/source3/smbd/mangle_hash.c
index 1da66ff8e4..25f0c4dcc9 100644
--- a/source3/smbd/mangle_hash.c
+++ b/source3/smbd/mangle_hash.c
@@ -203,13 +203,24 @@ static NTSTATUS is_valid_name(const smb_ucs2_t *fname)
if (!fname || !*fname) return NT_STATUS_INVALID_PARAMETER;
- if (*fname == UCS2_CHAR('.')) return NT_STATUS_UNSUCCESSFUL;
+ /* . and .. are valid names. */
+ if (strcmp_wa(fname, ".")==0 || strcmp_wa(fname, "..")==0)
+ return NT_STATUS_OK;
+
+ /* Name cannot start with '.' */
+ if (*fname == UCS2_CHAR('.'))
+ return NT_STATUS_UNSUCCESSFUL;
ret = has_valid_chars(fname);
if (NT_STATUS_IS_ERR(ret)) return ret;
str = strdup_w(fname);
p = strchr_w(str, UCS2_CHAR('.'));
+ if (p && p[1] == UCS2_CHAR(0)) {
+ /* Name cannot end in '.' */
+ SAFE_FREE(str);
+ return NT_STATUS_UNSUCCESSFUL;
+ }
if (p) *p = 0;
strupper_w(str);
p = &(str[1]);
@@ -731,6 +742,9 @@ static BOOL name_map(char *OutName, BOOL need83, BOOL cache83)
return False;
}
+ if( !need83 && NT_STATUS_IS_ERR(is_valid_name(OutName_ucs2)))
+ need83 = True;
+
/* check if it's already in 8.3 format */
if (need83 && !NT_STATUS_IS_OK(is_8_3_w(OutName_ucs2))) {
char *tmp = NULL;