s4:torture/rpc/netlogon.c - enhance the "DsRGetDCName*" tests
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 24 Nov 2011 09:20:24 +0000 (10:20 +0100)
committerStefan Metzmacher <metze@samba.org>
Mon, 2 Jan 2012 19:43:05 +0000 (20:43 +0100)
To check for the expected behaviour (DS_* flags). Always according to
MS-NRPC 2.2.1.2.1.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Mon Jan  2 20:43:05 CET 2012 on sn-devel-104

source4/torture/rpc/netlogon.c

index ab9ef02d39f00d639ab85576ef149dd56a9f2df5..f1d605c67413054561a25fe2500bd06d31c268b1 100644 (file)
@@ -2481,12 +2481,44 @@ static bool test_netr_DsRGetDCName(struct torture_context *tctx,
        torture_assert_ntstatus_ok(tctx, status, "DsRGetDCName");
        torture_assert_werr_ok(tctx, r.out.result, "DsRGetDCName");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)),
+                                DS_DNS_CONTROLLER,
+                                "DsRGetDCName");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)),
+                                DS_DNS_DOMAIN,
+                                "DsRGetDCName");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCName");
+
        r.in.domain_name        = lpcfg_workgroup(tctx->lp_ctx);
+       r.in.flags              = 0;
 
        status = dcerpc_netr_DsRGetDCName_r(b, tctx, &r);
        torture_assert_ntstatus_ok(tctx, status, "DsRGetDCName");
        torture_assert_werr_ok(tctx, r.out.result, "DsRGetDCName");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)), 0,
+                                "DsRGetDCName");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)), 0,
+                                "DsRGetDCName");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCName");
+
+       if (strcasecmp(info->dc_site_name, info->client_site_name) == 0) {
+               torture_assert_int_equal(tctx,
+                                        (info->dc_flags & (DS_SERVER_CLOSEST)),
+                                        DS_SERVER_CLOSEST,
+                                        "DsRGetDCName");
+       }
+
        return test_netr_DsRGetSiteName(p, tctx, 
                                       info->dc_unc,
                                       info->dc_site_name);
@@ -2514,12 +2546,44 @@ static bool test_netr_DsRGetDCNameEx(struct torture_context *tctx,
        torture_assert_ntstatus_ok(tctx, status, "netr_DsRGetDCNameEx");
        torture_assert_werr_ok(tctx, r.out.result, "netr_DsRGetDCNameEx");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)),
+                                DS_DNS_CONTROLLER,
+                                "DsRGetDCNameEx");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)),
+                                DS_DNS_DOMAIN,
+                                "DsRGetDCNameEx");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCNameEx");
+
        r.in.domain_name        = lpcfg_workgroup(tctx->lp_ctx);
+       r.in.flags              = 0;
 
        status = dcerpc_netr_DsRGetDCNameEx_r(b, tctx, &r);
        torture_assert_ntstatus_ok(tctx, status, "netr_DsRGetDCNameEx");
        torture_assert_werr_ok(tctx, r.out.result, "netr_DsRGetDCNameEx");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)), 0,
+                                "DsRGetDCNameEx");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)), 0,
+                                "DsRGetDCNameEx");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCNameEx");
+
+       if (strcasecmp(info->dc_site_name, info->client_site_name) == 0) {
+               torture_assert_int_equal(tctx,
+                                        (info->dc_flags & (DS_SERVER_CLOSEST)),
+                                        DS_SERVER_CLOSEST,
+                                        "DsRGetDCNameEx");
+       }
+
        return test_netr_DsRGetSiteName(p, tctx, info->dc_unc,
                                        info->dc_site_name);
 }
@@ -2544,6 +2608,19 @@ static bool test_netr_DsRGetDCNameEx2(struct torture_context *tctx,
        torture_assert_ntstatus_ok(tctx, status, "netr_DsRGetDCNameEx2");
        torture_assert_werr_ok(tctx, r.out.result, "netr_DsRGetDCNameEx2");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)),
+                                DS_DNS_CONTROLLER,
+                                "DsRGetDCNameEx2");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)),
+                                DS_DNS_DOMAIN,
+                                "DsRGetDCNameEx2");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCNameEx2");
+
        r.in.server_unc         = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
        r.in.client_account     = NULL;
        r.in.mask               = 0x00000000;
@@ -2560,11 +2637,30 @@ static bool test_netr_DsRGetDCNameEx2(struct torture_context *tctx,
        torture_assert_werr_ok(tctx, r.out.result, "netr_DsRGetDCNameEx2");
 
        r.in.domain_name        = lpcfg_workgroup(tctx->lp_ctx);
+       r.in.flags              = 0;
 
        status = dcerpc_netr_DsRGetDCNameEx2_r(b, tctx, &r);
        torture_assert_ntstatus_ok(tctx, status, "netr_DsRGetDCNameEx2");
        torture_assert_werr_ok(tctx, r.out.result, "netr_DsRGetDCNameEx2");
 
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_CONTROLLER)), 0,
+                                "DsRGetDCNameEx2");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_DOMAIN)), 0,
+                                "DsRGetDCNameEx2");
+       torture_assert_int_equal(tctx,
+                                (info->dc_flags & (DS_DNS_FOREST_ROOT)),
+                                DS_DNS_FOREST_ROOT,
+                                "DsRGetDCNameEx2");
+
+       if (strcasecmp(info->dc_site_name, info->client_site_name) == 0) {
+               torture_assert_int_equal(tctx,
+                                        (info->dc_flags & (DS_SERVER_CLOSEST)),
+                                        DS_SERVER_CLOSEST,
+                                        "DsRGetDCNameEx2");
+       }
+
        torture_comment(tctx, "Testing netr_DsRGetDCNameEx2 with client account\n");
        r.in.client_account     = TEST_MACHINE_NAME"$";
        r.in.mask               = ACB_SVRTRUST;