s4-smbtorture: more work on SD tests for RPC-SPOOLSS.
authorGünther Deschner <gd@samba.org>
Mon, 15 Feb 2010 21:06:42 +0000 (22:06 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 15 Feb 2010 21:17:01 +0000 (22:17 +0100)
Guenther

source4/torture/rpc/spoolss.c

index 6e57be680dcd6472d2b0fc219c836319c5b5f032..05eee623a5a0d266aee101565ba8d27569afc784 100644 (file)
@@ -1645,32 +1645,53 @@ static bool test_PrinterInfo_SDs(struct torture_context *tctx,
                                 struct policy_handle *handle)
 {
        union spoolss_PrinterInfo info;
-       union spoolss_PrinterInfo info_2;
        struct security_descriptor *sd1, *sd2;
        int i;
 
-       /* level 2 */
+       /* just compare level 2 and level 3 */
 
        torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
 
-       sd1 = security_descriptor_copy(tctx, info.info2.secdesc);
+       sd1 = info.info2.secdesc;
+
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 3, &info), "");
+
+       sd2 = info.info3.secdesc;
+
+       torture_assert(tctx, test_security_descriptor_equal(tctx, sd1, sd2), "");
+
+
+       /* query level 2, set level 2, query level 2 */
+
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
+
+       sd1 = info.info2.secdesc;
 
        torture_assert(tctx, test_sd_set_level(tctx, p, handle, 2, sd1), "");
 
-       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info_2), "");
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
 
-       sd2 = security_descriptor_copy(tctx, info_2.info2.secdesc);
+       sd2 = info.info2.secdesc;
+
+       torture_assert(tctx, test_security_descriptor_equal(tctx, sd1, sd2), "");
 
-       if (sd1->type & SEC_DESC_DACL_DEFAULTED) {
-               torture_comment(tctx, "removing SEC_DESC_DACL_DEFAULTED from 1st for comparison\n");
-               sd1->type &= ~SEC_DESC_DACL_DEFAULTED;
-       }
+
+       /* query level 2, set level 3, query level 2 */
+
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
+
+       sd1 = info.info2.secdesc;
+
+       torture_assert(tctx, test_sd_set_level(tctx, p, handle, 3, sd1), "");
+
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
+
+       sd2 = info.info2.secdesc;
 
        torture_assert(tctx, test_security_descriptor_equal(tctx, sd1, sd2), "");
 
-       /* level 3 */
 
-       sd1 = sd2;
+       /* set modified sd level 3, query level 2 */
 
        for (i=0; i < 93; i++) {
                struct security_ace a;
@@ -1685,8 +1706,13 @@ static bool test_PrinterInfo_SDs(struct torture_context *tctx,
 
        torture_assert(tctx, test_sd_set_level(tctx, p, handle, 3, sd1), "");
 
-       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info_2), "");
-       sd2 = security_descriptor_copy(tctx, info_2.info2.secdesc);
+       torture_assert(tctx, test_GetPrinter_level(tctx, p, handle, 2, &info), "");
+       sd2 = info.info2.secdesc;
+
+       if (sd1->type & SEC_DESC_DACL_DEFAULTED) {
+               torture_comment(tctx, "removing SEC_DESC_DACL_DEFAULTED\n");
+               sd1->type &= ~SEC_DESC_DACL_DEFAULTED;
+       }
 
        torture_assert(tctx, test_security_descriptor_equal(tctx, sd1, sd2), "");