]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4-drsuapi: merge drsuapi_DsGetNCChanges from s3 drsuapi idl.
authorGünther Deschner <gd@samba.org>
Fri, 17 Oct 2008 18:32:36 +0000 (20:32 +0200)
committerGünther Deschner <gd@samba.org>
Sat, 18 Oct 2008 21:06:39 +0000 (23:06 +0200)
Guenther

source4/dsdb/repl/drepl_out_helpers.c
source4/libnet/libnet_become_dc.c
source4/librpc/idl/drsuapi.idl
source4/torture/rpc/drsuapi.c
source4/torture/rpc/dssync.c

index 800645014d208371b96b4f7a7aecbc605352cd25..c292c6db744e4001f3ddcb834bf1ebf69287c56e 100644 (file)
@@ -246,40 +246,42 @@ static void dreplsrv_op_pull_source_get_changes_send(struct dreplsrv_op_pull_sou
        r = talloc(st, struct drsuapi_DsGetNCChanges);
        if (composite_nomem(r, c)) return;
 
-       r->in.level = talloc(r, int32_t);
-       if (composite_nomem(r->in.level, c)) return;
-       r->out.level = talloc(r, int32_t);
-       if (composite_nomem(r->out.level, c)) return;
+       r->out.level_out = talloc(r, int32_t);
+       if (composite_nomem(r->out.level_out, c)) return;
+       r->in.req = talloc(r, union drsuapi_DsGetNCChangesRequest);
+       if (composite_nomem(r->in.req, c)) return;
+       r->out.ctr = talloc(r, union drsuapi_DsGetNCChangesCtr);
+       if (composite_nomem(r->out.ctr, c)) return;
 
        r->in.bind_handle       = &drsuapi->bind_handle;
        if (drsuapi->remote_info28.supported_extensions & DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8) {
-               *r->in.level                            = 8;
-               r->in.req.req8.destination_dsa_guid     = service->ntds_guid;
-               r->in.req.req8.source_dsa_invocation_id = rf1->source_dsa_invocation_id;
-               r->in.req.req8.naming_context           = &partition->nc;
-               r->in.req.req8.highwatermark            = rf1->highwatermark;
-               r->in.req.req8.uptodateness_vector      = NULL;/*&partition->uptodatevector_ex;*/
-               r->in.req.req8.replica_flags            = rf1->replica_flags;
-               r->in.req.req8.max_object_count         = 133;
-               r->in.req.req8.max_ndr_size             = 1336811;
-               r->in.req.req8.extended_op              = DRSUAPI_EXOP_NONE;
-               r->in.req.req8.fsmo_info                = 0;
-               r->in.req.req8.partial_attribute_set    = NULL;
-               r->in.req.req8.partial_attribute_set_ex = NULL;
-               r->in.req.req8.mapping_ctr.num_mappings = 0;
-               r->in.req.req8.mapping_ctr.mappings     = NULL;
+               r->in.level                             = 8;
+               r->in.req->req8.destination_dsa_guid    = service->ntds_guid;
+               r->in.req->req8.source_dsa_invocation_id= rf1->source_dsa_invocation_id;
+               r->in.req->req8.naming_context          = &partition->nc;
+               r->in.req->req8.highwatermark           = rf1->highwatermark;
+               r->in.req->req8.uptodateness_vector     = NULL;/*&partition->uptodatevector_ex;*/
+               r->in.req->req8.replica_flags           = rf1->replica_flags;
+               r->in.req->req8.max_object_count        = 133;
+               r->in.req->req8.max_ndr_size            = 1336811;
+               r->in.req->req8.extended_op             = DRSUAPI_EXOP_NONE;
+               r->in.req->req8.fsmo_info               = 0;
+               r->in.req->req8.partial_attribute_set   = NULL;
+               r->in.req->req8.partial_attribute_set_ex= NULL;
+               r->in.req->req8.mapping_ctr.num_mappings= 0;
+               r->in.req->req8.mapping_ctr.mappings    = NULL;
        } else {
-               *r->in.level                            = 5;
-               r->in.req.req5.destination_dsa_guid     = service->ntds_guid;
-               r->in.req.req5.source_dsa_invocation_id = rf1->source_dsa_invocation_id;
-               r->in.req.req5.naming_context           = &partition->nc;
-               r->in.req.req5.highwatermark            = rf1->highwatermark;
-               r->in.req.req5.uptodateness_vector      = NULL;/*&partition->uptodatevector_ex;*/
-               r->in.req.req5.replica_flags            = rf1->replica_flags;
-               r->in.req.req5.max_object_count         = 133;
-               r->in.req.req5.max_ndr_size             = 1336770;
-               r->in.req.req5.extended_op              = DRSUAPI_EXOP_NONE;
-               r->in.req.req5.fsmo_info                = 0;
+               r->in.level                             = 5;
+               r->in.req->req5.destination_dsa_guid    = service->ntds_guid;
+               r->in.req->req5.source_dsa_invocation_id= rf1->source_dsa_invocation_id;
+               r->in.req->req5.naming_context          = &partition->nc;
+               r->in.req->req5.highwatermark           = rf1->highwatermark;
+               r->in.req->req5.uptodateness_vector     = NULL;/*&partition->uptodatevector_ex;*/
+               r->in.req->req5.replica_flags           = rf1->replica_flags;
+               r->in.req->req5.max_object_count        = 133;
+               r->in.req->req5.max_ndr_size            = 1336770;
+               r->in.req->req5.extended_op             = DRSUAPI_EXOP_NONE;
+               r->in.req->req5.fsmo_info               = 0;
        }
 
        req = dcerpc_drsuapi_DsGetNCChanges_send(drsuapi->pipe, r, r);
@@ -311,28 +313,28 @@ static void dreplsrv_op_pull_source_get_changes_recv(struct rpc_request *req)
                return;
        }
 
-       if (*r->out.level == 1) {
+       if (*r->out.level_out == 1) {
                ctr_level = 1;
-               ctr1 = &r->out.ctr.ctr1;
-       } else if (*r->out.level == 2 &&
-                  r->out.ctr.ctr2.mszip1.ts) {
+               ctr1 = &r->out.ctr->ctr1;
+       } else if (*r->out.level_out == 2 &&
+                  r->out.ctr->ctr2.mszip1.ts) {
                ctr_level = 1;
-               ctr1 = &r->out.ctr.ctr2.mszip1.ts->ctr1;
-       } else if (*r->out.level == 6) {
+               ctr1 = &r->out.ctr->ctr2.mszip1.ts->ctr1;
+       } else if (*r->out.level_out == 6) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr6;
-       } else if (*r->out.level == 7 &&
-                  r->out.ctr.ctr7.level == 6 &&
-                  r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
-                  r->out.ctr.ctr7.ctr.mszip6.ts) {
+               ctr6 = &r->out.ctr->ctr6;
+       } else if (*r->out.level_out == 7 &&
+                  r->out.ctr->ctr7.level == 6 &&
+                  r->out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
+                  r->out.ctr->ctr7.ctr.mszip6.ts) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr7.ctr.mszip6.ts->ctr6;
-       } else if (*r->out.level == 7 &&
-                  r->out.ctr.ctr7.level == 6 &&
-                  r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
-                  r->out.ctr.ctr7.ctr.xpress6.ts) {
+               ctr6 = &r->out.ctr->ctr7.ctr.mszip6.ts->ctr6;
+       } else if (*r->out.level_out == 7 &&
+                  r->out.ctr->ctr7.level == 6 &&
+                  r->out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
+                  r->out.ctr->ctr7.ctr.xpress6.ts) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr7.ctr.xpress6.ts->ctr6;
+               ctr6 = &r->out.ctr->ctr7.ctr.xpress6.ts->ctr6;
        } else {
                composite_error(c, werror_to_ntstatus(WERR_BAD_NET_RESP));
                return;
index c79f731cd9975a018ac88067e481c9f54c6319bf..6e7924248c632ff8b5b0ad63691641e4227b7297 100644 (file)
@@ -2396,40 +2396,42 @@ static void becomeDC_drsuapi_pull_partition_send(struct libnet_BecomeDC_state *s
        r = talloc(s, struct drsuapi_DsGetNCChanges);
        if (composite_nomem(r, c)) return;
 
-       r->in.level = talloc(r, int32_t);
-       if (composite_nomem(r->in.level, c)) return;
-       r->out.level = talloc(r, int32_t);
-       if (composite_nomem(r->out.level, c)) return;
+       r->out.level_out = talloc(r, int32_t);
+       if (composite_nomem(r->out.level_out, c)) return;
+       r->in.req = talloc(r, union drsuapi_DsGetNCChangesRequest);
+       if (composite_nomem(r->in.req, c)) return;
+       r->out.ctr = talloc(r, union drsuapi_DsGetNCChangesCtr);
+       if (composite_nomem(r->out.ctr, c)) return;
 
        r->in.bind_handle       = &drsuapi_h->bind_handle;
        if (drsuapi_h->remote_info28.supported_extensions & DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8) {
-               *r->in.level                            = 8;
-               r->in.req.req8.destination_dsa_guid     = partition->destination_dsa_guid;
-               r->in.req.req8.source_dsa_invocation_id = partition->source_dsa_invocation_id;
-               r->in.req.req8.naming_context           = &partition->nc;
-               r->in.req.req8.highwatermark            = partition->highwatermark;
-               r->in.req.req8.uptodateness_vector      = NULL;
-               r->in.req.req8.replica_flags            = partition->replica_flags;
-               r->in.req.req8.max_object_count         = 133;
-               r->in.req.req8.max_ndr_size             = 1336811;
-               r->in.req.req8.extended_op              = DRSUAPI_EXOP_NONE;
-               r->in.req.req8.fsmo_info                = 0;
-               r->in.req.req8.partial_attribute_set    = NULL;
-               r->in.req.req8.partial_attribute_set_ex = NULL;
-               r->in.req.req8.mapping_ctr.num_mappings = 0;
-               r->in.req.req8.mapping_ctr.mappings     = NULL;
+               r->in.level                             = 8;
+               r->in.req->req8.destination_dsa_guid    = partition->destination_dsa_guid;
+               r->in.req->req8.source_dsa_invocation_id= partition->source_dsa_invocation_id;
+               r->in.req->req8.naming_context          = &partition->nc;
+               r->in.req->req8.highwatermark           = partition->highwatermark;
+               r->in.req->req8.uptodateness_vector     = NULL;
+               r->in.req->req8.replica_flags           = partition->replica_flags;
+               r->in.req->req8.max_object_count        = 133;
+               r->in.req->req8.max_ndr_size            = 1336811;
+               r->in.req->req8.extended_op             = DRSUAPI_EXOP_NONE;
+               r->in.req->req8.fsmo_info               = 0;
+               r->in.req->req8.partial_attribute_set   = NULL;
+               r->in.req->req8.partial_attribute_set_ex= NULL;
+               r->in.req->req8.mapping_ctr.num_mappings= 0;
+               r->in.req->req8.mapping_ctr.mappings    = NULL;
        } else {
-               *r->in.level                            = 5;
-               r->in.req.req5.destination_dsa_guid     = partition->destination_dsa_guid;
-               r->in.req.req5.source_dsa_invocation_id = partition->source_dsa_invocation_id;
-               r->in.req.req5.naming_context           = &partition->nc;
-               r->in.req.req5.highwatermark            = partition->highwatermark;
-               r->in.req.req5.uptodateness_vector      = NULL;
-               r->in.req.req5.replica_flags            = partition->replica_flags;
-               r->in.req.req5.max_object_count         = 133;
-               r->in.req.req5.max_ndr_size             = 1336770;
-               r->in.req.req5.extended_op              = DRSUAPI_EXOP_NONE;
-               r->in.req.req5.fsmo_info                = 0;
+               r->in.level                             = 5;
+               r->in.req->req5.destination_dsa_guid    = partition->destination_dsa_guid;
+               r->in.req->req5.source_dsa_invocation_id= partition->source_dsa_invocation_id;
+               r->in.req->req5.naming_context          = &partition->nc;
+               r->in.req->req5.highwatermark           = partition->highwatermark;
+               r->in.req->req5.uptodateness_vector     = NULL;
+               r->in.req->req5.replica_flags           = partition->replica_flags;
+               r->in.req->req5.max_object_count        = 133;
+               r->in.req->req5.max_ndr_size            = 1336770;
+               r->in.req->req5.extended_op             = DRSUAPI_EXOP_NONE;
+               r->in.req->req5.fsmo_info               = 0;
        }
 
        /* 
@@ -2461,28 +2463,28 @@ static WERROR becomeDC_drsuapi_pull_partition_recv(struct libnet_BecomeDC_state
                return r->out.result;
        }
 
-       if (*r->out.level == 1) {
+       if (*r->out.level_out == 1) {
                ctr_level = 1;
-               ctr1 = &r->out.ctr.ctr1;
-       } else if (*r->out.level == 2 &&
-                  r->out.ctr.ctr2.mszip1.ts) {
+               ctr1 = &r->out.ctr->ctr1;
+       } else if (*r->out.level_out == 2 &&
+                  r->out.ctr->ctr2.mszip1.ts) {
                ctr_level = 1;
-               ctr1 = &r->out.ctr.ctr2.mszip1.ts->ctr1;
-       } else if (*r->out.level == 6) {
+               ctr1 = &r->out.ctr->ctr2.mszip1.ts->ctr1;
+       } else if (*r->out.level_out == 6) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr6;
-       } else if (*r->out.level == 7 &&
-                  r->out.ctr.ctr7.level == 6 &&
-                  r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
-                  r->out.ctr.ctr7.ctr.mszip6.ts) {
+               ctr6 = &r->out.ctr->ctr6;
+       } else if (*r->out.level_out == 7 &&
+                  r->out.ctr->ctr7.level == 6 &&
+                  r->out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP &&
+                  r->out.ctr->ctr7.ctr.mszip6.ts) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr7.ctr.mszip6.ts->ctr6;
-       } else if (*r->out.level == 7 &&
-                  r->out.ctr.ctr7.level == 6 &&
-                  r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
-                  r->out.ctr.ctr7.ctr.xpress6.ts) {
+               ctr6 = &r->out.ctr->ctr7.ctr.mszip6.ts->ctr6;
+       } else if (*r->out.level_out == 7 &&
+                  r->out.ctr->ctr7.level == 6 &&
+                  r->out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS &&
+                  r->out.ctr->ctr7.ctr.xpress6.ts) {
                ctr_level = 6;
-               ctr6 = &r->out.ctr.ctr7.ctr.xpress6.ts->ctr6;
+               ctr6 = &r->out.ctr->ctr7.ctr.xpress6.ts->ctr6;
        } else {
                return WERR_BAD_NET_RESP;
        }
index 4ded84ebfe14e4bde2c5f57af45b9221c6052d2a..9d7c9d97899e521dadc101d4812fc9f3e7566223 100644 (file)
@@ -700,9 +700,10 @@ interface drsuapi
 
        WERROR drsuapi_DsGetNCChanges(
                [in] policy_handle *bind_handle,
-               [in,out,ref] int32 *level,
-               [in,switch_is(*level)] drsuapi_DsGetNCChangesRequest req,
-               [out,switch_is(*level)] drsuapi_DsGetNCChangesCtr ctr
+               [in] int32 level,
+               [in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req,
+               [out,ref] int32 *level_out,
+               [out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr
                );
 
        /*****************/
index 5b0af7b0a8ccc464a1c4db28b29272b225b35c0f..da6ce2b5f5e83a92d5260137cc21f7c32d331c9f 100644 (file)
@@ -525,6 +525,8 @@ static bool test_DsGetNCChanges(struct dcerpc_pipe *p, struct torture_context *t
        bool ret = true;
        int i;
        struct drsuapi_DsGetNCChanges r;
+       union drsuapi_DsGetNCChangesRequest req;
+       union drsuapi_DsGetNCChangesCtr ctr;
        struct drsuapi_DsReplicaObjectIdentifier nc;
        struct GUID null_guid;
        struct dom_sid null_sid;
@@ -553,30 +555,32 @@ static bool test_DsGetNCChanges(struct dcerpc_pipe *p, struct torture_context *t
                        array[i].level);
 
                r.in.bind_handle        = &priv->bind_handle;
-               r.in.level              = &array[i].level;
-               r.out.level             = &level_out;
+               r.in.level              = array[i].level;
+               r.out.level_out         = &level_out;
+               r.out.ctr               = &ctr;
 
-               switch (*r.in.level) {
+               switch (r.in.level) {
                case 5:
                        nc.guid = null_guid;
                        nc.sid  = null_sid;
                        nc.dn   = priv->domain_obj_dn?priv->domain_obj_dn:"";
 
-                       r.in.req.req5.destination_dsa_guid              = GUID_random();
-                       r.in.req.req5.source_dsa_invocation_id          = null_guid;
-                       r.in.req.req5.naming_context                    = &nc;
-                       r.in.req.req5.highwatermark.tmp_highest_usn     = 0;
-                       r.in.req.req5.highwatermark.reserved_usn        = 0;
-                       r.in.req.req5.highwatermark.highest_usn         = 0;
-                       r.in.req.req5.uptodateness_vector               = NULL;
-                       r.in.req.req5.replica_flags                     = 0;
+                       r.in.req                                        = &req;
+                       r.in.req->req5.destination_dsa_guid             = GUID_random();
+                       r.in.req->req5.source_dsa_invocation_id         = null_guid;
+                       r.in.req->req5.naming_context                   = &nc;
+                       r.in.req->req5.highwatermark.tmp_highest_usn    = 0;
+                       r.in.req->req5.highwatermark.reserved_usn       = 0;
+                       r.in.req->req5.highwatermark.highest_usn        = 0;
+                       r.in.req->req5.uptodateness_vector              = NULL;
+                       r.in.req->req5.replica_flags                    = 0;
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "drsuapi","compression", false)) {
-                               r.in.req.req5.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+                               r.in.req->req5.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
                        }
-                       r.in.req.req5.max_object_count                  = 0;
-                       r.in.req.req5.max_ndr_size                      = 0;
-                       r.in.req.req5.extended_op                       = DRSUAPI_EXOP_NONE;
-                       r.in.req.req5.fsmo_info                         = 0;
+                       r.in.req->req5.max_object_count                 = 0;
+                       r.in.req->req5.max_ndr_size                     = 0;
+                       r.in.req->req5.extended_op                      = DRSUAPI_EXOP_NONE;
+                       r.in.req->req5.fsmo_info                        = 0;
 
                        break;
                case 8:
@@ -584,33 +588,34 @@ static bool test_DsGetNCChanges(struct dcerpc_pipe *p, struct torture_context *t
                        nc.sid  = null_sid;
                        nc.dn   = priv->domain_obj_dn?priv->domain_obj_dn:"";
 
-                       r.in.req.req8.destination_dsa_guid              = GUID_random();
-                       r.in.req.req8.source_dsa_invocation_id          = null_guid;
-                       r.in.req.req8.naming_context                    = &nc;
-                       r.in.req.req8.highwatermark.tmp_highest_usn     = 0;
-                       r.in.req.req8.highwatermark.reserved_usn        = 0;
-                       r.in.req.req8.highwatermark.highest_usn         = 0;
-                       r.in.req.req8.uptodateness_vector               = NULL;
-                       r.in.req.req8.replica_flags                     = 0;
+                       r.in.req                                        = &req;
+                       r.in.req->req8.destination_dsa_guid             = GUID_random();
+                       r.in.req->req8.source_dsa_invocation_id         = null_guid;
+                       r.in.req->req8.naming_context                   = &nc;
+                       r.in.req->req8.highwatermark.tmp_highest_usn    = 0;
+                       r.in.req->req8.highwatermark.reserved_usn       = 0;
+                       r.in.req->req8.highwatermark.highest_usn        = 0;
+                       r.in.req->req8.uptodateness_vector              = NULL;
+                       r.in.req->req8.replica_flags                    = 0;
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "drsuapi", "compression", false)) {
-                               r.in.req.req8.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+                               r.in.req->req8.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
                        }
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "drsuapi", "neighbour_writeable", true)) {
-                               r.in.req.req8.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
+                               r.in.req->req8.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
                        }
-                       r.in.req.req8.replica_flags                     |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+                       r.in.req->req8.replica_flags                    |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
                                                                        ;
-                       r.in.req.req8.max_object_count                  = 402;
-                       r.in.req.req8.max_ndr_size                      = 402116;
-                       r.in.req.req8.extended_op                       = DRSUAPI_EXOP_NONE;
-                       r.in.req.req8.fsmo_info                         = 0;
-                       r.in.req.req8.partial_attribute_set             = NULL;
-                       r.in.req.req8.partial_attribute_set_ex          = NULL;
-                       r.in.req.req8.mapping_ctr.num_mappings          = 0;
-                       r.in.req.req8.mapping_ctr.mappings              = NULL;
+                       r.in.req->req8.max_object_count                 = 402;
+                       r.in.req->req8.max_ndr_size                     = 402116;
+                       r.in.req->req8.extended_op                      = DRSUAPI_EXOP_NONE;
+                       r.in.req->req8.fsmo_info                        = 0;
+                       r.in.req->req8.partial_attribute_set            = NULL;
+                       r.in.req->req8.partial_attribute_set_ex         = NULL;
+                       r.in.req->req8.mapping_ctr.num_mappings         = 0;
+                       r.in.req->req8.mapping_ctr.mappings             = NULL;
 
                        break;
                }
index a832c0f0daef37266809e49d49212681c899b0b4..bee2658816b2fa14614da16c6fa1965087855810 100644 (file)
@@ -599,6 +599,7 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
        uint64_t highest_usn = 0;
        const char *partition = NULL;
        struct drsuapi_DsGetNCChanges r;
+       union drsuapi_DsGetNCChangesRequest req;
        struct drsuapi_DsReplicaObjectIdentifier nc;
        struct drsuapi_DsGetNCChangesCtr1 *ctr1 = NULL;
        struct drsuapi_DsGetNCChangesCtr6 *ctr6 = NULL;
@@ -649,37 +650,38 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                        array[i].level);
 
                r.in.bind_handle        = &ctx->new_dc.drsuapi.bind_handle;
-               r.in.level              = &array[i].level;
+               r.in.level              = array[i].level;
 
-               switch (*r.in.level) {
+               switch (r.in.level) {
                case 5:
                        nc.guid = null_guid;
                        nc.sid  = null_sid;
                        nc.dn   = partition; 
 
-                       r.in.req.req5.destination_dsa_guid              = ctx->new_dc.invocation_id;
-                       r.in.req.req5.source_dsa_invocation_id          = null_guid;
-                       r.in.req.req5.naming_context                    = &nc;
-                       r.in.req.req5.highwatermark.tmp_highest_usn     = highest_usn;
-                       r.in.req.req5.highwatermark.reserved_usn        = 0;
-                       r.in.req.req5.highwatermark.highest_usn         = highest_usn;
-                       r.in.req.req5.uptodateness_vector               = NULL;
-                       r.in.req.req5.replica_flags                     = 0;
+                       r.in.req                                        = &req;
+                       r.in.req->req5.destination_dsa_guid             = ctx->new_dc.invocation_id;
+                       r.in.req->req5.source_dsa_invocation_id         = null_guid;
+                       r.in.req->req5.naming_context                   = &nc;
+                       r.in.req->req5.highwatermark.tmp_highest_usn    = highest_usn;
+                       r.in.req->req5.highwatermark.reserved_usn       = 0;
+                       r.in.req->req5.highwatermark.highest_usn        = highest_usn;
+                       r.in.req->req5.uptodateness_vector              = NULL;
+                       r.in.req->req5.replica_flags                    = 0;
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "dssync", "compression", false)) {
-                               r.in.req.req5.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+                               r.in.req->req5.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
                        }
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "dssync", "neighbour_writeable", true)) {
-                               r.in.req.req5.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
+                               r.in.req->req5.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
                        }
-                       r.in.req.req5.replica_flags                     |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+                       r.in.req->req5.replica_flags                    |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
                                                                        ;
-                       r.in.req.req5.max_object_count                  = 133;
-                       r.in.req.req5.max_ndr_size                      = 1336770;
-                       r.in.req.req5.extended_op                       = DRSUAPI_EXOP_NONE;
-                       r.in.req.req5.fsmo_info                         = 0;
+                       r.in.req->req5.max_object_count                 = 133;
+                       r.in.req->req5.max_ndr_size                     = 1336770;
+                       r.in.req->req5.extended_op                      = DRSUAPI_EXOP_NONE;
+                       r.in.req->req5.fsmo_info                        = 0;
 
                        break;
                case 8:
@@ -687,35 +689,36 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                        nc.sid  = null_sid;
                        nc.dn   = partition; 
                        /* nc.dn can be set to any other ad partition */
-                       
-                       r.in.req.req8.destination_dsa_guid              = ctx->new_dc.invocation_id;
-                       r.in.req.req8.source_dsa_invocation_id          = null_guid;
-                       r.in.req.req8.naming_context                    = &nc;
-                       r.in.req.req8.highwatermark.tmp_highest_usn     = highest_usn;
-                       r.in.req.req8.highwatermark.reserved_usn        = 0;
-                       r.in.req.req8.highwatermark.highest_usn         = highest_usn;
-                       r.in.req.req8.uptodateness_vector               = NULL;
-                       r.in.req.req8.replica_flags                     = 0;
+
+                       r.in.req                                        = &req;
+                       r.in.req->req8.destination_dsa_guid             = ctx->new_dc.invocation_id;
+                       r.in.req->req8.source_dsa_invocation_id         = null_guid;
+                       r.in.req->req8.naming_context                   = &nc;
+                       r.in.req->req8.highwatermark.tmp_highest_usn    = highest_usn;
+                       r.in.req->req8.highwatermark.reserved_usn       = 0;
+                       r.in.req->req8.highwatermark.highest_usn        = highest_usn;
+                       r.in.req->req8.uptodateness_vector              = NULL;
+                       r.in.req->req8.replica_flags                    = 0;
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "dssync", "compression", false)) {
-                               r.in.req.req8.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+                               r.in.req->req8.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
                        }
                        if (lp_parm_bool(tctx->lp_ctx, NULL, "dssync", "neighbour_writeable", true)) {
-                               r.in.req.req8.replica_flags             |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
+                               r.in.req->req8.replica_flags            |= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE;
                        }
-                       r.in.req.req8.replica_flags                     |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+                       r.in.req->req8.replica_flags                    |= DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS
                                                                        | DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
                                                                        ;
-                       r.in.req.req8.max_object_count                  = 402;
-                       r.in.req.req8.max_ndr_size                      = 402116;
+                       r.in.req->req8.max_object_count                 = 402;
+                       r.in.req->req8.max_ndr_size                     = 402116;
 
-                       r.in.req.req8.extended_op                       = DRSUAPI_EXOP_NONE;
-                       r.in.req.req8.fsmo_info                         = 0;
-                       r.in.req.req8.partial_attribute_set             = NULL;
-                       r.in.req.req8.partial_attribute_set_ex          = NULL;
-                       r.in.req.req8.mapping_ctr.num_mappings          = 0;
-                       r.in.req.req8.mapping_ctr.mappings              = NULL;
+                       r.in.req->req8.extended_op                      = DRSUAPI_EXOP_NONE;
+                       r.in.req->req8.fsmo_info                        = 0;
+                       r.in.req->req8.partial_attribute_set            = NULL;
+                       r.in.req->req8.partial_attribute_set_ex         = NULL;
+                       r.in.req->req8.mapping_ctr.num_mappings         = 0;
+                       r.in.req->req8.mapping_ctr.mappings             = NULL;
 
                        break;
                }
@@ -723,19 +726,23 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                printf("Dumping AD partition: %s\n", nc.dn);
                for (y=0; ;y++) {
                        int32_t _level = 0;
+                       union drsuapi_DsGetNCChangesCtr ctr;
+
                        ZERO_STRUCT(r.out);
-                       r.out.level = &_level;
 
-                       if (*r.in.level == 5) {
+                       r.out.level_out = &_level;
+                       r.out.ctr       = &ctr;
+
+                       if (r.in.level == 5) {
                                DEBUG(0,("start[%d] tmp_higest_usn: %llu , highest_usn: %llu\n",y,
-                                       (long long)r.in.req.req5.highwatermark.tmp_highest_usn,
-                                       (long long)r.in.req.req5.highwatermark.highest_usn));
+                                       (long long)r.in.req->req5.highwatermark.tmp_highest_usn,
+                                       (long long)r.in.req->req5.highwatermark.highest_usn));
                        }
 
-                       if (*r.in.level == 8) {
+                       if (r.in.level == 8) {
                                DEBUG(0,("start[%d] tmp_higest_usn: %llu , highest_usn: %llu\n",y,
-                                       (long long)r.in.req.req8.highwatermark.tmp_highest_usn,
-                                       (long long)r.in.req.req8.highwatermark.highest_usn));
+                                       (long long)r.in.req->req8.highwatermark.tmp_highest_usn,
+                                       (long long)r.in.req->req8.highwatermark.highest_usn));
                        }
 
                        status = dcerpc_drsuapi_DsGetNCChanges(ctx->new_dc.drsuapi.pipe, ctx, &r);
@@ -751,13 +758,13 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                                ret = false;
                        }
 
-                       if (ret == true && *r.out.level == 1) {
+                       if (ret == true && *r.out.level_out == 1) {
                                out_level = 1;
-                               ctr1 = &r.out.ctr.ctr1;
-                       } else if (ret == true && *r.out.level == 2 &&
-                                  r.out.ctr.ctr2.mszip1.ts) {
+                               ctr1 = &r.out.ctr->ctr1;
+                       } else if (ret == true && *r.out.level_out == 2 &&
+                                  r.out.ctr->ctr2.mszip1.ts) {
                                out_level = 1;
-                               ctr1 = &r.out.ctr.ctr2.mszip1.ts->ctr1;
+                               ctr1 = &r.out.ctr->ctr2.mszip1.ts->ctr1;
                        }
 
                        if (out_level == 1) {
@@ -768,26 +775,26 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                                test_analyse_objects(tctx, ctx, &gensec_skey, ctr1->first_object);
 
                                if (ctr1->more_data) {
-                                       r.in.req.req5.highwatermark = ctr1->new_highwatermark;
+                                       r.in.req->req5.highwatermark = ctr1->new_highwatermark;
                                        continue;
                                }
                        }
 
-                       if (ret == true && *r.out.level == 6) {
+                       if (ret == true && *r.out.level_out == 6) {
                                out_level = 6;
-                               ctr6 = &r.out.ctr.ctr6;
-                       } else if (ret == true && *r.out.level == 7
-                                  && r.out.ctr.ctr7.level == 6
-                                  && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP
-                                  && r.out.ctr.ctr7.ctr.mszip6.ts) {
+                               ctr6 = &r.out.ctr->ctr6;
+                       } else if (ret == true && *r.out.level_out == 7
+                                  && r.out.ctr->ctr7.level == 6
+                                  && r.out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP
+                                  && r.out.ctr->ctr7.ctr.mszip6.ts) {
                                out_level = 6;
-                               ctr6 = &r.out.ctr.ctr7.ctr.mszip6.ts->ctr6;
-                       } else if (ret == true && *r.out.level == 7
-                                  && r.out.ctr.ctr7.level == 6
-                                  && r.out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS
-                                  && r.out.ctr.ctr7.ctr.xpress6.ts) {
+                               ctr6 = &r.out.ctr->ctr7.ctr.mszip6.ts->ctr6;
+                       } else if (ret == true && *r.out.level_out == 7
+                                  && r.out.ctr->ctr7.level == 6
+                                  && r.out.ctr->ctr7.type == DRSUAPI_COMPRESSION_TYPE_XPRESS
+                                  && r.out.ctr->ctr7.ctr.xpress6.ts) {
                                out_level = 6;
-                               ctr6 = &r.out.ctr.ctr7.ctr.xpress6.ts->ctr6;
+                               ctr6 = &r.out.ctr->ctr7.ctr.xpress6.ts->ctr6;
                        }
 
                        if (out_level == 6) {
@@ -798,7 +805,7 @@ static bool test_FetchData(struct torture_context *tctx, struct DsSyncTest *ctx)
                                test_analyse_objects(tctx, ctx, &gensec_skey, ctr6->first_object);
 
                                if (ctr6->more_data) {
-                                       r.in.req.req8.highwatermark = ctr6->new_highwatermark;
+                                       r.in.req->req8.highwatermark = ctr6->new_highwatermark;
                                        continue;
                                }
                        }