s4-dsdb: split RMD_USN into RMD_LOCAL_USN and RMD_ORIGINATING_USN
authorAndrew Tridgell <tridge@samba.org>
Fri, 18 Dec 2009 01:47:31 +0000 (12:47 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 1 Jan 2010 21:16:50 +0000 (08:16 +1100)
We need a separate RMD_LOCAL_USN to allow us to tell what attributes
need to be sent in a getncchanges request. Thanks to Metze for
pointing this out.

Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/dsdb/samdb/ldb_modules/repl_meta_data.c
source4/lib/ldb-samba/ldif_handlers.c

index e184181f0154ee577facfa21687c5783deb4f9ed..822ed8868d6dfa266b2fadc642b7ae04d0230a4f 100644 (file)
@@ -1172,12 +1172,13 @@ static int get_parsed_dns(struct ldb_module *module, TALLOC_CTX *mem_ctx,
 /*
   build a new extended DN, including all meta data fields
 
-  DELETED        = 1 or missing
-  RMD_ADDTIME    = originating_add_time
-  RMD_INVOCID    = originating_invocation_id
-  RMD_CHANGETIME = originating_change_time
-  RMD_USN        = originating_usn
-  RMD_VERSION    = version
+  DELETED             = 1 or missing
+  RMD_ADDTIME         = originating_add_time
+  RMD_INVOCID         = originating_invocation_id
+  RMD_CHANGETIME      = originating_change_time
+  RMD_ORIGINATING_USN = originating_usn
+  RMD_LOCAL_USN       = local_usn
+  RMD_VERSION         = version
  */
 static int replmd_build_la_val(TALLOC_CTX *mem_ctx, struct ldb_val *v, struct dsdb_dn *dsdb_dn,
                               const struct GUID *invocation_id, uint64_t seq_num, time_t t)
@@ -1221,7 +1222,9 @@ static int replmd_build_la_val(TALLOC_CTX *mem_ctx, struct ldb_val *v, struct ds
        if (ret != LDB_SUCCESS) return ret;
        ret = ldb_dn_set_extended_component(dn, "RMD_CHANGETIME", &tval);
        if (ret != LDB_SUCCESS) return ret;
-       ret = ldb_dn_set_extended_component(dn, "RMD_USN", &usnv);
+       ret = ldb_dn_set_extended_component(dn, "RMD_LOCAL_USN", &usnv);
+       if (ret != LDB_SUCCESS) return ret;
+       ret = ldb_dn_set_extended_component(dn, "RMD_ORIGINATING_USN", &usnv);
        if (ret != LDB_SUCCESS) return ret;
        ret = ldb_dn_set_extended_component(dn, "RMD_VERSION", &vers);
        if (ret != LDB_SUCCESS) return ret;
@@ -1303,7 +1306,10 @@ static int replmd_update_la_val(TALLOC_CTX *mem_ctx, struct ldb_val *v, struct d
        if (ret != LDB_SUCCESS) return ret;
 
        /* update the USN */
-       ret = ldb_dn_set_extended_component(dn, "RMD_USN", &usnv);
+       ret = ldb_dn_set_extended_component(dn, "RMD_ORIGINATING_USN", &usnv);
+       if (ret != LDB_SUCCESS) return ret;
+
+       ret = ldb_dn_set_extended_component(dn, "RMD_LOCAL_USN", &usnv);
        if (ret != LDB_SUCCESS) return ret;
 
        /* increase the version by 1 */
index 5f709e6320e3f4560fb5cc9ef266f67d79c80e1b..39fc93af9570dc6511b80561d6ce37c4b2ccf682 100644 (file)
@@ -861,7 +861,12 @@ static const struct ldb_dn_extended_syntax samba_dn_syntax[] = {
                .write_clear_fn   = ldb_handler_copy,
                .write_hex_fn     = ldb_handler_copy
        },{
-               .name             = "RMD_USN",
+               .name             = "RMD_LOCAL_USN",
+               .read_fn          = ldb_handler_copy,
+               .write_clear_fn   = ldb_handler_copy,
+               .write_hex_fn     = ldb_handler_copy
+       },{
+               .name             = "RMD_ORIGINATING_USN",
                .read_fn          = ldb_handler_copy,
                .write_clear_fn   = ldb_handler_copy,
                .write_hex_fn     = ldb_handler_copy