From: Jeremy Allison Date: Fri, 10 Apr 2009 05:46:31 +0000 (-0700) Subject: Fix bug #6254 - PUT/GET produces an error in IPv6 to a smb-server(3.3) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb29aa406f14397e3c55e559e2c02da6eb6c4cbd;p=thirdparty%2Fsamba.git 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. --- diff --git a/source/smbd/open.c b/source/smbd/open.c index 58d1f6d4468..535abcc26d6 100644 --- a/source/smbd/open.c +++ b/source/smbd/open.c @@ -3055,6 +3055,29 @@ NTSTATUS create_file(connection_struct *conn, (unsigned int)root_dir_fid, ea_list, sd, 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; + } + /* * Get the file name. */ @@ -3182,24 +3205,6 @@ NTSTATUS create_file(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. */