Commit dd86a356 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#5925

parent 4a2bcaef
......@@ -22,6 +22,7 @@ OpenLDAP 2.4.14 Engineering
Fixed slapd connection assert (ITS#5835)
Fixed slapd epoll handling (ITS#5886)
Fixed slapd frontend/backend options handling (ITS#5857)
Fixed slapd glue with MMR (ITS#5925)
Fixed slapd manageDSAit with glue entries (ITS#5921)
Fixed slapd syncrepl rename handling (ITS#5809)
Fixed slapd syncrepl MMR when adding new server (ITS#5850)
......
......@@ -942,6 +942,15 @@ glue_tool_sync (
return 0;
}
typedef struct glue_Addrec {
struct glue_Addrec *ga_next;
BackendDB *ga_be;
} glue_Addrec;
/* List of added subordinates */
static glue_Addrec *ga_list;
static int ga_adding;
static int
glue_db_init(
BackendDB *be,
......@@ -994,6 +1003,9 @@ glue_db_init(
SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_INSTANCE;
if ( ga_list )
glue_sub_attach( 1 );
return 0;
}
......@@ -1068,21 +1080,19 @@ glue_sub_del( BackendDB *b0 )
return rc;
}
typedef struct glue_Addrec {
struct glue_Addrec *ga_next;
BackendDB *ga_be;
} glue_Addrec;
/* List of added subordinates */
static glue_Addrec *ga_list;
/* Attach all the subordinate backends to their superior */
int
glue_sub_attach()
glue_sub_attach( int online )
{
glue_Addrec *ga, *gnext = NULL;
int rc = 0;
if ( ga_adding )
return 0;
ga_adding = 1;
/* For all the subordinate backends */
for ( ga=ga_list; ga != NULL; ga = gnext ) {
BackendDB *be;
......@@ -1122,11 +1132,20 @@ glue_sub_attach()
&gi->gi_n[gi->gi_nodes].gn_pdn );
gi->gi_nodes++;
on->on_bi.bi_private = gi;
ga->ga_be->be_flags |= SLAP_DBFLAG_GLUE_LINKED;
break;
}
if ( !be ) {
Debug( LDAP_DEBUG_ANY, "glue: no superior found for sub %s!\n",
ga->ga_be->be_suffix[0].bv_val, 0, 0 );
/* allow this for now, assume a superior will
* be added later
*/
if ( online ) {
rc = 0;
gnext = ga_list;
break;
}
rc = LDAP_NO_SUCH_OBJECT;
}
ch_free( ga );
......@@ -1135,6 +1154,8 @@ glue_sub_attach()
ga_list = gnext;
ga_adding = 0;
return rc;
}
......@@ -1160,7 +1181,7 @@ glue_sub_add( BackendDB *be, int advert, int online )
ga_list = ga;
if ( online )
rc = glue_sub_attach();
rc = glue_sub_attach( online );
return rc;
}
......
......@@ -792,7 +792,7 @@ unhandled_option:;
}
}
if ( glue_sub_attach( ) != 0 ) {
if ( glue_sub_attach( 0 ) != 0 ) {
Debug( LDAP_DEBUG_ANY,
"subordinate config error\n",
0, 0, 0 );
......
......@@ -426,7 +426,7 @@ LDAP_SLAPD_V(BackendInfo) slap_binfo[];
*/
LDAP_SLAPD_F (int) glue_sub_init( void );
LDAP_SLAPD_F (int) glue_sub_attach( void );
LDAP_SLAPD_F (int) glue_sub_attach( int online );
LDAP_SLAPD_F (int) glue_sub_add( BackendDB *be, int advert, int online );
LDAP_SLAPD_F (int) glue_sub_del( BackendDB *be );
......
......@@ -564,7 +564,7 @@ slap_tool_init(
}
if ( use_glue ) {
rc = glue_sub_attach();
rc = glue_sub_attach( 0 );
if ( rc != 0 ) {
fprintf( stderr,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment