summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-02-06 19:43:24 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:51:50 -0500
commit2b163e64f58d3e5f27b0ff11f70c77a6c764658b (patch)
treed19532bfa178e7fa53a43355eb11d54d041e7b68
parentb56282dec786683055f65f25ec419113bd7aa297 (diff)
downloadsamba-2b163e64f58d3e5f27b0ff11f70c77a6c764658b.tar.gz
samba-2b163e64f58d3e5f27b0ff11f70c77a6c764658b.tar.bz2
samba-2b163e64f58d3e5f27b0ff11f70c77a6c764658b.zip
r13370: Added deltest21 - pull the rug out from a connection by socket
close after setting delete on close flag. Jeremy. (This used to be commit fbea18e78f8a3c6dbb36aa935b7044c0fcf61da4)
-rw-r--r--source4/torture/basic/delete.c171
1 files changed, 90 insertions, 81 deletions
diff --git a/source4/torture/basic/delete.c b/source4/torture/basic/delete.c
index 983f67ad1a..226e5a5aa4 100644
--- a/source4/torture/basic/delete.c
+++ b/source4/torture/basic/delete.c
@@ -1208,7 +1208,8 @@ static BOOL deltest17(struct smbcli_state *cli1, struct smbcli_state *cli2)
/* Now try opening again for read-only. */
fnum2 = smbcli_nt_create_full(cli1->tree, fname, 0,
- SEC_RIGHTS_FILE_READ,
+ SEC_RIGHTS_FILE_READ|
+ SEC_STD_DELETE,
FILE_ATTRIBUTE_NORMAL,
NTCREATEX_SHARE_ACCESS_READ|
NTCREATEX_SHARE_ACCESS_WRITE|
@@ -1532,6 +1533,68 @@ static BOOL deltest20(struct smbcli_state *cli1, struct smbcli_state *cli2)
return correct;
}
+/* Test 21 ... */
+static BOOL deltest21(struct smbcli_state **ppcli1, struct smbcli_state **ppcli2)
+{
+ int fnum1 = -1;
+ struct smbcli_state *cli1 = *ppcli1;
+ struct smbcli_state *cli2 = *ppcli2;
+ BOOL correct = True;
+
+ del_clean_area(cli1, cli2);
+
+ /* Test 21 -- Test removal of file after socket close. */
+
+ fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0,
+ SEC_RIGHTS_FILE_ALL,
+ FILE_ATTRIBUTE_NORMAL, NTCREATEX_SHARE_ACCESS_NONE,
+ NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
+
+ if (fnum1 == -1) {
+ printf("(%s) open of %s failed (%s)\n",
+ __location__, fname, smbcli_errstr(cli1->tree));
+ return False;
+ }
+
+ if (NT_STATUS_IS_ERR(smbcli_nt_delete_on_close(cli1->tree, fnum1, True))) {
+ printf("(%s) setting delete_on_close failed (%s)\n",
+ __location__, smbcli_errstr(cli1->tree));
+ return False;
+ }
+
+ /* Ensure delete on close is set. */
+ check_delete_on_close(cli1, fnum1, fname, True);
+
+ /* Now yank the rug from under cli1. */
+ smbcli_transport_dead(cli1->transport);
+
+ fnum1 = -1;
+
+ if (!torture_open_connection(ppcli1)) {
+ return False;
+ }
+
+ cli1 = *ppcli1;
+
+ /* 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);
+
+ printf("twenty-first delete on close test succeeded.\n");
+
+ fail:
+
+ return correct;
+}
+
/*
Test delete on close semantics.
*/
@@ -1554,87 +1617,33 @@ BOOL torture_test_delete(void)
goto fail;
}
- if (!deltest1(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest2(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest3(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest4(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest5(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest6(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest7(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest8(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest9(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest10(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest11(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest12(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest13(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest14(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest15(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest16(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest17(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest18(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest19(cli1, cli2)) {
- correct = False;
- goto fail;
- }
- if (!deltest20(cli1, cli2)) {
- correct = False;
- goto fail;
+ correct &= deltest1(cli1, cli2);
+ correct &= deltest2(cli1, cli2);
+ correct &= deltest3(cli1, cli2);
+ correct &= deltest4(cli1, cli2);
+ correct &= deltest5(cli1, cli2);
+ correct &= deltest6(cli1, cli2);
+ correct &= deltest7(cli1, cli2);
+ correct &= deltest8(cli1, cli2);
+ correct &= deltest9(cli1, cli2);
+ correct &= deltest10(cli1, cli2);
+ correct &= deltest11(cli1, cli2);
+ correct &= deltest12(cli1, cli2);
+ correct &= deltest13(cli1, cli2);
+ correct &= deltest14(cli1, cli2);
+ correct &= deltest15(cli1, cli2);
+ correct &= deltest16(cli1, cli2);
+ correct &= deltest17(cli1, cli2);
+ correct &= deltest18(cli1, cli2);
+ correct &= deltest19(cli1, cli2);
+ correct &= deltest20(cli1, cli2);
+ correct &= deltest21(&cli1, &cli2);
+
+ if (!correct) {
+ printf("Failed delete test\n");
+ } else {
+ printf("delete test ok !\n");
}
- printf("finished delete test\n");
fail:
del_clean_area(cli1, cli2);