svn commit: samba r20709 - in branches/SAMBA_4_0/source: dsdb/repl dsdb/samdb dsdb/samdb/ldb_modules torture/libnet

metze at samba.org metze at samba.org
Fri Jan 12 16:02:12 GMT 2007


Author: metze
Date: 2007-01-12 16:02:10 +0000 (Fri, 12 Jan 2007)
New Revision: 20709

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

Log:
pass a repsFromTo1 struct down as it contains all needed info for the source dsa
and the highwater mark vector

metze
Modified:
   branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c
   branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/repl_meta_data.c
   branches/SAMBA_4_0/source/dsdb/samdb/samdb.h
   branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-12 14:26:08 UTC (rev 20708)
+++ branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-12 16:02:10 UTC (rev 20709)
@@ -183,8 +183,7 @@
 					       const struct drsuapi_DsReplicaObjectListItemEx *first_object,
 					       uint32_t linked_attributes_count,
 					       const struct drsuapi_DsReplicaLinkedAttribute *linked_attributes,
-					       const struct GUID *source_dsa_invocation_id,
-					       const struct drsuapi_DsReplicaHighWaterMark *new_highwatermark,
+					       const struct repsFromTo1 *source_dsa,
 					       const struct drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector,
 					       TALLOC_CTX *mem_ctx,
 					       struct dsdb_extended_replicated_objects **_out)
@@ -205,9 +204,8 @@
 	out->partition_dn = ldb_dn_new(out, ldb, partition_dn);
 	W_ERROR_HAVE_NO_MEMORY(out->partition_dn);
 
-	out->source_dsa_invocation_id	= source_dsa_invocation_id;
-	out->new_highwatermark		= new_highwatermark;
-	out->uptodateness_vector	= uptodateness_vector;
+	out->source_dsa		= source_dsa;
+	out->uptodateness_vector= uptodateness_vector;
 
 	out->num_objects	= object_count;
 	out->objects		= talloc_array(out,

Modified: branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/repl_meta_data.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/repl_meta_data.c	2007-01-12 14:26:08 UTC (rev 20708)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/repl_meta_data.c	2007-01-12 16:02:10 UTC (rev 20709)
@@ -677,6 +677,9 @@
 		return replmd_replicated_request_error(ar, ret);
 	}
 
+	/*
+	 * first create the new replUpToDateVector
+	 */
 	ouv_value = ldb_msg_find_ldb_val(ar->sub.search_msg, "replUpToDateVector");
 	if (ouv_value) {
 		nt_status = ndr_pull_struct_blob(ouv_value, ar->sub.mem_ctx, &ouv,
@@ -743,7 +746,7 @@
 	 */
 	found = false;
 	for (j=0; j < ni; j++) {
-		if (!GUID_equal(ar->objs->source_dsa_invocation_id,
+		if (!GUID_equal(&ar->objs->source_dsa->source_dsa_invocation_id,
 				&nuv.ctr.ctr2.cursors[j].source_dsa_invocation_id)) {
 			continue;
 		}
@@ -757,7 +760,7 @@
 		 * and use the tmp_highest_usn because this is what we have just applied
 		 * to our ldb
 		 */
-		nuv.ctr.ctr2.cursors[j].highest_usn		= ar->objs->new_highwatermark->tmp_highest_usn;
+		nuv.ctr.ctr2.cursors[j].highest_usn		= ar->objs->source_dsa->highwatermark.tmp_highest_usn;
 		nuv.ctr.ctr2.cursors[j].last_sync_success	= now;
 		break;
 	}
@@ -769,8 +772,8 @@
 		 * and use the tmp_highest_usn because this is what we have just applied
 		 * to our ldb
 		 */
-		nuv.ctr.ctr2.cursors[ni].source_dsa_invocation_id= *ar->objs->source_dsa_invocation_id;
-		nuv.ctr.ctr2.cursors[ni].highest_usn		= ar->objs->new_highwatermark->tmp_highest_usn;
+		nuv.ctr.ctr2.cursors[ni].source_dsa_invocation_id= ar->objs->source_dsa->source_dsa_invocation_id;
+		nuv.ctr.ctr2.cursors[ni].highest_usn		= ar->objs->source_dsa->highwatermark.tmp_highest_usn;
 		nuv.ctr.ctr2.cursors[ni].last_sync_success	= now;
 		ni++;
 	}

Modified: branches/SAMBA_4_0/source/dsdb/samdb/samdb.h
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/samdb.h	2007-01-12 14:26:08 UTC (rev 20708)
+++ branches/SAMBA_4_0/source/dsdb/samdb/samdb.h	2007-01-12 16:02:10 UTC (rev 20709)
@@ -50,8 +50,7 @@
 struct dsdb_extended_replicated_objects {
 	struct ldb_dn *partition_dn;
 
-	const struct GUID *source_dsa_invocation_id;
-	const struct drsuapi_DsReplicaHighWaterMark *new_highwatermark;
+	const struct repsFromTo1 *source_dsa;
 	const struct drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector;
 
 	uint32_t num_objects;

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c
===================================================================
--- branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c	2007-01-12 14:26:08 UTC (rev 20708)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c	2007-01-12 16:02:10 UTC (rev 20709)
@@ -259,39 +259,57 @@
 	struct drsuapi_DsReplicaObjectListItemEx *cur;
 	uint32_t linked_attributes_count;
 	struct drsuapi_DsReplicaLinkedAttribute *linked_attributes;
-	const struct GUID *source_dsa_invocation_id;
-	const struct drsuapi_DsReplicaHighWaterMark *new_highwatermark;
 	const struct drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector;
 	struct dsdb_extended_replicated_objects *objs;
+	struct repsFromTo1 *s_dsa;
+	char *tmp_dns_name;
 	uint32_t i;
 
+	s_dsa			= talloc_zero(s, struct repsFromTo1);
+	NT_STATUS_HAVE_NO_MEMORY(s_dsa);
+	s_dsa->other_info	= talloc(s_dsa, struct repsFromTo1OtherInfo);
+	NT_STATUS_HAVE_NO_MEMORY(s_dsa->other_info);
+
 	switch (c->ctr_level) {
 	case 1:
-		mapping_ctr		= &c->ctr1->mapping_ctr;
-		total_object_count	= c->ctr1->total_object_count;
-		object_count		= s->schema_part.object_count;
-		first_object		= s->schema_part.first_object;
-		linked_attributes_count	= 0;
-		linked_attributes	= NULL;
-		source_dsa_invocation_id= &c->ctr1->source_dsa_invocation_id;
-		new_highwatermark	= &c->ctr1->new_highwatermark;
-		uptodateness_vector	= NULL; /* TODO: map it */
+		mapping_ctr			= &c->ctr1->mapping_ctr;
+		total_object_count		= c->ctr1->total_object_count;
+		object_count			= s->schema_part.object_count;
+		first_object			= s->schema_part.first_object;
+		linked_attributes_count		= 0;
+		linked_attributes		= NULL;
+		s_dsa->highwatermark		= c->ctr1->new_highwatermark;
+		s_dsa->source_dsa_obj_guid	= c->ctr1->source_dsa_guid;
+		s_dsa->source_dsa_invocation_id = c->ctr1->source_dsa_invocation_id;
+		uptodateness_vector		= NULL; /* TODO: map it */
 		break;
 	case 6:
-		mapping_ctr		= &c->ctr6->mapping_ctr;
-		total_object_count	= c->ctr6->total_object_count;
-		object_count		= s->schema_part.object_count;
-		first_object		= s->schema_part.first_object;
-		linked_attributes_count	= 0; /* TODO: ! */
-		linked_attributes	= NULL; /* TODO: ! */;
-		source_dsa_invocation_id= &c->ctr6->source_dsa_invocation_id;
-		new_highwatermark	= &c->ctr6->new_highwatermark;
-		uptodateness_vector	= c->ctr6->uptodateness_vector;
+		mapping_ctr			= &c->ctr6->mapping_ctr;
+		total_object_count		= c->ctr6->total_object_count;
+		object_count			= s->schema_part.object_count;
+		first_object			= s->schema_part.first_object;
+		linked_attributes_count		= 0; /* TODO: ! */
+		linked_attributes		= NULL; /* TODO: ! */;
+		s_dsa->highwatermark		= c->ctr6->new_highwatermark;
+		s_dsa->source_dsa_obj_guid	= c->ctr6->source_dsa_guid;
+		s_dsa->source_dsa_invocation_id = c->ctr6->source_dsa_invocation_id;
+		uptodateness_vector		= c->ctr6->uptodateness_vector;
 		break;
 	default:
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
+	s_dsa->replica_flags		= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
+					| DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+					| DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS;
+	memset(s_dsa->schedule, 0x11, sizeof(s_dsa->schedule));
+
+	tmp_dns_name	= GUID_string(s_dsa->other_info, &s_dsa->source_dsa_obj_guid);
+	NT_STATUS_HAVE_NO_MEMORY(tmp_dns_name);
+	tmp_dns_name	= talloc_asprintf_append(tmp_dns_name, "._msdcs.%s", c->forest->dns_name);
+	NT_STATUS_HAVE_NO_MEMORY(tmp_dns_name);
+	s_dsa->other_info->dns_name = tmp_dns_name;
+
 	for (cur = first_object; cur; cur = cur->next_object) {
 		bool is_attr = false;
 		bool is_class = false;
@@ -368,8 +386,7 @@
 							 first_object,
 							 linked_attributes_count,
 							 linked_attributes,
-							 source_dsa_invocation_id,
-							 new_highwatermark,
+							 s_dsa,
 							 uptodateness_vector,
 							 s, &objs);
 	if (!W_ERROR_IS_OK(status)) {
@@ -388,6 +405,7 @@
 		}
 	}
 
+	talloc_free(s_dsa);
 	talloc_free(objs);
 	return NT_STATUS_OK;
 }
@@ -472,39 +490,57 @@
 	struct drsuapi_DsReplicaObjectListItemEx *first_object;
 	uint32_t linked_attributes_count;
 	struct drsuapi_DsReplicaLinkedAttribute *linked_attributes;
-	const struct GUID *source_dsa_invocation_id;
-	const struct drsuapi_DsReplicaHighWaterMark *new_highwatermark;
 	const struct drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector;
 	struct dsdb_extended_replicated_objects *objs;
+	struct repsFromTo1 *s_dsa;
+	char *tmp_dns_name;
 	uint32_t i;
 
+	s_dsa			= talloc_zero(s, struct repsFromTo1);
+	NT_STATUS_HAVE_NO_MEMORY(s_dsa);
+	s_dsa->other_info	= talloc(s_dsa, struct repsFromTo1OtherInfo);
+	NT_STATUS_HAVE_NO_MEMORY(s_dsa->other_info);
+
 	switch (c->ctr_level) {
 	case 1:
-		mapping_ctr		= &c->ctr1->mapping_ctr;
-		total_object_count	= c->ctr1->total_object_count;
-		object_count		= c->ctr1->object_count;
-		first_object		= c->ctr1->first_object;
-		linked_attributes_count	= 0;
-		linked_attributes	= NULL;
-		source_dsa_invocation_id= &c->ctr1->source_dsa_invocation_id;
-		new_highwatermark	= &c->ctr1->new_highwatermark;
-		uptodateness_vector	= NULL; /* TODO: map it */
+		mapping_ctr			= &c->ctr1->mapping_ctr;
+		total_object_count		= c->ctr1->total_object_count;
+		object_count			= c->ctr1->object_count;
+		first_object			= c->ctr1->first_object;
+		linked_attributes_count		= 0;
+		linked_attributes		= NULL;
+		s_dsa->highwatermark		= c->ctr1->new_highwatermark;
+		s_dsa->source_dsa_obj_guid	= c->ctr1->source_dsa_guid;
+		s_dsa->source_dsa_invocation_id = c->ctr1->source_dsa_invocation_id;
+		uptodateness_vector		= NULL; /* TODO: map it */
 		break;
 	case 6:
-		mapping_ctr		= &c->ctr6->mapping_ctr;
-		total_object_count	= c->ctr6->total_object_count;
-		object_count		= c->ctr6->object_count;
-		first_object		= c->ctr6->first_object;
-		linked_attributes_count	= c->ctr6->linked_attributes_count;
-		linked_attributes	= c->ctr6->linked_attributes;
-		source_dsa_invocation_id= &c->ctr6->source_dsa_invocation_id;
-		new_highwatermark	= &c->ctr6->new_highwatermark;
-		uptodateness_vector	= c->ctr6->uptodateness_vector;
+		mapping_ctr			= &c->ctr6->mapping_ctr;
+		total_object_count		= c->ctr6->total_object_count;
+		object_count			= c->ctr6->object_count;
+		first_object			= c->ctr6->first_object;
+		linked_attributes_count		= c->ctr6->linked_attributes_count;
+		linked_attributes		= c->ctr6->linked_attributes;
+		s_dsa->highwatermark		= c->ctr6->new_highwatermark;
+		s_dsa->source_dsa_obj_guid	= c->ctr6->source_dsa_guid;
+		s_dsa->source_dsa_invocation_id = c->ctr6->source_dsa_invocation_id;
+		uptodateness_vector		= c->ctr6->uptodateness_vector;
 		break;
 	default:
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
+	s_dsa->replica_flags		= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
+					| DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+					| DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS;
+	memset(s_dsa->schedule, 0x11, sizeof(s_dsa->schedule));
+
+	tmp_dns_name	= GUID_string(s_dsa->other_info, &s_dsa->source_dsa_obj_guid);
+	NT_STATUS_HAVE_NO_MEMORY(tmp_dns_name);
+	tmp_dns_name	= talloc_asprintf_append(tmp_dns_name, "._msdcs.%s", c->forest->dns_name);
+	NT_STATUS_HAVE_NO_MEMORY(tmp_dns_name);
+	s_dsa->other_info->dns_name = tmp_dns_name;
+
 	if (total_object_count) {
 		DEBUG(0,("Partition[%s] objects[%u/%u]\n",
 			c->partition->nc.dn, object_count, total_object_count));
@@ -521,8 +557,7 @@
 							 first_object,
 							 linked_attributes_count,
 							 linked_attributes,
-							 source_dsa_invocation_id,
-							 new_highwatermark,
+							 s_dsa,
 							 uptodateness_vector,
 							 s, &objs);
 	if (!W_ERROR_IS_OK(status)) {
@@ -540,6 +575,7 @@
 			NDR_PRINT_DEBUG(replPropertyMetaDataBlob, objs->objects[i].meta_data);
 		}
 	}
+	talloc_free(s_dsa);
 	talloc_free(objs);
 
 	for (i=0; i < linked_attributes_count; i++) {



More information about the samba-cvs mailing list