r5998: I was wrong with the highwater mark...
authorStefan Metzmacher <metze@samba.org>
Wed, 23 Mar 2005 18:54:06 +0000 (18:54 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:11:14 +0000 (13:11 -0500)
I think I now understand how it works:-)

metze
(This used to be commit f8add2e66a56896d9bb18991091e1b17c29910b1)

source4/librpc/idl/drsblobs.idl
source4/librpc/idl/drsuapi.idl
source4/torture/rpc/drsuapi.c

index ab98c506064d4ecb5a03262f7c806a7a9b9980ce..e682de452f9c7891c09e9e61d29517fc467d9d0b 100644 (file)
@@ -9,6 +9,7 @@
 ]
 interface drsblobs {
        declare bitmap drsuapi_DsReplicaSyncOptions;
+       declare bitmap drsuapi_DsReplicaNeighbourFlags;
        declare [v1_enum] enum drsuapi_DsAttributeId;
 
        /*
@@ -95,10 +96,10 @@ interface drsblobs {
                WERROR result_last_attempt;
                [relative] repsFromTo1OtherInfo *other_info;
                [value(ndr_size_repsFromTo1OtherInfo(r->other_info, ndr->flags))] uint32 other_info_length;
-               drsuapi_DsReplicaSyncOptions replica_flags;
+               drsuapi_DsReplicaNeighbourFlags replica_flags;
                uint8 schedule[84];
                uint32 reserved;
-               drsuapi_DsReplicaUsnCtr replication_state;
+               drsuapi_DsReplicaHighWaterMark highwatermark;
                GUID source_dsa_obj_guid; /* the 'objectGuid' field of the CN=NTDS Settings object */
                GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
                GUID transport_guid;
@@ -125,7 +126,7 @@ interface drsblobs {
                uint32 u2;
                uint32 u3;
                uint32 u4;
-               drsuapi_DsReplicaUsnCtr replication_state;
+               drsuapi_DsReplicaHighWaterMark highwatermark;
                GUID guid1;
                hyper h4;
                replUpToDateVectorCtr1 uptodateness_vector;
index 789427222a0508f8ecb336b4697bcc18b5118c47..4144ced5633e2d54b2f0f65d74dfc29d4c5c74c8 100644 (file)
@@ -172,7 +172,7 @@ interface drsuapi
                hyper tmp_highest_usn; /* updated after each object update */
                hyper reserved_usn;
                hyper highest_usn; /* updated after a full replication cycle */
-       } drsuapi_DsReplicaUsnCtr;
+       } drsuapi_DsReplicaHighWaterMark;
 
        typedef [public] struct {
                GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
@@ -187,13 +187,31 @@ interface drsuapi
                [size_is(count)] drsuapi_DsReplicaCoursor coursors[];
        } drsuapi_DsReplicaCoursor05Ctr;
 
+       typedef [public] bitmap {
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE                          = 0x00000010,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP                    = 0x00000020,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS                 = 0x00000040,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT      = 0x00000080,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC                       = 0x00000200,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              = 0x00000800,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   = 0x00010000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET                   = 0x00020000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED                       = 0x00200000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED                          = 0x01000000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS        = 0x04000000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC             = 0x08000000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES                   = 0x10000000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_NO_CHANGE_NOTIFICATIONS            = 0x20000000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_PARTIAL_ATTRIBUTE_SET              = 0x40000000
+       } drsuapi_DsReplicaNeighbourFlags;
+
        typedef struct {
                GUID destination_dsa_guid;
                GUID source_dsa_guid;
                [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
-               drsuapi_DsReplicaUsnCtr replication_state;
-               drsuapi_DsReplicaCoursor05Ctr *highwatermark_vector;
-               uint32 unknown1;
+               drsuapi_DsReplicaHighWaterMark highwatermark;
+               drsuapi_DsReplicaCoursor05Ctr *uptodateness_vector;
+               drsuapi_DsReplicaNeighbourFlags replica_flags;
                uint32 unknown2;
                uint32 unknown3;
                uint32 unknown4;
@@ -219,9 +237,9 @@ interface drsuapi
                GUID destination_dsa_guid;
                GUID source_dsa_guid;
                [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
-               drsuapi_DsReplicaUsnCtr replication_state;
-               drsuapi_DsReplicaCoursor05Ctr *highwatermark_vector;
-               uint32 unknown1;
+               drsuapi_DsReplicaHighWaterMark highwatermark;
+               drsuapi_DsReplicaCoursor05Ctr *uptodateness_vector;
+               drsuapi_DsReplicaNeighbourFlags replica_flags;
                uint32 unknown2;
                uint32 unknown3;
                uint32 unknown4;
@@ -448,17 +466,18 @@ interface drsuapi
                drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
        } drsuapi_DsReplicaObjectListItemEx;
 
-       typedef struct {
+       typedef [gensize] struct {
                GUID guid1;
                GUID guid2;
                drsuapi_DsReplicaObjectIdentifier *naming_context;
-               drsuapi_DsReplicaUsnCtr old_replication_state;
-               drsuapi_DsReplicaUsnCtr new_replication_state;
+               drsuapi_DsReplicaHighWaterMark old_highwatermark;
+               drsuapi_DsReplicaHighWaterMark new_highwatermark;
                drsuapi_DsReplicaCoursor05Ctr *uptodateness_vector;
                drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
                uint32 unknown1;
-               uint32 unknown2;
-               uint32 unknown3;
+               uint32 object_count;
+               /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
+               [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->flags)+55)] uint32 __ndr_size;
                drsuapi_DsReplicaObjectListItemEx *first_object;
                uint32 unknown4;
        } drsuapi_DsGetNCChangesCtr1;
@@ -477,8 +496,8 @@ interface drsuapi
                GUID guid1;
                GUID guid2;
                drsuapi_DsReplicaObjectIdentifier *naming_context;
-               drsuapi_DsReplicaUsnCtr old_replication_state;
-               drsuapi_DsReplicaUsnCtr new_replication_state;
+               drsuapi_DsReplicaHighWaterMark old_highwatermark;
+               drsuapi_DsReplicaHighWaterMark new_highwatermark;
                drsuapi_DsReplicaCoursor05Ctr *uptodateness_vector;
                drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
                uint32 unknown1;
@@ -889,7 +908,7 @@ interface drsuapi
                unistr *source_dsa_obj_dn;
                unistr *source_dsa_address;
                unistr *transport_obj_dn;
-               uint32 replica_flags;
+               drsuapi_DsReplicaNeighbourFlags replica_flags;
                uint32 reserved;
                GUID naming_context_obj_guid;
                GUID source_dsa_obj_guid;
index 9774a92a8a770c49283050b1da5eebbebec39dcc..8b1cccd1e0c23508255ed4a03a651b08fdb5c0b4 100644 (file)
@@ -902,7 +902,7 @@ static BOOL test_DsGetNCChanges(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
 
        ZERO_STRUCT(null_guid);
        ZERO_STRUCT(null_sid);
-       
+
        for (i=0; i < ARRAY_SIZE(array); i++) {
                printf("testing DsGetNCChanges level %d\n",
                        array[i].level);
@@ -919,13 +919,13 @@ static BOOL test_DsGetNCChanges(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
                        r.in.req.req5.destination_dsa_guid              = GUID_random();
                        r.in.req.req5.source_dsa_guid                   = null_guid;
                        r.in.req.req5.naming_context                    = &nc;
-                       r.in.req.req5.replication_state.tmp_highest_usn = 0;
-                       r.in.req.req5.replication_state.reserved_usn    = 0;
-                       r.in.req.req5.replication_state.highest_usn     = 0;
-                       r.in.req.req5.highwatermark_vector              = NULL;
-                       r.in.req.req5.unknown1                          = 0;/*0x10201C70;*/
-                       r.in.req.req5.unknown2                          = 402;
-                       r.in.req.req5.unknown3                          = 402116;
+                       r.in.req.req5.highwatermark.tmp_highest_usn     = 167997;
+                       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.req5.unknown2                          = 0;
+                       r.in.req.req5.unknown3                          = 0;
                        r.in.req.req5.unknown4                          = 0;
                        r.in.req.req5.h1                                = 0;
 
@@ -938,11 +938,18 @@ static BOOL test_DsGetNCChanges(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
                        r.in.req.req8.destination_dsa_guid              = GUID_random();
                        r.in.req.req8.source_dsa_guid                   = null_guid;
                        r.in.req.req8.naming_context                    = &nc;
-                       r.in.req.req8.replication_state.tmp_highest_usn = 0;
-                       r.in.req.req8.replication_state.reserved_usn    = 0;
-                       r.in.req.req8.replication_state.highest_usn     = 0;
-                       r.in.req.req8.highwatermark_vector              = NULL;
-                       r.in.req.req8.unknown1                          = 0x10201C70;
+                       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
+                                                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
+                                                                       | 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
+                                                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES
+                                                                       ;
                        r.in.req.req8.unknown2                          = 402;
                        r.in.req.req8.unknown3                          = 402116;
                        r.in.req.req8.unknown4                          = 0;