svn commit: samba r20726 - in branches/SAMBA_4_0/source/dsdb: repl samdb samdb/ldb_modules

metze at samba.org metze at samba.org
Sat Jan 13 10:53:12 GMT 2007


Author: metze
Date: 2007-01-13 10:53:12 +0000 (Sat, 13 Jan 2007)
New Revision: 20726

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

Log:
- only add the rdn attribute and it's meta_data when the 'name' attribute is there
- add the values for objectGUID and whenChanged inside the ldb module,
  so that the ldb module has only replicated attributes as input

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


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-13 10:40:09 UTC (rev 20725)
+++ branches/SAMBA_4_0/source/dsdb/repl/replicated_objects.c	2007-01-13 10:53:12 UTC (rev 20726)
@@ -44,13 +44,13 @@
 	NTTIME whenChanged = 0;
 	time_t whenChanged_t;
 	const char *whenChanged_s;
-	const char *rdn_name;
-	const struct ldb_val *rdn_value;
-	const struct dsdb_attribute *rdn_attr;
+	const char *rdn_name = NULL;
+	const struct ldb_val *rdn_value = NULL;
+	const struct dsdb_attribute *rdn_attr = NULL;
 	uint32_t rdn_attid;
-	struct drsuapi_DsReplicaAttribute *name_a;
-	struct drsuapi_DsReplicaMetaData *name_d;
-	struct replPropertyMetaData1 *rdn_m;
+	struct drsuapi_DsReplicaAttribute *name_a = NULL;
+	struct drsuapi_DsReplicaMetaData *name_d = NULL;
+	struct replPropertyMetaData1 *rdn_m = NULL;
 	int ret;
 
 	if (!in->object.identifier) {
@@ -134,44 +134,36 @@
 		}
 	}
 
-	if (!name_d) {
-		return WERR_FOOBAR;
-	}
+	if (rdn_m) {
+		ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL);
+		if (ret != LDB_SUCCESS) {
+			return WERR_FOOBAR;
+		}
 
-	ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL);
-	if (ret != LDB_SUCCESS) {
-		return WERR_FOOBAR;
+		rdn_m->attid				= rdn_attid;
+		rdn_m->version				= name_d->version;
+		rdn_m->orginating_time			= name_d->orginating_time;
+		rdn_m->orginating_invocation_id		= name_d->orginating_invocation_id;
+		rdn_m->orginating_usn			= name_d->orginating_usn;
+		rdn_m->local_usn			= 0;
+		md->ctr.ctr1.count++;
+
 	}
 
+	whenChanged_t = nt_time_to_unix(whenChanged);
+	whenChanged_s = ldb_timestring(msg, whenChanged_t);
+	W_ERROR_HAVE_NO_MEMORY(whenChanged_s);
+
 	nt_status = ndr_push_struct_blob(&guid_value, msg, &in->object.identifier->guid,
 					 (ndr_push_flags_fn_t)ndr_push_GUID);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return ntstatus_to_werror(nt_status);
 	}
-	ret = ldb_msg_add_value(msg, "objectGUID", &guid_value, NULL);
-	if (ret != LDB_SUCCESS) {
-		return WERR_FOOBAR;
-	}
 
-	whenChanged_t = nt_time_to_unix(whenChanged);
-	whenChanged_s = ldb_timestring(msg, whenChanged_t);
-	W_ERROR_HAVE_NO_MEMORY(whenChanged_s);
-	ret = ldb_msg_add_string(msg, "whenChanged", whenChanged_s);
-	if (ret != LDB_SUCCESS) {
-		return WERR_FOOBAR;
-	}
-
-	rdn_m->attid				= rdn_attid;
-	rdn_m->version				= name_d->version;
-	rdn_m->orginating_time			= name_d->orginating_time;
-	rdn_m->orginating_invocation_id		= name_d->orginating_invocation_id;
-	rdn_m->orginating_usn			= name_d->orginating_usn;
-	rdn_m->local_usn			= 0;
-	md->ctr.ctr1.count++;
-
-	out->msg	= msg;
-	out->guid_value	= guid_value;
-	out->meta_data	= md;
+	out->msg		= msg;
+	out->guid_value		= guid_value;
+	out->when_changed	= whenChanged_s;
+	out->meta_data		= md;
 	return WERR_OK;
 }
 

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-13 10:40:09 UTC (rev 20725)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/repl_meta_data.c	2007-01-13 10:53:12 UTC (rev 20726)
@@ -446,6 +446,15 @@
 	uint64_t seq_num;
 	int ret;
 
+	/*
+	 * TODO: check if the parent object exist
+	 */
+
+	/*
+	 * TODO: handle the conflict case where an object with the
+	 *       same name exist
+	 */
+
 	msg = ar->objs->objects[ar->index_current].msg;
 	md = ar->objs->objects[ar->index_current].meta_data;
 
@@ -454,6 +463,16 @@
 		return replmd_replicated_request_error(ar, ret);
 	}
 
+	ret = ldb_msg_add_value(msg, "objectGUID", &ar->objs->objects[ar->index_current].guid_value, NULL);
+	if (ret != LDB_SUCCESS) {
+		return replmd_replicated_request_error(ar, ret);
+	}
+
+	ret = ldb_msg_add_string(msg, "whenChanged", ar->objs->objects[ar->index_current].when_changed);
+	if (ret != LDB_SUCCESS) {
+		return replmd_replicated_request_error(ar, ret);
+	}
+
 	ret = samdb_msg_add_uint64(ar->module->ldb, msg, msg, "uSNCreated", seq_num);
 	if (ret != LDB_SUCCESS) {
 		return replmd_replicated_request_error(ar, ret);

Modified: branches/SAMBA_4_0/source/dsdb/samdb/samdb.h
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/samdb.h	2007-01-13 10:40:09 UTC (rev 20725)
+++ branches/SAMBA_4_0/source/dsdb/samdb/samdb.h	2007-01-13 10:53:12 UTC (rev 20726)
@@ -44,6 +44,7 @@
 struct dsdb_extended_replicated_object {
 	struct ldb_message *msg;
 	struct ldb_val guid_value;
+	const char *when_changed;
 	struct replPropertyMetaDataBlob *meta_data;
 };
 



More information about the samba-cvs mailing list