diff options
author | Jeremy Allison <jra@samba.org> | 2002-05-14 19:30:29 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-05-14 19:30:29 +0000 |
commit | 099b4889a2383b27d4d0ca4c0eb2175a0e87b67d (patch) | |
tree | 182ed6914fc9752102d18833da21082efbcbc2f1 /source3/smbd/mangle_hash.c | |
parent | 615e6071945ebb4f89cdb897659e8f2956349a1b (diff) | |
download | samba-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.c | 16 |
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; |