[SCM] Samba Shared Repository - branch master updated - tevent-0-9-8-192-g741fe9d

Andrew Tridgell tridge at samba.org
Fri Sep 11 02:02:17 MDT 2009


The branch, master has been updated
       via  741fe9d6a1833f358c32f91c5d7583c1c713110f (commit)
       via  5b20af988c319f389e29db0a47d552c5f68aed58 (commit)
      from  4e98f93775762de18b0dfc31080af5c443324c70 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 741fe9d6a1833f358c32f91c5d7583c1c713110f
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Sep 11 18:01:27 2009 +1000

    s4-repl: don't add the RDN if it is already there

commit 5b20af988c319f389e29db0a47d552c5f68aed58
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Sep 11 18:00:42 2009 +1000

    s4-ldb: don't remove a message element beyond the end of the array

-----------------------------------------------------------------------

Summary of changes:
 source4/dsdb/repl/replicated_objects.c |   22 +++++++++++++++++++---
 source4/lib/ldb/common/ldb_msg.c       |    4 ++++
 2 files changed, 23 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c
index ecf2856..fb6d4c1 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;
diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c
index 8d0fa31..702978a 100644
--- a/source4/lib/ldb/common/ldb_msg.c
+++ b/source4/lib/ldb/common/ldb_msg.c
@@ -739,6 +739,10 @@ int ldb_msg_copy_attr(struct ldb_message *msg, const char *attr, const char *rep
 void ldb_msg_remove_element(struct ldb_message *msg, struct ldb_message_element *el)
 {
 	int n = (el - msg->elements);
+	if (n >= msg->num_elements) {
+		/* should we abort() here? */
+		return;
+	}
 	if (n != msg->num_elements-1) {
 		memmove(el, el+1, ((msg->num_elements-1) - n)*sizeof(*el));
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list