diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c index 75b9c7d28ff..cee67eab2d1 100644 --- a/source3/smbd/smb2_create.c +++ b/source3/smbd/smb2_create.c @@ -771,6 +771,17 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx, in_file_attributes &= ~FILE_FLAG_POSIX_SEMANTICS; + is_dfs = (smb1req->flags2 & FLAGS2_DFS_PATHNAMES); + if (is_dfs) { + /* + * With a DFS flag set, remove any leading '\\' + * characters from in_name before further processing. + */ + while (in_name[0] == '\\') { + in_name++; + } + } + state->fname = talloc_strdup(state, in_name); if (tevent_req_nomem(state->fname, req)) { return tevent_req_post(req, state->ev); @@ -961,8 +972,6 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx, state->lease_ptr = NULL; } - is_dfs = (smb1req->flags2 & FLAGS2_DFS_PATHNAMES); - /* convert '\\' into '/' */ status = check_path_syntax_smb2(state->fname, is_dfs); if (!NT_STATUS_IS_OK(status)) {