]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-mdb/search.c
ITS#7702 fix results with aliases
[openldap] / servers / slapd / back-mdb / search.c
index d90125e8e46dcc0d5688ec5868b447f0b666c8f5..f0eec7e524104a2449107fa0b66f4c887b7e050d 100644 (file)
@@ -722,12 +722,9 @@ dn2entry_retry:
                if (scopes[0].mid > 1) {
                        cursor = 1;
                        for (cscope = 1; cscope <= scopes[0].mid; cscope++) {
-                               /* Ignore the original base */
-                               if (scopes[cscope].mid == base->e_id)
-                                       continue;
                                iscopes[cursor++] = scopes[cscope].mid;
                        }
-                       iscopes[0] = scopes[0].mid - 1;
+                       iscopes[0] = scopes[0].mid;
                } else {
                        iscopes[0] = 0;
                }
@@ -740,7 +737,7 @@ dn2entry_retry:
                        id = NOID;
                else
                        id = isc.id;
-               cscope = 0;
+               cscope = 1;     /* skip original base */
        } else {
                id = mdb_idl_first( candidates, &cursor );
                wwctx.mcd = NULL;
@@ -952,7 +949,7 @@ notfound:
                                pdn = base->e_name;
                                pndn = base->e_nname;
                        } else {
-                               mdb_id2name( op, ltid, &isc.mc, scopes[isc.nscope].mid, &pdn, &pndn );
+                               mdb_id2name( op, ltid, &isc.mc, scopes[isc.nscope].mid, &pdn, &pndn, NULL );
                        }
                        e->e_name.bv_len = pdn.bv_len;
                        e->e_nname.bv_len = pndn.bv_len;
@@ -1129,7 +1126,13 @@ loop_continue:
                                                mdb_entry_return( op, base );
                                        rs->sr_err = mdb_id2entry(op, mci, isc.id, &base);
                                        if ( !rs->sr_err ) {
-                                               mdb_id2name( op, ltid, &isc.mc, isc.id, &base->e_name, &base->e_nname );
+                                               rc = mdb_id2name( op, ltid, &isc.mc, isc.id, &base->e_name, &base->e_nname,
+                                                       op->ors_scope == LDAP_SCOPE_SUBTREE ? iscopes : NULL );
+                                               if ( rc == MDB_KEYEXIST ) {
+                                                       mdb_entry_return( op, base );
+                                                       base = NULL;
+                                                       continue;
+                                               }
                                                isc.numrdns = 0;
                                                if (isc.oscope == LDAP_SCOPE_ONELEVEL)
                                                        isc.oscope = LDAP_SCOPE_BASE;