[Samba] smbclient: Renaming file on DFS root fails with NT_STATUS_OBJECT_PATH_NOT_FOUND

Christoph Ziebuhr chris at codefrickler.de
Tue Oct 22 10:27:17 UTC 2019


If a file is stored directly on a DFS enabled share, renaming fails with 
NT_STATUS_OBJECT_PATH_NOT_FOUND.
The usecase may sound unusual, but a customer is using NetApp ONTAP 9, 
which by default advertises DFS capabilities for all shares, and he 
cannot disable it for policy reasons.
I can also reproduce the issue with smbd and Windows Server 2012 R2 
(haven't checked with other versions).

IMHO it is caused by:
- Not setting SMB2_HDR_FLAG_DFS when calling smb2cli_req_send() from 
smb2cli_set_info_send()
- cli_resolve_path() returning a full dfs path for the destination, 
which is then passed to cli_rename() to be used in SMB2_FILE_RENAME_INFO

After some patching and testing, I came to this conclusion:

Setting SMB2_HDR_FLAG_DFS solves the issue for smbd, but not for Windows 
Server and not for NetApp.
It seems that the file name in SMB2_FILE_RENAME_INFO must always be a 
non-dfs path and the header flag is ignored:
- A windows client uses a non-dfs path, but sets the header flag
- Linux kernel also uses a non-dfs path and doesn't set the header flag

This means, path handling for cli_rename() needs to be changed.
IMHO there are two possibilities:
- Extend cli_resolve_path() to be able to also return a non-dfs path
- Strip server/share from fname_dst in cli_rename(), e.g. with 
parse_dfs_path() from smbd



More information about the samba mailing list