Author: metze
Date: 2005-10-14 08:19:21 +0000 (Fri, 14 Oct 2005)
New Revision: 10991

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10991

Log:
- create always a valid bind_info28 blocks, so that we don't need to work with 
unions
  in the main code
- loop also in level 1,2 replies

metze
Modified:
   branches/SAMBA_4_0/source/torture/rpc/dssync.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/rpc/dssync.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/dssync.c      2005-10-14 07:38:16 UTC 
(rev 10990)
+++ branches/SAMBA_4_0/source/torture/rpc/dssync.c      2005-10-14 08:19:21 UTC 
(rev 10991)
@@ -34,7 +34,9 @@
        struct dcerpc_pipe *pipe;
        struct drsuapi_DsBind req;
        struct GUID bind_guid;
-       struct drsuapi_DsBindInfoCtr our_bind_info;
+       struct drsuapi_DsBindInfoCtr our_bind_info_ctr;
+       struct drsuapi_DsBindInfo28 our_bind_info28;
+       struct drsuapi_DsBindInfo28 peer_bind_info28;
        struct policy_handle bind_handle;
 };
 
@@ -76,7 +78,8 @@
 {
        NTSTATUS status;
        struct DsSyncTest *ctx;
-       struct drsuapi_DsBindInfoCtr *our_bind_info;
+       struct drsuapi_DsBindInfo28 *our_bind_info28;
+       struct drsuapi_DsBindInfoCtr *our_bind_info_ctr;
        const char *binding = lp_parm_string(-1, "torture", "binding");
        ctx = talloc_zero(mem_ctx, struct DsSyncTest);
        if (!ctx) return NULL;
@@ -93,63 +96,69 @@
        /* ctx->admin ...*/
        ctx->admin.credentials                          = cmdline_credentials;
 
-       our_bind_info                                   = 
&ctx->admin.drsuapi.our_bind_info;
-       our_bind_info->length                           = 28;
-       our_bind_info->info.info28.supported_extensions = 0xFFFFFFFF;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3;
-       our_bind_info->info.info28.site_guid            = GUID_zero();
-       our_bind_info->info.info28.u1                   = 0;
-       our_bind_info->info.info28.repl_epoch           = 1;
+       our_bind_info28                         = 
&ctx->admin.drsuapi.our_bind_info28;
+       our_bind_info28->supported_extensions   = 0xFFFFFFFF;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3;
+       our_bind_info28->site_guid              = GUID_zero();
+       our_bind_info28->u1                     = 0;
+       our_bind_info28->repl_epoch             = 1;
 
+       our_bind_info_ctr                       = 
&ctx->admin.drsuapi.our_bind_info_ctr;
+       our_bind_info_ctr->length               = 28;
+       our_bind_info_ctr->info.info28          = *our_bind_info28;
+
        GUID_from_string(DRSUAPI_DS_BIND_GUID, &ctx->admin.drsuapi.bind_guid);
 
        ctx->admin.drsuapi.req.in.bind_guid             = 
&ctx->admin.drsuapi.bind_guid;
-       ctx->admin.drsuapi.req.in.bind_info             = our_bind_info;
+       ctx->admin.drsuapi.req.in.bind_info             = our_bind_info_ctr;
        ctx->admin.drsuapi.req.out.bind_handle          = 
&ctx->admin.drsuapi.bind_handle;
 
        /* ctx->new_dc ...*/
 
-       our_bind_info                                   = 
&ctx->new_dc.drsuapi.our_bind_info;
-       our_bind_info->length                           = 28;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_BASE;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7;
-       our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT;
+       our_bind_info28                         = 
&ctx->new_dc.drsuapi.our_bind_info28;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_BASE;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7;
+       our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT;
        if (lp_parm_bool(-1,"dssync","xpress",False)) {
-               our_bind_info->info.info28.supported_extensions |= 
DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS;
+               our_bind_info28->supported_extensions   |= 
DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS;
        }
-       our_bind_info->info.info28.site_guid            = GUID_zero();
-       our_bind_info->info.info28.u1                   = 508;
-       our_bind_info->info.info28.repl_epoch           = 0;
+       our_bind_info28->site_guid              = GUID_zero();
+       our_bind_info28->u1                     = 508;
+       our_bind_info28->repl_epoch             = 0;
 
+       our_bind_info_ctr                       = 
&ctx->new_dc.drsuapi.our_bind_info_ctr;
+       our_bind_info_ctr->length               = 28;
+       our_bind_info_ctr->info.info28          = *our_bind_info28;
+
        GUID_from_string(DRSUAPI_DS_BIND_GUID_W2K3, 
&ctx->new_dc.drsuapi.bind_guid);
 
        ctx->new_dc.drsuapi.req.in.bind_guid            = 
&ctx->new_dc.drsuapi.bind_guid;
-       ctx->new_dc.drsuapi.req.in.bind_info            = our_bind_info;
+       ctx->new_dc.drsuapi.req.in.bind_info            = our_bind_info_ctr;
        ctx->new_dc.drsuapi.req.out.bind_handle         = 
&ctx->new_dc.drsuapi.bind_handle;
 
        /* ctx->old_dc ...*/
@@ -187,6 +196,24 @@
                ret = False;
        }
 
+       ZERO_STRUCT(b->peer_bind_info28);
+       if (b->req.out.bind_info) {
+               switch (b->req.out.bind_info->length) {
+               case 24: {
+                       struct drsuapi_DsBindInfo24 *info24;
+                       info24 = &b->req.out.bind_info->info.info24;
+                       b->peer_bind_info28.supported_extensions= 
info24->supported_extensions;
+                       b->peer_bind_info28.site_guid           = 
info24->site_guid;
+                       b->peer_bind_info28.u1                  = info24->u1;
+                       b->peer_bind_info28.repl_epoch          = 0;
+                       break;
+               }
+               case 28:
+                       b->peer_bind_info28 = b->req.out.bind_info->info.info28;
+                       break;
+               }
+       }
+
        return ret;
 }
 
@@ -334,6 +361,7 @@
        const char *partition = NULL;
        struct drsuapi_DsGetNCChanges r;
        struct drsuapi_DsReplicaObjectIdentifier nc;
+       struct drsuapi_DsGetNCChangesCtr1 *ctr1 = NULL;
        struct drsuapi_DsGetNCChangesCtr6 *ctr6 = NULL;
        int32_t out_level = 0;
        struct GUID null_guid;
@@ -440,6 +468,12 @@
                for (y=0; ;y++) {
                        ZERO_STRUCT(r.out);
 
+                       if (r.in.level == 5) {
+                               DEBUG(0,("start[%d] tmp_higest_usn: %llu , 
highest_usn: %llu\n",y,
+                                       
r.in.req.req5.highwatermark.tmp_highest_usn,
+                                       
r.in.req.req5.highwatermark.highest_usn));
+                       }
+
                        if (r.in.level == 8) {
                                DEBUG(0,("start[%d] tmp_higest_usn: %llu , 
highest_usn: %llu\n",y,
                                        
r.in.req.req8.highwatermark.tmp_highest_usn,
@@ -459,6 +493,27 @@
                                ret = False;
                        }
 
+                       if (ret == True && r.out.level == 1) {
+                               out_level = 1;
+                               ctr1 = &r.out.ctr.ctr1;
+                       } else if (ret == True && r.out.level == 2) {
+                               out_level = 1;
+                               ctr1 = r.out.ctr.ctr2.ctr.mszip1.ctr1;
+                       }
+
+                       if (out_level == 1) {
+                               DEBUG(0,("end[%d] tmp_highest_usn: %llu , 
highest_usn: %llu\n",y,
+                                       ctr1->new_highwatermark.tmp_highest_usn,
+                                       ctr1->new_highwatermark.highest_usn));
+
+                               test_analyse_objects(ctx, ctr1->first_object);
+
+                               if (ctr1->new_highwatermark.tmp_highest_usn > 
ctr1->new_highwatermark.highest_usn) {
+                                       r.in.req.req5.highwatermark = 
ctr1->new_highwatermark;
+                                       continue;
+                               }
+                       }
+
                        if (ret == True && r.out.level == 6) {
                                out_level = 6;
                                ctr6 = &r.out.ctr.ctr6;

Reply via email to