s4-drs: cope with missing RMD_ADDTIME in linked attributes
authorAndrew Tridgell <tridge@samba.org>
Thu, 9 Jun 2011 23:10:09 +0000 (09:10 +1000)
committerAndrew Tridgell <tridge@samba.org>
Fri, 10 Jun 2011 00:14:56 +0000 (10:14 +1000)
upgraded links can be missing the RMD_ADDTIME field

source4/dsdb/common/util.c
source4/rpc_server/drsuapi/getncchanges.c

index 0cba20b46541e78cc0a9904b8c0e16a00772ab7c..3fa8f67447cef449d5b35471886d8fa1297a1951 100644 (file)
@@ -3192,7 +3192,7 @@ bool dsdb_dn_is_deleted_val(const struct ldb_val *val)
  */
 bool dsdb_dn_is_upgraded_link_val(struct ldb_val *val)
 {
-       return memmem(val->data, val->length, "<RMD_ADDTIME=", 13) != NULL;
+       return memmem(val->data, val->length, "<RMD_VERSION=", 13) != NULL;
 }
 
 /*
index 0c196aab55fb253df5c825cf7b7eb47be5ff987d..72f954d2b28b06127cbe5944deabd5881e82aafe 100644 (file)
@@ -360,10 +360,6 @@ static WERROR get_nc_changes_add_la(TALLOC_CTX *mem_ctx,
        la->attid = sa->attributeID_id;
        la->flags = active?DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE:0;
 
-       status = dsdb_get_extended_dn_nttime(dsdb_dn->dn, &la->originating_add_time, "RMD_ADDTIME");
-       if (!NT_STATUS_IS_OK(status)) {
-               return ntstatus_to_werror(status);
-       }
        status = dsdb_get_extended_dn_uint32(dsdb_dn->dn, &la->meta_data.version, "RMD_VERSION");
        if (!NT_STATUS_IS_OK(status)) {
                return ntstatus_to_werror(status);
@@ -381,6 +377,12 @@ static WERROR get_nc_changes_add_la(TALLOC_CTX *mem_ctx,
                return ntstatus_to_werror(status);
        }
 
+       status = dsdb_get_extended_dn_nttime(dsdb_dn->dn, &la->originating_add_time, "RMD_ADDTIME");
+       if (!NT_STATUS_IS_OK(status)) {
+               /* this is possible for upgraded links */
+               la->originating_add_time = la->meta_data.originating_change_time;
+       }
+
        werr = dsdb_dn_la_to_blob(sam_ctx, sa, schema, *la_list, dsdb_dn, &la->value.blob);
        W_ERROR_NOT_OK_RETURN(werr);