c->value_int = (SLAP_SYNC_SUBENTRY(c->be) != 0);
break;
case CFG_MULTIPROVIDER:
- if ( SLAP_SHADOW(c->be))
+ if ( sid_list )
c->value_int = (SLAP_MULTIPROVIDER(c->be) != 0);
else
rc = 1;
case CFG_MULTIPROVIDER:
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MULTI_SHADOW;
- if(SLAP_SHADOW(c->be))
- SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW;
break;
#if defined(HAVE_CYRUS_SASL) && defined(SLAP_AUXPROP_DONTUSECOPY)
break;
case CFG_MULTIPROVIDER:
- if(c->value_int && !SLAP_SHADOW(c->be)) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> database is not a shadow",
+ /* Matching on sid_list rather than serverID to keep tools in check */
+ if ( c->value_int && !sid_list ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "serverID is not configured, do that first",
c->argv[0] );
Debug(LDAP_DEBUG_ANY, "%s: %s\n",
c->log, c->cr_msg );
return(1);
}
if(c->value_int) {
- SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_SINGLE_SHADOW;
SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_MULTI_SHADOW;
} else {
- SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW;
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MULTI_SHADOW;
}
break;
} else if ( c->op == LDAP_MOD_DELETE ) {
ch_free( c->be->be_update_ndn.bv_val );
BER_BVZERO( &c->be->be_update_ndn );
- SLAP_DBFLAGS(c->be) ^= (SLAP_DBFLAG_SHADOW | SLAP_DBFLAG_SLURP_SHADOW);
+ SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_SLURP_SHADOW;
return 0;
}
if(SLAP_SHADOW(c->be)) {
return 1;
}
- if ( SLAP_SHADOW(c->be) ) {
- /* if already shadow, only check consistency */
- if ( ( SLAP_DBFLAGS(c->be) & flag ) != flag ) {
- Debug( LDAP_DEBUG_ANY, "%s: inconsistent shadow flag 0x%lx.\n",
- c->log, flag );
- return 1;
- }
+ /* if already shadow, only check consistency */
+ if ( ((SLAP_DBFLAGS(c->be) & SLAP_DBFLAG_SINGLE_SHADOW_MASK) | flag) != flag ) {
+ Debug( LDAP_DEBUG_ANY, "%s: inconsistent shadow flag 0x%lx != 0x%lx.\n",
+ c->log, flag, ( SLAP_DBFLAGS(c->be) & SLAP_DBFLAG_SINGLE_SHADOW_MASK ) );
+ return 1;
} else {
- SLAP_DBFLAGS(c->be) |= (SLAP_DBFLAG_SHADOW | flag);
- if ( !SLAP_MULTIPROVIDER( c->be ))
- SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW;
+ SLAP_DBFLAGS(c->be) |= flag;
}
return 0;
}
return 0;
}
- if(!SLAP_SHADOW(c->be) && !c->be->be_syncinfo) {
+ if( !SLAP_SINGLE_SHADOW(c->be) && !c->be->be_syncinfo ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> must appear after syncrepl or updatedn",
c->argv[0] );
Debug(LDAP_DEBUG_ANY, "%s: %s\n",
#define SLAP_DBFLAG_GLOBAL_OVERLAY 0x0200U /* this db struct is a global overlay */
#define SLAP_DBFLAG_DYNAMIC 0x0400U /* this db allows dynamicObjects */
#define SLAP_DBFLAG_MONITORING 0x0800U /* custom monitoring enabled */
-#define SLAP_DBFLAG_SHADOW 0x8000U /* a shadow */
-#define SLAP_DBFLAG_SINGLE_SHADOW 0x4000U /* a single-provider shadow */
#define SLAP_DBFLAG_SYNC_SHADOW 0x1000U /* a sync shadow */
-#define SLAP_DBFLAG_SLURP_SHADOW 0x2000U /* a slurp shadow */
-#define SLAP_DBFLAG_SHADOW_MASK (SLAP_DBFLAG_SHADOW|SLAP_DBFLAG_SINGLE_SHADOW|SLAP_DBFLAG_SYNC_SHADOW|SLAP_DBFLAG_SLURP_SHADOW)
+#define SLAP_DBFLAG_SLURP_SHADOW 0x2000U /* a push replication target */
+#define SLAP_DBFLAG_SINGLE_SHADOW_MASK (SLAP_DBFLAG_SYNC_SHADOW|SLAP_DBFLAG_SLURP_SHADOW) /* a single-provider shadow */
+#define SLAP_DBFLAG_MULTI_SHADOW 0x4000U /* uses multi-provider */
+#define SLAP_DBFLAG_SHADOW_MASK (SLAP_DBFLAG_SINGLE_SHADOW_MASK|SLAP_DBFLAG_MULTI_SHADOW)
+/* 0x8000U no longer used */
#define SLAP_DBFLAG_CLEAN 0x10000U /* was cleanly shutdown */
#define SLAP_DBFLAG_ACL_ADD 0x20000U /* check attr ACLs on adds */
#define SLAP_DBFLAG_SYNC_SUBENTRY 0x40000U /* use subentry for context */
-#define SLAP_DBFLAG_MULTI_SHADOW 0x80000U /* uses multi-provider */
+/* 0x80000U no longer used */
#define SLAP_DBFLAG_DISABLED 0x100000U
#define SLAP_DBFLAG_LASTBIND 0x200000U
#define SLAP_DBFLAG_OPEN 0x400000U /* db is currently open */
(SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLUE_LINKED)
#define SLAP_GLUE_ADVERTISE(be) \
(SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLUE_ADVERTISE)
-#define SLAP_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SHADOW)
+#define SLAP_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SHADOW_MASK)
#define SLAP_SYNC_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SHADOW)
#define SLAP_SLURP_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SLURP_SHADOW)
-#define SLAP_SINGLE_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SINGLE_SHADOW)
#define SLAP_MULTIPROVIDER(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_MULTI_SHADOW)
+#define SLAP_SINGLE_SHADOW(be) \
+ ( (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SINGLE_SHADOW_MASK) && \
+ !SLAP_MULTIPROVIDER(be) )
#define SLAP_DBCLEAN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_CLEAN)
#define SLAP_DBOPEN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_OPEN)
#define SLAP_DBACL_ADD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ACL_ADD)