svn commit: samba r20084 - in branches/SAMBA_4_0/source/libnet: .

metze at samba.org metze at samba.org
Fri Dec 8 18:13:50 GMT 2006


Author: metze
Date: 2006-12-08 18:13:49 +0000 (Fri, 08 Dec 2006)
New Revision: 20084

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

Log:
pull the config partition

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2006-12-08 18:08:30 UTC (rev 20083)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2006-12-08 18:13:49 UTC (rev 20084)
@@ -125,7 +125,7 @@
 
 		struct drsuapi_DsReplicaObjectListItemEx *first_object;
 		struct drsuapi_DsReplicaObjectListItemEx *last_object;
-	} schema;
+	} schema, config;
 
 	struct becomeDC_fsmo {
 		const char *dns_name;
@@ -1693,6 +1693,8 @@
 					     becomeDC_drsuapi3_pull_schema_recv);
 }
 
+static void becomeDC_drsuapi3_pull_config_send(struct libnet_BecomeDC_state *s);
+
 static void becomeDC_drsuapi3_pull_schema_recv(struct rpc_request *req)
 {
 	struct libnet_BecomeDC_state *s = talloc_get_type(req->async.private,
@@ -1719,6 +1721,56 @@
 		return;
 	}
 
+	becomeDC_drsuapi3_pull_config_send(s);
+}
+
+static void becomeDC_drsuapi3_pull_config_recv(struct rpc_request *req);
+
+static void becomeDC_drsuapi3_pull_config_send(struct libnet_BecomeDC_state *s)
+{
+	s->config.nc.guid	= GUID_zero();
+	s->config.nc.sid	= s->zero_sid;
+	s->config.nc.dn		= s->forest.config_dn_str;
+
+	s->config.destination_dsa_guid	= s->drsuapi2.bind_guid;
+
+	s->config.replica_flags	= DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
+				| DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
+				| DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS
+				| DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS
+				| DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED
+				| DRSUAPI_DS_REPLICA_NEIGHBOUR_COMPRESS_CHANGES;
+
+	becomeDC_drsuapi_pull_partition_send(s, &s->drsuapi2, &s->drsuapi3, &s->config,
+					     becomeDC_drsuapi3_pull_config_recv);
+}
+
+static void becomeDC_drsuapi3_pull_config_recv(struct rpc_request *req)
+{
+	struct libnet_BecomeDC_state *s = talloc_get_type(req->async.private,
+					  struct libnet_BecomeDC_state);
+	struct composite_context *c = s->creq;
+	struct drsuapi_DsGetNCChanges *r = talloc_get_type(req->ndr.struct_ptr,
+					   struct drsuapi_DsGetNCChanges);
+	WERROR status;
+
+	c->status = dcerpc_ndr_request_recv(req);
+	if (!composite_is_ok(c)) return;
+
+	status = becomeDC_drsuapi_pull_partition_recv(s, &s->config, r);
+	if (!W_ERROR_IS_OK(status)) {
+		composite_error(c, werror_to_ntstatus(status));
+		return;
+	}
+
+	talloc_free(r);
+
+	if (s->config.highwatermark.tmp_highest_usn > s->config.highwatermark.highest_usn) {
+		becomeDC_drsuapi_pull_partition_send(s, &s->drsuapi2, &s->drsuapi3, &s->config,
+						     becomeDC_drsuapi3_pull_config_recv);
+		return;
+	}
+
 	becomeDC_connect_ldap2(s);
 }
 



More information about the samba-cvs mailing list