diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-10-02 12:25:02 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:33 -0500 |
commit | 84bbe948f3beff0fbdc51c9c63e2f674b70b5bbe (patch) | |
tree | fedf0c6857bd02ad038eeabd54ad52601db2941d /source4/ntvfs/posix/pvfs_resolve.c | |
parent | c62a988c3986e6c1c3269ad4af36f653f08b3c96 (diff) | |
download | samba-84bbe948f3beff0fbdc51c9c63e2f674b70b5bbe.tar.gz samba-84bbe948f3beff0fbdc51c9c63e2f674b70b5bbe.tar.bz2 samba-84bbe948f3beff0fbdc51c9c63e2f674b70b5bbe.zip |
r2786: - match on both long and short name for search posix backend
- a final name component of . is illegal
(This used to be commit 11c852170b83e5adbdb58407e1c7d3aeb4ab5bb8)
Diffstat (limited to 'source4/ntvfs/posix/pvfs_resolve.c')
-rw-r--r-- | source4/ntvfs/posix/pvfs_resolve.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source4/ntvfs/posix/pvfs_resolve.c b/source4/ntvfs/posix/pvfs_resolve.c index dfd6744eff..e846b7be77 100644 --- a/source4/ntvfs/posix/pvfs_resolve.c +++ b/source4/ntvfs/posix/pvfs_resolve.c @@ -159,6 +159,7 @@ static NTSTATUS pvfs_unix_path(struct pvfs_state *pvfs, const char *cifs_name, uint_t flags, struct pvfs_filename *name) { char *ret, *p; + size_t len; name->original_name = talloc_strdup(name, cifs_name); name->stream_name = NULL; @@ -183,8 +184,13 @@ static NTSTATUS pvfs_unix_path(struct pvfs_state *pvfs, const char *cifs_name, p = ret + strlen(pvfs->base_directory) + 1; - if (p[strlen(cifs_name)-1] == '\\') { - p[strlen(cifs_name)-1] = 0; + len = strlen(cifs_name); + if (len>0 && p[len-1] == '\\') { + p[len-1] = 0; + len--; + } + if (len>1 && p[len-1] == '.' && p[len-2] == '\\') { + return NT_STATUS_OBJECT_NAME_INVALID; } /* now do an in-place conversion of '\' to '/', checking |