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