lload_bindconf_unparse( &bindconf, &bv );
- for ( i = 0; isspace((unsigned char)bv.bv_val[i]); i++ )
+ for ( i = 0; isspace( (unsigned char)bv.bv_val[i] ); i++ )
/* count spaces */;
if ( i ) {
lload_backend_ldadd( CfEntryInfo *p, Entry *e, ConfigArgs *ca )
{
LloadBackend *b;
+ Attribute *a;
+ AttributeDescription *ad = NULL;
+ struct berval bv, type, rdn;
+ const char *text;
+ char *name;
Debug( LDAP_DEBUG_TRACE, "lload_backend_ldadd: "
"a new backend-server is being added\n" );
p->ce_bi->bi_cf_ocs != lloadocs )
return LDAP_CONSTRAINT_VIOLATION;
+ dnRdn( &e->e_name, &rdn );
+ type.bv_len = strchr( rdn.bv_val, '=' ) - rdn.bv_val;
+ type.bv_val = rdn.bv_val;
+
+ /* Find attr */
+ slap_bv2ad( &type, &ad, &text );
+ if ( ad != slap_schema.si_ad_cn ) return LDAP_NAMING_VIOLATION;
+
+ a = attr_find( e->e_attrs, ad );
+ if ( !a || a->a_numvals != 1 ) return LDAP_NAMING_VIOLATION;
+ bv = a->a_vals[0];
+
+ if ( bv.bv_val[0] == '{' && ( name = strchr( bv.bv_val, '}' ) ) ) {
+ name++;
+ bv.bv_len -= name - bv.bv_val;
+ bv.bv_val = name;
+ }
+
b = backend_alloc();
+ ber_dupbv( &b->b_name, &bv );
ca->bi = p->ce_bi;
ca->ca_private = b;
bv.bv_val = c->cr_msg;
LDAP_CIRCLEQ_FOREACH ( b, &backend, b_next ) {
+ char buf[STRLENOF( "server 4294967295" ) + 1] = { 0 };
+
bv.bv_len = snprintf( c->cr_msg, sizeof(c->cr_msg),
"cn=" SLAP_X_ORDERED_FMT "server %d", i, i + 1 );
+ snprintf( buf, sizeof(buf), "server %d", i + 1 );
+ ber_str2bv( buf, 0, 1, &b->b_name );
+
c->ca_private = b;
c->valx = i;
return rc;
}
-static struct monitor_subsys_t *servers_subsys;
-/* Not sure if this has to be a subsystem at all, perhaps just entries? */
-
static int
lload_monitor_server_update(
Operation *op,
{
monitor_extra_t *mbe;
Entry *e;
- unsigned int i = 1, j = 0;
int rc;
LloadBackend *b;
}
LDAP_CIRCLEQ_FOREACH ( b, &backend, b_next ) {
- j++;
- }
-
- servers_subsys = ch_calloc( j, sizeof(monitor_subsys_t) );
- LDAP_CIRCLEQ_FOREACH ( b, &backend, b_next ) {
- monitor_subsys_t *bk_mss;
- struct berval bv;
+ monitor_subsys_t *bk_mss = ch_calloc( 1, sizeof(monitor_subsys_t) );
- bv.bv_len = sizeof( "cn=Server 4294967295" );
- bv.bv_val = ch_malloc( bv.bv_len );
- bv.bv_len = snprintf( bv.bv_val, bv.bv_len, "cn=Server %u", i );
+ bk_mss->mss_rdn.bv_len = sizeof("cn=") + b->b_name.bv_len;
+ bk_mss->mss_rdn.bv_val = ch_malloc( bk_mss->mss_rdn.bv_len );
+ bk_mss->mss_rdn.bv_len = snprintf( bk_mss->mss_rdn.bv_val,
+ bk_mss->mss_rdn.bv_len, "cn=%s", b->b_name.bv_val );
- bk_mss = &servers_subsys[i - 1];
- bk_mss->mss_name = bv.bv_val;
ber_str2bv( LLOAD_MONITOR_BACKENDS_DN, 0, 0, &bk_mss->mss_dn );
- ber_dupbv( &bk_mss->mss_rdn, &bv );
+ bk_mss->mss_name = b->b_name.bv_val;
bk_mss->mss_flags = MONITOR_F_VOLATILE_CH;
bk_mss->mss_open = lload_monitor_backend_open;
bk_mss->mss_create = lload_monitor_up_conn_create;
bk_mss->mss_name );
return -1;
}
- i++;
}
done:
entry_free( e );