]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backglue.c
Fix previous commit
[openldap] / servers / slapd / backglue.c
index 59dc6ecec49494b4fd1e5e06c5e0e861fdc63195..c68c1708dd1f0907ed14477f6457c9cbc875a9e1 100644 (file)
@@ -36,7 +36,7 @@
 
 typedef struct gluenode {
        BackendDB *be;
-       char *pdn;
+       struct berval pdn;
 } gluenode;
 
 typedef struct glueinfo {
@@ -352,7 +352,7 @@ glue_back_search (
                        }
                        be = gi->n[i].be;
                        if (scope == LDAP_SCOPE_ONELEVEL && 
-                               !strcmp (gi->n[i].pdn, ndn->bv_val)) {
+                               dn_match(&gi->n[i].pdn, ndn)) {
                                rc = be->be_search (be, conn, op,
                                        be->be_suffix[0], be->be_nsuffix[0],
                                        LDAP_SCOPE_BASE, deref,
@@ -806,6 +806,7 @@ glue_sub_init( )
        BackendDB *b1, *be;
        BackendInfo *bi;
        glueinfo *gi;
+       struct berval bv;
 
        /* While there are subordinate backends, search backwards through the
         * backends and connect them to their superior.
@@ -884,8 +885,14 @@ glue_sub_init( )
                                        gi->nodes * sizeof(gluenode));
                        }
                        gi->n[gi->nodes].be = be;
-                       gi->n[gi->nodes].pdn = dn_parent(NULL,
+                       if ( dnParent( be->be_nsuffix[0]->bv_val, 
+                                       (const char **)&bv.bv_val ) 
+                                       != LDAP_SUCCESS ) {
+                               return -1;
+                       }
+                       bv.bv_len = be->be_nsuffix[0]->bv_len - (bv.bv_val -
                                be->be_nsuffix[0]->bv_val);
+                       gi->n[gi->nodes].pdn = bv;
                        gi->nodes++;
                }
                if (gi) {
@@ -893,8 +900,14 @@ glue_sub_init( )
                        gi = (glueinfo *)ch_realloc(gi,
                                sizeof(glueinfo) + gi->nodes * sizeof(gluenode));
                        gi->n[gi->nodes].be = gi->be;
-                       gi->n[gi->nodes].pdn = dn_parent(NULL,
+                       if ( dnParent( b1->be_nsuffix[0]->bv_val, 
+                                       (const char **)&bv.bv_val ) 
+                                       != LDAP_SUCCESS ) {
+                               return -1;
+                       }
+                       bv.bv_len = b1->be_nsuffix[0]->bv_len - (bv.bv_val -
                                b1->be_nsuffix[0]->bv_val);
+                       gi->n[gi->nodes].pdn = bv;
                        gi->nodes++;
                        b1->be_private = gi;
                        b1->bd_info = bi;