diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-09-11 18:01:27 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-09-11 18:02:04 +1000 |
commit | 741fe9d6a1833f358c32f91c5d7583c1c713110f (patch) | |
tree | c9d87d2787bd8645a9aa93f623fdad216bb30783 /source4 | |
parent | 5b20af988c319f389e29db0a47d552c5f68aed58 (diff) | |
download | samba-741fe9d6a1833f358c32f91c5d7583c1c713110f.tar.gz samba-741fe9d6a1833f358c32f91c5d7583c1c713110f.tar.bz2 samba-741fe9d6a1833f358c32f91c5d7583c1c713110f.zip |
s4-repl: don't add the RDN if it is already there
Diffstat (limited to 'source4')
-rw-r--r-- | source4/dsdb/repl/replicated_objects.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c index ecf2856eb5..fb6d4c18ec 100644 --- a/source4/dsdb/repl/replicated_objects.c +++ b/source4/dsdb/repl/replicated_objects.c @@ -150,9 +150,25 @@ static WERROR dsdb_convert_object_ex(struct ldb_context *ldb, } if (rdn_m) { - ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL); - if (ret != LDB_SUCCESS) { - return WERR_FOOBAR; + struct ldb_message_element *el; + el = ldb_msg_find_element(msg, rdn_attr->lDAPDisplayName); + if (!el) { + ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL); + if (ret != LDB_SUCCESS) { + return WERR_FOOBAR; + } + } else { + if (el->num_values != 1) { + DEBUG(0,(__location__ ": Unexpected num_values=%u\n", + el->num_values)); + return WERR_FOOBAR; + } + if (!ldb_val_equal_exact(&el->values[0], rdn_value)) { + DEBUG(0,(__location__ ": RDN value changed? '%*.*s' '%*.*s'\n", + (int)el->values[0].length, (int)el->values[0].length, el->values[0].data, + (int)rdn_value->length, (int)rdn_value->length, rdn_value->data)); + return WERR_FOOBAR; + } } rdn_m->attid = rdn_attid; |