r8515: ldb_dn_cmp now uses ldb_dn_compare so that the DNs are compared
authorSimo Sorce <idra@samba.org>
Sat, 16 Jul 2005 18:16:32 +0000 (18:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:29:33 +0000 (13:29 -0500)
on a content level not ona form level, his means that the 2 DNs:
a) cn= user, dc=this, dc = is,dc=test
b) cn=user,dc=this,dc=is,dc=test
are now identical even if the string form differ (spaces)
(This used to be commit 76d496c30867ae80434483a34b0d842523aed762)

source4/lib/ldb/common/ldb_dn.c
source4/lib/ldb/common/ldb_utf8.c
source4/lib/ldb/include/ldb.h
source4/lib/ldb/tools/ldbedit.c
source4/lib/ldb/tools/ldbsearch.c

index 32b575dd36809727c3e009264f4b9b08053d097d..3cdc7ba85f815c0e78572d08dfa7b6bb7ab78459 100644 (file)
@@ -450,6 +450,29 @@ int ldb_dn_compare(struct ldb_context *ldb,
        return ldb_dn_compare_base(ldb, edn0, edn1);
 }
 
+int ldb_dn_cmp(struct ldb_context *ldb, const char *dn0, const char *dn1)
+{
+       struct ldb_dn *edn0;
+       struct ldb_dn *edn1;
+       int ret;
+
+       edn0 = ldb_dn_explode_casefold(ldb, dn0);
+       if (edn0 == NULL) return 0;
+
+       edn1 = ldb_dn_explode_casefold(ldb, dn1);
+       if (edn1 == NULL) {
+               talloc_free(edn0);
+               return 0;
+       }
+
+       ret = ldb_dn_compare(ldb, edn0, edn1);
+
+       talloc_free(edn0);
+       talloc_free(edn1);
+
+       return ret;
+}
+
 /*
   casefold a dn. We need to casefold the attribute names, and canonicalize 
   attribute values of case insensitive attributes.
index 5df5a6bba78c3737460f342bbeb8f3685f3284ac..cd68180f770269a27babc5ae694b5bb91c71a2c3 100644 (file)
@@ -72,15 +72,6 @@ int ldb_caseless_cmp(const char *s1, const char *s2)
        return s2[i];
 }
 
-/*
-  compare two basedn fields
-  return 0 for match
-*/
-int ldb_dn_cmp(const char *dn1, const char *dn2)
-{
-       return ldb_caseless_cmp(dn1, dn2);
-}
-
 /*
   compare two attributes
   return 0 for match
index c2d7b0d61403202c40a6e82c168004c2cfb8b2d9..485e2bc73024f0148b7be018ddec2c363d08acdb 100644 (file)
@@ -335,7 +335,7 @@ int ldb_attrib_add_handlers(struct ldb_context *ldb,
 
 /* useful functions for ldb_message structure manipulation */
 
-int ldb_dn_cmp(const char *dn1, const char *dn2);
+int ldb_dn_cmp(struct ldb_context *ldb, const char *dn1, const char *dn2);
 int ldb_attr_cmp(const char *dn1, const char *dn2);
 
 /* case-fold a DN */
index 12bf12bfff0411fb819d4fba35599e3377d04fab..1613f4ddc5a2e716dfa4cdcd89c1ba7639577dce 100644 (file)
@@ -93,12 +93,14 @@ static int modify_record(struct ldb_context *ldb,
 /*
   find dn in msgs[]
 */
-static struct ldb_message *msg_find(struct ldb_message **msgs, int count,
+static struct ldb_message *msg_find(struct ldb_context *ldb,
+                                   struct ldb_message **msgs,
+                                   int count,
                                    const char *dn)
 {
        int i;
        for (i=0;i<count;i++) {
-               if (ldb_dn_cmp(dn, msgs[i]->dn) == 0) {
+               if (ldb_dn_cmp(ldb, dn, msgs[i]->dn) == 0) {
                        return msgs[i];
                }
        }
@@ -119,7 +121,7 @@ static int merge_edits(struct ldb_context *ldb,
 
        /* do the adds and modifies */
        for (i=0;i<count2;i++) {
-               msg = msg_find(msgs1, count1, msgs2[i]->dn);
+               msg = msg_find(ldb, msgs1, count1, msgs2[i]->dn);
                if (!msg) {
                        if (options->verbose > 0) {
                                ldif_write_msg(ldb, stdout, LDB_CHANGETYPE_ADD, msgs2[i]);
@@ -139,7 +141,7 @@ static int merge_edits(struct ldb_context *ldb,
 
        /* do the deletes */
        for (i=0;i<count1;i++) {
-               msg = msg_find(msgs2, count2, msgs1[i]->dn);
+               msg = msg_find(ldb, msgs2, count2, msgs1[i]->dn);
                if (!msg) {
                        if (options->verbose > 0) {
                                ldif_write_msg(ldb, stdout, LDB_CHANGETYPE_DELETE, msgs1[i]);
index 396bb7797a216e2eb62971bd33979b2b68246609..5604436980be10b6448bf68b145a4ae079c655bb 100644 (file)
@@ -55,10 +55,12 @@ static void usage(void)
        exit(1);
 }
 
+struct ldb_context *ldbsearch_ldb;
+
 static int do_compare_msg(struct ldb_message **el1,
-               struct ldb_message **el2)
+                         struct ldb_message **el2)
 {
-       return ldb_dn_cmp((*el1)->dn, (*el2)->dn);
+       return ldb_dn_cmp(ldbsearch_ldb, (*el1)->dn, (*el2)->dn);
 }
 
 static int do_search(struct ldb_context *ldb,
@@ -79,6 +81,7 @@ static int do_search(struct ldb_context *ldb,
 
        printf("# returned %d records\n", ret);
 
+       ldbsearch_ldb = ldb;
        if (sort_attribs) {
                qsort(msgs, ret, sizeof(struct ldb_message *),
                                (comparison_fn_t)do_compare_msg);