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

Richard Sharpe realrichardsharpe at gmail.com
Wed Oct 2 11:09:21 MDT 2013


On Wed, Oct 2, 2013 at 9:02 AM, Jeremy Allison <jra at samba.org> wrote:
> On Tue, Oct 01, 2013 at 04:46:31PM +0530, Shilpa K wrote:
>> Hello,
>>
>> 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
>> succeeds.
>>
>> 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?
>
> Yeah, this is something we've known about for a while.
> It's not easy to fix given our current architecture.
>
> Also look at the code inside unix_convert() inside
> source3/smbd/filename.c for the comment around
> the #if defined(DEVELOPER) section.

Do we know what Windows does in all cases here?

For example, if you have a path A\B\C\D which are all folders,
including D, and in D you have files F1, F2, ...

If you have F1 open, we know that you should not be able to rename D,
but does Windows allow you to rename C or does it disallow renames all
the way up the tree?

-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)


More information about the samba-technical mailing list