]> git.sur5r.net Git - openldap/commitdiff
recent check for syncrepl searchbase broke test048; fixing...
authorPierangelo Masarati <ando@openldap.org>
Mon, 13 Aug 2007 20:51:42 +0000 (20:51 +0000)
committerPierangelo Masarati <ando@openldap.org>
Mon, 13 Aug 2007 20:51:42 +0000 (20:51 +0000)
servers/slapd/backend.c
servers/slapd/proto-slap.h
servers/slapd/syncrepl.c

index f1d49e2c07e39150f38b4752a520ee2ae544bd1b..ab0ccd1f9555f95d3b8a6fb5387d6c518506f71d 100644 (file)
@@ -693,6 +693,26 @@ be_issuffix(
        return 0;
 }
 
+int
+be_issubordinate(
+    Backend *be,
+    struct berval *bvsubordinate )
+{
+       int     i;
+
+       if ( be->be_nsuffix == NULL ) {
+               return 0;
+       }
+
+       for ( i = 0; !BER_BVISNULL( &be->be_nsuffix[i] ); i++ ) {
+               if ( dnIsSuffix( bvsubordinate, &be->be_nsuffix[i] ) ) {
+                       return 1;
+               }
+       }
+
+       return 0;
+}
+
 int
 be_isroot_dn( Backend *be, struct berval *ndn )
 {
index 8b975e761587e43faf82c480ca6620cc23ecdfc1..19b86837ec644ba38f1f6a376d29ee90239fff00 100644 (file)
@@ -340,6 +340,8 @@ LDAP_SLAPD_F (BackendDB *) select_backend LDAP_P((
 
 LDAP_SLAPD_F (int) be_issuffix LDAP_P(( Backend *be,
        struct berval *suffix ));
+LDAP_SLAPD_F (int) be_issubordinate LDAP_P(( Backend *be,
+       struct berval *subordinate ));
 LDAP_SLAPD_F (int) be_isroot LDAP_P(( Operation *op ));
 LDAP_SLAPD_F (int) be_isroot_dn LDAP_P(( Backend *be, struct berval *ndn ));
 LDAP_SLAPD_F (int) be_isroot_pw LDAP_P(( Operation *op ));
index 426d40cbdfaad852bd95bf02a713167299dfa611..a2acceaf848f56529d51389c2317a3338c82249a 100644 (file)
@@ -3358,8 +3358,9 @@ parse_syncrepl_line(
                                Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->cr_msg, 0 );
                                return -1;
                        }
-                       if ( select_backend( &si->si_base, 0 ) != c->be ) {
-                               ber_memfree( si->si_base.bv_val );
+                       if ( !be_issubordinate( c->be, &si->si_base ) ) {
+                               ch_free( si->si_base.bv_val );
+                               BER_BVZERO( &si->si_base );
                                snprintf( c->cr_msg, sizeof( c->cr_msg ),
                                        "Base DN \"%s\" is not within the database naming context",
                                        val );