Folder can be renamed with an open file inside the same folder from different client

Shilpa K shilpa.krishnareddy at
Tue Oct 1 05:16:31 MDT 2013


Renaming a folder succeeds in the following scenario when it should
actually fail:

1.      Client 1 has opened the file temp.doc which is present in the
directory TESTDIR

2.      Client 2 tries to rename the directory TESTDIR to DIR1 and it

On the other hand, if the windows client tries to rename a directory from
client 2 wherein client 1 has opened a file under that directory, the
operation results in access denied. Samba also sends access denied error
when we try to rename the directory from the same client where the file is
opened under it. In this case, the following code takes care of returning
the appropriate error:

                /* If no pathnames are open below this

                   directory, allow the rename. */

                if (file_find_subpath(fsp)) {

                       return NT_STATUS_ACCESS_DENIED;


file_find_subpath() goes through the connection list for that particular
client and if a directory has file open under it, it returns access denied.
The reason this code is not working in case of multiple clients is because
the connection list is specific to a particular SMBD process and not
visible to other SMBD processes. As for as I understand, the only way the
other SMBD processes can know if the file in a directory is open is through
locking.tdb. But traversing locking.tdb to find an open file under a
particular directory can be a tedious operation. Is there a simpler way by
which we can find out if the file is open under a directory when we try to
rename it?



More information about the samba-technical mailing list