s4: [2/3] Fix a delete on close divergence from windows and the associated torture...
authorTim Prouty <tprouty@samba.org>
Sun, 7 Dec 2008 18:34:37 +0000 (10:34 -0800)
committerTim Prouty <tprouty@samba.org>
Wed, 10 Dec 2008 02:02:31 +0000 (18:02 -0800)
This second patch fixes the deltest17 BASE-DELETE torture test to pass
against win2k3/win2k8/winXPsp2

source4/torture/basic/delete.c

index b71c85a..c1ac62f 100644 (file)
@@ -950,15 +950,18 @@ static bool deltest17(struct torture_context *tctx, struct smbcli_state *cli1, s
 
        smbcli_close(cli1->tree, fnum1);
 
-       correct &= check_delete_on_close(tctx, cli1, fnum2, fname, false, __location__);
+       /* After the first close, the files has the delete on close bit set. */
+       correct &= check_delete_on_close(tctx, cli1, fnum2, fname, true, __location__);
 
        smbcli_close(cli1->tree, fnum2);
 
-       /* See if the file is deleted - shouldn't be.... */
+       /* Make sure the file has been deleted */
        fnum1 = smbcli_open(cli1->tree, fname, O_RDWR, DENY_NONE);
-       torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open of %s failed (should succeed) - %s", 
+       torture_assert(tctx, fnum1 == -1, talloc_asprintf(tctx, "open of %s failed (should succeed) - %s",
                       fname, smbcli_errstr(cli1->tree)));
 
+       CHECK_STATUS(cli1, NT_STATUS_OBJECT_NAME_NOT_FOUND);
+
        return correct;
 }
 
@@ -994,7 +997,12 @@ static bool deltest18(struct torture_context *tctx, struct smbcli_state *cli1, s
        torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 
                       dname, smbcli_errstr(cli1->tree)));
 
-       /* The delete on close bit is *not* reported as being set. */
+       /*
+        * The delete on close bit is *not* reported as being set.
+        * Win2k3/win2k8 should pass this check, but WinXPsp2 reports delete on
+        * close as being set.  This causes the subsequent create to fail with
+        * NT_STATUS_DELETE_PENDING.
+        */
        correct &= check_delete_on_close(tctx, cli1, fnum1, dname, false, __location__);
 
        /* Now try opening again for read-only. */
@@ -1082,7 +1090,12 @@ static bool deltest19(struct torture_context *tctx, struct smbcli_state *cli1, s
        torture_assert(tctx, fnum1 != -1, 
                talloc_asprintf(tctx, "open - 1 of %s failed (%s)", fname, smbcli_errstr(cli1->tree)));
 
-       /* The delete on close bit is *not* reported as being set. */
+       /*
+        * The delete on close bit is *not* reported as being set.
+        * Win2k3/win2k8 should pass this check, but WinXPsp2 reports delete on
+        * close as being set.  This causes the subsequent create to fail with
+        * NT_STATUS_DELETE_PENDING.
+        */
        correct &= check_delete_on_close(tctx, cli1, fnum1, dname, false, __location__);
 
        /* Now try opening again for read-only. */