]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/candidates.c
import selected fixes/enhancements from HEAD (ITS#4387, partial ITS#4390)
[openldap] / servers / slapd / back-meta / candidates.c
index e78b20602dc8ab5d4054a5467c32e4dcf1cda408..1986ab3bd6f45158343099039b1893463867fa8a 100644 (file)
@@ -61,10 +61,21 @@ int
 meta_back_is_candidate(
        struct berval   *nsuffix,
        int             suffixscope,
+       BerVarray       subtree_exclude,
        struct berval   *ndn,
        int             scope )
 {
        if ( dnIsSuffix( ndn, nsuffix ) ) {
+               if ( subtree_exclude ) {
+                       int     i;
+
+                       for ( i = 0; !BER_BVISNULL( &subtree_exclude[ i ] ); i++ ) {
+                               if ( dnIsSuffix( ndn, &subtree_exclude[ i ] ) ) {
+                                       return META_NOT_CANDIDATE;
+                               }
+                       }
+               }
+
                switch ( suffixscope ) {
                case LDAP_SCOPE_SUBTREE:
                default:
@@ -128,6 +139,7 @@ meta_back_select_unique_candidate(
        for ( i = 0; i < mi->mi_ntargets; ++i ) {
                if ( meta_back_is_candidate( &mi->mi_targets[ i ].mt_nsuffix,
                                mi->mi_targets[ i ].mt_scope,
+                               mi->mi_targets[ i ].mt_subtree_exclude,
                                ndn, LDAP_SCOPE_BASE ) )
                {
                        if ( candidate == META_TARGET_NONE ) {