summaryrefslogtreecommitdiff
path: root/source4/torture/basic
diff options
context:
space:
mode:
authorRichard Sharpe <richard.sharpe@primarydata.com>2017-07-27 14:07:47 -0700
committerVolker Lendecke <vl@samba.org>2017-07-28 11:47:06 +0200
commit2186d4d3170a25a624e05336f81ee4b08ee01d38 (patch)
tree875e2381ba00fb254cfe46df2c79f5690be58b9a /source4/torture/basic
parent886c26238adba21892bc5d0b36110ceb93ff0801 (diff)
downloadsamba-2186d4d3170a25a624e05336f81ee4b08ee01d38.tar.gz
Add a test for unsetting Delete-on-Close before the close by DoC opener.
Windows semantics says that any unset of Delete-on-Close before the client that opened for Delete-on-Close closes the file is silently ignored and the file is still deleted on the last close. This test tests that in a single open case. Signed-off-by: Richard Sharpe <realrichardsharpe@gmail.com> Reviewed-by: Volker Lendecke <vl@samba.org> Autobuild-User(master): Volker Lendecke <vl@samba.org> Autobuild-Date(master): Fri Jul 28 11:47:06 CEST 2017 on sn-devel-144
Diffstat (limited to 'source4/torture/basic')
-rw-r--r--source4/torture/basic/delete.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/source4/torture/basic/delete.c b/source4/torture/basic/delete.c
index ed098e04287..d74063c310f 100644
--- a/source4/torture/basic/delete.c
+++ b/source4/torture/basic/delete.c
@@ -2201,6 +2201,61 @@ static bool deltest23(struct torture_context *tctx,
return true;
}
+/* Test 24 ... */
+
+/*
+ * Test whether unsetting delete-on-close before the close has any effect.
+ * It should be ignored.
+ */
+static bool deltest24(struct torture_context *tctx)
+{
+ int fnum1 = -1;
+ struct smbcli_state *cli1;
+ bool correct = true;
+
+ if (!torture_open_connection(&cli1, tctx, 0))
+ return false;
+
+ smbcli_deltree(cli1->tree, fname);
+
+ fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0,
+ SEC_FILE_READ_DATA|
+ SEC_FILE_WRITE_DATA|
+ SEC_STD_DELETE,
+ FILE_ATTRIBUTE_NORMAL,
+ NTCREATEX_SHARE_ACCESS_READ|
+ NTCREATEX_SHARE_ACCESS_WRITE|
+ NTCREATEX_SHARE_ACCESS_DELETE,
+ NTCREATEX_DISP_CREATE,
+ NTCREATEX_OPTIONS_DELETE_ON_CLOSE, 0);
+
+ torture_assert(tctx, fnum1 != -1,
+ talloc_asprintf(tctx, "open of %s failed: %s!",
+ fname, smbcli_errstr(cli1->tree)));
+
+ /* Now, unset Delete-On-Close, but it should have no effect */
+ torture_assert_ntstatus_ok(
+ tctx, smbcli_nt_delete_on_close(cli1->tree, fnum1, false),
+ talloc_asprintf(tctx, "unsetting delete_on_close failed (%s)",
+ smbcli_errstr(cli1->tree)));
+
+ smbcli_close(cli1->tree, fnum1);
+
+ /* File should not be there. */
+ fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0,
+ SEC_RIGHTS_FILE_READ,
+ FILE_ATTRIBUTE_NORMAL,
+ NTCREATEX_SHARE_ACCESS_READ|
+ NTCREATEX_SHARE_ACCESS_WRITE|
+ NTCREATEX_SHARE_ACCESS_DELETE,
+ NTCREATEX_DISP_OPEN,
+ 0, 0);
+
+ CHECK_STATUS(cli1, NT_STATUS_OBJECT_NAME_NOT_FOUND);
+
+ return correct;
+}
+
/*
Test delete on close semantics.
*/
@@ -2241,6 +2296,7 @@ struct torture_suite *torture_test_delete(TALLOC_CTX *ctx)
torture_suite_add_simple_test(suite, "deltest21", deltest21);
torture_suite_add_simple_test(suite, "deltest22", deltest22);
torture_suite_add_2smb_test(suite, "deltest23", deltest23);
+ torture_suite_add_simple_test(suite, "deltest24", deltest24);
return suite;
}