diff options
author | Jeremy Allison <jra@samba.org> | 2009-04-09 22:44:56 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2009-04-09 22:44:56 -0700 |
commit | f8f68703da58cf7f61b655b48bbbc45cda647748 (patch) | |
tree | e5c0b3624790f26679485b4e526eac1c3b451c98 /source3 | |
parent | c57b32c5ab754cdf99527e4dfc4bb6ff3ca93e25 (diff) | |
download | samba-f8f68703da58cf7f61b655b48bbbc45cda647748.tar.gz samba-f8f68703da58cf7f61b655b48bbbc45cda647748.tar.bz2 samba-f8f68703da58cf7f61b655b48bbbc45cda647748.zip |
Fix bug #6254 - PUT/GET produces an error in IPv6 to a smb-server(3.3) has parameter "msdfs root = yes"
This was broken by the refactoring around create_file().
MSDFS pathname processing must be done FIRST.
MSDFS pathnames containing IPv6 addresses can
be confused with NTFS stream names (they contain
":" characters.
Jeremy.
Diffstat (limited to 'source3')
-rw-r--r-- | source3/smbd/open.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 52df4fa143..451461744b 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -3355,6 +3355,29 @@ NTSTATUS create_file_default(connection_struct *conn, (unsigned int)root_dir_fid, ea_list, sd, create_file_flags, fname)); + /* MSDFS pathname processing must be done FIRST. + MSDFS pathnames containing IPv6 addresses can + be confused with NTFS stream names (they contain + ":" characters. JRA. */ + + if ((req != NULL) && (req->flags2 & FLAGS2_DFS_PATHNAMES)) { + char *resolved_fname; + + status = resolve_dfspath(talloc_tos(), conn, true, fname, + &resolved_fname); + + if (!NT_STATUS_IS_OK(status)) { + /* + * For PATH_NOT_COVERED we had + * reply_botherror(req, NT_STATUS_PATH_NOT_COVERED, + * ERRSRV, ERRbadpath); + * Need to fix in callers + */ + goto fail; + } + fname = resolved_fname; + } + /* * Calculate the filename from the root_dir_if if necessary. */ @@ -3410,24 +3433,6 @@ NTSTATUS create_file_default(connection_struct *conn, } } - if ((req != NULL) && (req->flags2 & FLAGS2_DFS_PATHNAMES)) { - char *resolved_fname; - - status = resolve_dfspath(talloc_tos(), conn, true, fname, - &resolved_fname); - - if (!NT_STATUS_IS_OK(status)) { - /* - * For PATH_NOT_COVERED we had - * reply_botherror(req, NT_STATUS_PATH_NOT_COVERED, - * ERRSRV, ERRbadpath); - * Need to fix in callers - */ - goto fail; - } - fname = resolved_fname; - } - /* * Check if POSIX semantics are wanted. */ |