diff options
Diffstat (limited to 'source4')
| -rw-r--r-- | source4/libnet/libnet_vampire.c | 30 | 
1 files changed, 30 insertions, 0 deletions
diff --git a/source4/libnet/libnet_vampire.c b/source4/libnet/libnet_vampire.c index 80b1a61b57..efbcd8af68 100644 --- a/source4/libnet/libnet_vampire.c +++ b/source4/libnet/libnet_vampire.c @@ -626,6 +626,7 @@ NTSTATUS libnet_vampire_cb_store_chunk(void *private_data,  	struct drsuapi_DsReplicaLinkedAttribute *linked_attributes;  	const struct drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector;  	struct dsdb_extended_replicated_objects *objs; +	uint32_t req_replica_flags;  	struct repsFromTo1 *s_dsa;  	char *tmp_dns_name;  	uint32_t i; @@ -667,6 +668,35 @@ NTSTATUS libnet_vampire_cb_store_chunk(void *private_data,  		return NT_STATUS_INVALID_PARAMETER;  	} +	switch (c->req_level) { +	case 0: +		/* none */ +		req_replica_flags = 0; +		break; +	case 5: +		req_replica_flags = c->req5->replica_flags; +		break; +	case 8: +		req_replica_flags = c->req8->replica_flags; +		break; +	case 10: +		req_replica_flags = c->req10->replica_flags; +		break; +	default: +		return NT_STATUS_INVALID_PARAMETER; +	} + +	if (req_replica_flags & DRSUAPI_DRS_CRITICAL_ONLY) { +		/* +		 * If we only replicate the critical objects +		 * we should not remember what we already +		 * got, as it is incomplete. +		 */ +		ZERO_STRUCT(s_dsa->highwatermark); +		uptodateness_vector = NULL; +	} + +	/* TODO: avoid hardcoded flags */  	s_dsa->replica_flags		= DRSUAPI_DRS_WRIT_REP  					| DRSUAPI_DRS_INIT_SYNC  					| DRSUAPI_DRS_PER_SYNC;  | 
