From: Günther Deschner Date: Fri, 11 Nov 2016 18:17:55 +0000 (+0100) Subject: s4-torture: add spoolss_SetPrinter ndr test to validate secdesc_ptr X-Git-Tag: samba-4.4.9~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6eebf79f9b26943774de07bc6efd684e8094d29;p=thirdparty%2Fsamba.git s4-torture: add spoolss_SetPrinter ndr test to validate secdesc_ptr BUG: https://bugzilla.samba.org/show_bug.cgi?id=11197 Guenther Signed-off-by: Guenther Deschner Reviewed-by: Jeremy Allison (cherry picked from commit 574dd65a8185c90828e49b295d89153bae1563bf) Autobuild-User(v4-4-test): Karolin Seeger Autobuild-Date(v4-4-test): Fri Nov 18 12:29:24 CET 2016 on sn-devel-144 --- diff --git a/source4/torture/ndr/spoolss.c b/source4/torture/ndr/spoolss.c index 5818fdf209a..960abd2843f 100644 --- a/source4/torture/ndr/spoolss.c +++ b/source4/torture/ndr/spoolss.c @@ -1768,6 +1768,61 @@ static bool rpcsetjobnamedproperty_req_check(struct torture_context *tctx, return true; } +static const uint8_t setprinter_level_3_xpsp3_req_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2b, 0x55, 0x94, 0xbe, 0x50, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0xd1, 0xe9, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa0, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, + 0x00, 0x09, 0x18, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x08, 0x00, 0x02, 0x00, 0x01, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xa4, 0xc0, 0x7d, 0x3b, + 0xcc, 0xce, 0x29, 0xa7, 0xd1, 0xc7, 0xe9, 0xd4, 0x50, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00, + 0x00, 0x09, 0x18, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static bool setprinter_level_3_xpsp3_req_check(struct torture_context *tctx, + struct spoolss_SetPrinter *r) +{ + struct GUID guid; + + torture_assert_ntstatus_ok(tctx, + GUID_from_string("0000053c-0000-0000-2b55-94be50280000", &guid), + "failed to parse GUID"); + torture_assert_int_equal(tctx, r->in.handle->handle_type, 0, "handle_type"); + torture_assert_guid_equal(tctx, r->in.handle->uuid, guid, "handle.uuid"); + + torture_assert(tctx, r->in.info_ctr, "info_ctr"); + torture_assert_int_equal(tctx, r->in.info_ctr->level, 3, "level"); + torture_assert_int_equal(tctx, r->in.info_ctr->info.info3->sec_desc_ptr, 0x06e9d108, "sec_desc_ptr"); + + torture_assert(tctx, r->in.devmode_ctr, "devmode_ctr"); + torture_assert_int_equal(tctx, r->in.devmode_ctr->_ndr_size, 0, "_ndr_size"); + torture_assert(tctx, r->in.devmode_ctr->devmode == NULL, "devmode"); + + torture_assert(tctx, r->in.secdesc_ctr, "secdesc_ctr"); + torture_assert_int_equal(tctx, r->in.secdesc_ctr->sd_size, 0x000000b4, "sd_size"); + torture_assert_int_equal(tctx, r->in.secdesc_ctr->sd->revision, SECURITY_DESCRIPTOR_REVISION_1, "revision"); + torture_assert_int_equal(tctx, r->in.secdesc_ctr->sd->type, 0x8004, "type"); + torture_assert(tctx, r->in.secdesc_ctr->sd, "sd"); + torture_assert(tctx, r->in.secdesc_ctr->sd->owner_sid == NULL, "owner_sid"); + torture_assert(tctx, r->in.secdesc_ctr->sd->group_sid == NULL, "group_sid"); + torture_assert(tctx, r->in.secdesc_ctr->sd->sacl == NULL, "sacl"); + torture_assert(tctx, r->in.secdesc_ctr->sd->dacl, "dacl"); + + return true; +} + struct torture_suite *ndr_spoolss_suite(TALLOC_CTX *ctx) { struct torture_suite *suite = torture_suite_create(ctx, "spoolss"); @@ -1831,5 +1886,7 @@ struct torture_suite *ndr_spoolss_suite(TALLOC_CTX *ctx) torture_suite_add_ndr_pull_fn_test(suite, spoolss_RpcSetJobNamedProperty, rpcsetjobnamedproperty_req_data, NDR_IN, rpcsetjobnamedproperty_req_check); + torture_suite_add_ndr_pull_fn_test(suite, spoolss_SetPrinter, setprinter_level_3_xpsp3_req_data, NDR_IN, setprinter_level_3_xpsp3_req_check); + return suite; }