summaryrefslogtreecommitdiff
path: root/source4/torture/rpc
diff options
context:
space:
mode:
authorKamen Mazdrashki <kamen.mazdrashki@postpath.com>2009-08-28 18:19:54 +0300
committerAndrew Bartlett <abartlet@samba.org>2009-09-08 22:44:49 +1000
commitd078d2efe8c58adb6f1ed93c06797588ce361bd5 (patch)
treece23685ae0f3c27bfcac0e18fd65f0fe07fc9166 /source4/torture/rpc
parent5e3759d122aac95fd3a99898e37f64d76e4eeee8 (diff)
downloadsamba-d078d2efe8c58adb6f1ed93c06797588ce361bd5.tar.gz
samba-d078d2efe8c58adb6f1ed93c06797588ce361bd5.tar.bz2
samba-d078d2efe8c58adb6f1ed93c06797588ce361bd5.zip
tort: Helper function to get DC info for testing
Diffstat (limited to 'source4/torture/rpc')
-rw-r--r--source4/torture/rpc/drsuapi.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c
index ac16dc6e63..88d6b78124 100644
--- a/source4/torture/rpc/drsuapi.c
+++ b/source4/torture/rpc/drsuapi.c
@@ -772,6 +772,59 @@ bool torture_rpc_drsuapi(struct torture_context *torture)
return ret;
}
+/**
+ * Helper func to collect DC information for testing purposes.
+ * This function is almost identical to test_DsGetDomainControllerInfo
+ */
+bool torture_rpc_drsuapi_get_dcinfo(struct torture_context *torture,
+ struct DsPrivate *priv)
+{
+ NTSTATUS status;
+ int32_t level_out = 0;
+ struct drsuapi_DsGetDomainControllerInfo r;
+ union drsuapi_DsGetDCInfoCtr ctr;
+ int j, k;
+ const char *names[] = {
+ torture_join_dom_netbios_name(priv->join),
+ torture_join_dom_dns_name(priv->join)};
+
+ for (j=0; j < ARRAY_SIZE(names); j++) {
+ union drsuapi_DsGetDCInfoRequest req;
+ r.in.bind_handle = &priv->bind_handle;
+ r.in.level = 1;
+ r.in.req = &req;
+
+ r.in.req->req1.domain_name = names[j];
+ r.in.req->req1.level = 2;
+
+ r.out.ctr = &ctr;
+ r.out.level_out = &level_out;
+
+ status = dcerpc_drsuapi_DsGetDomainControllerInfo(priv->pipe, torture, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ continue;
+ }
+ if (!W_ERROR_IS_OK(r.out.result)) {
+ /* If this was an error, we can't read the result structure */
+ continue;
+ }
+
+ for (k=0; k < r.out.ctr->ctr2.count; k++) {
+ if (strcasecmp_m(r.out.ctr->ctr2.array[k].netbios_name,
+ torture_join_netbios_name(priv->join)) == 0) {
+ priv->dcinfo = r.out.ctr->ctr2.array[k];
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Common test case setup function to be used
+ * in DRS suit of test when appropriate
+ */
bool torture_rpc_drsuapi_tcase_setup(struct torture_context *tctx, void **data)
{
NTSTATUS status;