diff options
-rw-r--r-- | source4/torture/rpc/netlogon.c | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c index c2eb872462..9758185046 100644 --- a/source4/torture/rpc/netlogon.c +++ b/source4/torture/rpc/netlogon.c @@ -2357,6 +2357,55 @@ static bool test_netr_DsRGetDCNameEx2(struct torture_context *tctx, info->dc_site_name); } +/* This is a substitution for "samdb_server_site_name" which relies on the + * correct "lp_ctx" and therefore can't be used here. */ +static const char *server_site_name(struct torture_context *tctx, + struct ldb_context *ldb) +{ + TALLOC_CTX *tmp_ctx; + struct ldb_dn *dn, *server_dn; + const struct ldb_val *site_name_val; + const char *server_dn_str, *site_name; + + tmp_ctx = talloc_new(ldb); + if (tmp_ctx == NULL) { + goto failed; + } + + dn = ldb_dn_new(tmp_ctx, ldb, ""); + if (dn == NULL) { + goto failed; + } + + server_dn_str = samdb_search_string(ldb, tmp_ctx, dn, "serverName", + NULL); + if (server_dn_str == NULL) { + goto failed; + } + + server_dn = ldb_dn_new(tmp_ctx, ldb, server_dn_str); + if (server_dn == NULL) { + goto failed; + } + + /* CN=<Server name>, CN=Servers, CN=<Site name>, CN=Sites, ... */ + site_name_val = ldb_dn_get_component_val(server_dn, 2); + if (site_name_val == NULL) { + goto failed; + } + + site_name = (const char *) site_name_val->data; + + talloc_steal(tctx, site_name); + talloc_free(tmp_ctx); + + return site_name; + +failed: + talloc_free(tmp_ctx); + return NULL; +} + static bool test_netr_DsrGetDcSiteCoverageW(struct torture_context *tctx, struct dcerpc_pipe *p) { @@ -2392,7 +2441,7 @@ static bool test_netr_DsrGetDcSiteCoverageW(struct torture_context *tctx, "we should per default only get the default site"); if (sam_ctx != NULL) { torture_assert_casestr_equal(tctx, ctr->sites[0].string, - samdb_server_site_name(sam_ctx, tctx), + server_site_name(tctx, sam_ctx), "didn't return default site"); } @@ -2514,7 +2563,7 @@ static bool test_netr_DsRAddressToSitenamesW(struct torture_context *tctx, for (i = 0; i < 3; i++) { torture_assert_casestr_equal(tctx, ctr->sitename[i].string, - samdb_server_site_name(sam_ctx, tctx), + server_site_name(tctx, sam_ctx), "didn't return default site"); } for (i = 3; i < 6; i++) { @@ -2523,7 +2572,7 @@ static bool test_netr_DsRAddressToSitenamesW(struct torture_context *tctx, if (torture_setting_bool(tctx, "samba4", false)) { torture_assert_casestr_equal(tctx, ctr->sitename[i].string, - samdb_server_site_name(sam_ctx, tctx), + server_site_name(tctx, sam_ctx), "didn't return default site"); } } @@ -2691,7 +2740,7 @@ static bool test_netr_DsRAddressToSitenamesExW(struct torture_context *tctx, for (i = 0; i < 3; i++) { torture_assert_casestr_equal(tctx, ctr->sitename[i].string, - samdb_server_site_name(sam_ctx, tctx), + server_site_name(tctx, sam_ctx), "didn't return default site"); torture_assert(tctx, ctr->subnetname[i].string == NULL, "subnet should be null"); @@ -2702,7 +2751,7 @@ static bool test_netr_DsRAddressToSitenamesExW(struct torture_context *tctx, if (torture_setting_bool(tctx, "samba4", false)) { torture_assert_casestr_equal(tctx, ctr->sitename[i].string, - samdb_server_site_name(sam_ctx, tctx), + server_site_name(tctx, sam_ctx), "didn't return default site"); } torture_assert(tctx, ctr->subnetname[i].string == NULL, |