From cb0f8f0ee087475e63bcc969cf501ce9eae9c98f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 25 Aug 2010 12:32:48 +1000 Subject: s4-repl: load RODC partitions using msDS-hasFullReplicaNCs we mark these as incoming_only Pair-Programmed-With: Andrew Bartlett --- source4/dsdb/repl/drepl_partitions.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'source4/dsdb/repl/drepl_partitions.c') diff --git a/source4/dsdb/repl/drepl_partitions.c b/source4/dsdb/repl/drepl_partitions.c index cb45b41248..5a11dce50f 100644 --- a/source4/dsdb/repl/drepl_partitions.c +++ b/source4/dsdb/repl/drepl_partitions.c @@ -39,7 +39,7 @@ WERROR dreplsrv_load_partitions(struct dreplsrv_service *s) struct ldb_dn *basedn; struct ldb_result *r; struct ldb_message_element *el; - static const char *attrs[] = { "hasMasterNCs", NULL }; + static const char *attrs[] = { "hasMasterNCs", "msDS-hasFullReplicaNCs", NULL }; unsigned int i; int ret; @@ -55,10 +55,9 @@ WERROR dreplsrv_load_partitions(struct dreplsrv_service *s) return WERR_FOOBAR; } + + el = ldb_msg_find_element(r->msgs[0], "hasMasterNCs"); - if (!el) { - return WERR_FOOBAR; - } for (i=0; el && i < el->num_values; i++) { const char *v = (const char *)el->values[i].data; @@ -80,6 +79,29 @@ WERROR dreplsrv_load_partitions(struct dreplsrv_service *s) DEBUG(2, ("dreplsrv_partition[%s] loaded\n", v)); } + el = ldb_msg_find_element(r->msgs[0], "msDS-hasFullReplicaNCs"); + + for (i=0; el && i < el->num_values; i++) { + const char *v = (const char *)el->values[i].data; + struct ldb_dn *pdn; + struct dreplsrv_partition *p; + + pdn = ldb_dn_new(s, s->samdb, v); + if (!ldb_dn_validate(pdn)) { + return WERR_FOOBAR; + } + + p = talloc_zero(s, struct dreplsrv_partition); + W_ERROR_HAVE_NO_MEMORY(p); + + p->dn = talloc_steal(p, pdn); + p->incoming_only = true; + + DLIST_ADD(s->partitions, p); + + DEBUG(2, ("dreplsrv_partition[%s] loaded (incoming only)\n", v)); + } + talloc_free(r); status = dreplsrv_refresh_partitions(s); -- cgit