s3/libsmb: Explicitly set delete_on_close token for rmdir
authorAnoop C S <anoopcs@redhat.com>
Thu, 9 Aug 2018 06:58:41 +0000 (12:28 +0530)
committerKarolin Seeger <kseeger@samba.org>
Thu, 23 Aug 2018 08:38:26 +0000 (10:38 +0200)
commit8bf5c11c892e1f8c1d77fe2efa2acf49c60b1241
treefbaf478ebfc29fe4c4bb03e0bff74ef7393dc156
parent04c66d8080452f11e8fe142956ea716843823b09
s3/libsmb: Explicitly set delete_on_close token for rmdir

The current implementation of `rmdir` hopes to get the directory deleted
on closing last open handle when FILE_DELETE_ON_CLOSE is set on it. But
for non-empty directories Windows doesn't error out during an open call.
Following that we internally refuse to set initial delete_on_close while
opening a non-empty directory. This prevents us from trying to delete
the directory when last open handle is closed.

Instead of relying on FILE_DELETE_ON_CLOSE during an open we explicitly
set delete_on_close token on directory handle once it is available. This
ensures that NT_STATUS_DIRECTORY_NOT_EMPTY is returned for `rmdir` on
non-empty directories while closing open directory handle.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13204

Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
(cherry picked from commit 6b68e3eca631c04d6d57c489daf60f64732fc86d)
source3/libsmb/cli_smb2_fnum.c