struct smb_filename *smb_fname_dst = NULL;
NTSTATUS status = NT_STATUS_OK;
uint32_t ucf_flags = ucf_flags_from_smb_request(req);
+ size_t ret;
+ bool is_dfs = (req->flags2 & FLAGS2_DFS_PATHNAMES);
TALLOC_CTX *ctx = talloc_tos();
if (!fsp) {
return NT_STATUS_INVALID_PARAMETER;
}
- if (smb_fname_src->flags & SMB_FILENAME_POSIX_PATH) {
- srvstr_get_path_posix(ctx,
- pdata,
- req->flags2,
- &newname,
- &pdata[20],
- len,
- STR_TERMINATE,
- &status);
- ucf_flags |= UCF_POSIX_PATHNAMES;
- } else {
- srvstr_get_path(ctx,
- pdata,
- req->flags2,
- &newname,
- &pdata[20],
- len,
- STR_TERMINATE,
- &status);
+ ret = srvstr_pull_talloc(ctx,
+ pdata,
+ req->flags2,
+ &newname,
+ &pdata[20],
+ len,
+ STR_TERMINATE);
+
+ if (ret == (size_t)-1 || newname == NULL) {
+ return NT_STATUS_INVALID_PARAMETER;
}
+
+ status = check_path_syntax_smb2(newname, is_dfs);
if (!NT_STATUS_IS_OK(status)) {
return status;
}