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;
 };
 

Reply via email to