Writing to non-DFS directory on DFS share (using smbclient)
Gary Monson
garym-samba at remasys.com
Wed Aug 23 07:06:34 GMT 2006
Hello,
I am having an issue with the Linux smbclient program when connected to
a DFS share setup on a Windows 2003 server. I am trying to do a "put"
to the remote share but getting back an error message. The setup is as
follows:
The main DFS share is at \\w2003\rootdfs. This is where I connect to,
without a problem. It has 2 directories under it: \linkgary and
\nolink. \linkgary is a redirect to another samba share. \nolink is
just a plain directory sitting in the top-level of the \\w2003\rootdfs
share.
I recently upgraded smbclient from 3.0.1 to 3.0.23b to get access to the
DFS compatibility. Doing this allowed me to "put" a file into the
\linkgary directory in the setup described above. However, if I try to
do a "put" into the \nolink directory (e.g. "put testfile", when I am
currently in that directory), I get back the error
NT_STATUS_FILE_IS_A_DIRECTORY. In both cases, there is no file already
in the directory I am writing to with the same name, let alone a
directory with the same name.
I have no such problem when connecting to a non-DFS share (even when on
a Windows server). When connecting to the DFS share from Windows XP
Professional, and copy/pasting a file into the \nolink directory, it
works fine.
This made me think that maybe the server is not playing nice with
smbclient, so I did an ethereal capture and discovered the following:-
From smbclient, the "put" command sends the following SMB commands
under the hood:
Open AndX Request
Write AndX Request
Close Request
Each of the commands receives a response like "Open AndX Response, FID:
0x4000 (STATUS_SUCCESS)" where the FID seems to be a file descriptor
used by the client in following connected requests (such as write and
close). However, in the case of doing a put when in the \nolink
directory, the server responds to the "Open AndX Request" with a
STATUS_FILE_IS_A_DIRECTORY.
I then did a capture of the Windows client doing a copy/paste into the
\nolink directory on the share, and got the following commands
NT Create AndX Request
Write AndX Request
Close Request
And each request had a response with STATUS_SUCCESS. I have googled
this and not been able to find any reference to "NT Create AndX Request"
in any list of valid SMB commands.
Additional problems I have encountered are:
- In \nolink, doing a "mkdir testdir" results in
"NT_STATUS_OBJECT_NAME_COLLISION making remote directory \nolink\testdir"
- In \nolink, doing a "del testfile" (on a file that exists at
\nolink\testfile) results in "NT_STATUS_NO_SUCH_FILE listing
\nolink\testfile"
- In \linkgary, doing a "del testfile" (on a file that exists at
\linkgary\testfile) results in "NT_STATUS_FILE_IS_A_DIRECTORY deleting
remote file \testfile"
So, my questions are:
- Is it valid (according to spec) to connect to a DFS share, cd to plain
non-DFS directories under it, and "put" files there (perhaps Windows
client just lets you do that (using undocumented SMB calls?) even though
it is not part of spec?)
- If it is valid, does smbclient support it (i.e. am I just doing this
wrong)? If so, how do I put files into such a directory?
- If smbclient does not support it, will it in the future? Is this a
bug, or an unimplemented feature?
Thanks for any help anyone can provide,
Gary
More information about the smb-clients
mailing list