#if defined(SLAPD_PERL) && !defined(SLAPD_PERL_DYNAMIC)
#include "back-perl/external.h"
#endif
+#if defined(SLAPD_RELAY) && !defined(SLAPD_RELAY_DYNAMIC)
+#include "back-relay/external.h"
+#endif
#if defined(SLAPD_SHELL) && !defined(SLAPD_SHELL_DYNAMIC)
#include "back-shell/external.h"
#endif
#if defined(SLAPD_PERL) && !defined(SLAPD_PERL_DYNAMIC)
{"perl", perl_back_initialize},
#endif
+#if defined(SLAPD_RELAY) && !defined(SLAPD_RELAY_DYNAMIC)
+ {"relay", relay_back_initialize},
+#endif
#if defined(SLAPD_SHELL) && !defined(SLAPD_SHELL_DYNAMIC)
{"shell", shell_back_initialize},
#endif
binfo[nBackendInfo].bi_type != NULL;
nBackendInfo++ )
{
+ assert( binfo[nBackendInfo].bi_init );
+
rc = binfo[nBackendInfo].bi_init( &binfo[nBackendInfo] );
if(rc != 0) {
{
int rc = 0;
+ if ( aBackendInfo->bi_init == NULL ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( BACKEND, ERR,
+ "backend_add: backend type \"%s\" does not have the "
+ "(mandatory)init function\n",
+ aBackendInfo->bi_type, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "backend_add: backend type \"%s\" does not have the "
+ "(mandatory)init function\n",
+ aBackendInfo->bi_type, 0, 0 );
+#endif
+ return -1;
+ }
+
if ((rc = aBackendInfo->bi_init(aBackendInfo)) != 0) {
#ifdef NEW_LOGGING
LDAP_LOG( BACKEND, ERR,
#ifdef NEW_LOGGING
LDAP_LOG( BACKEND, DETAIL1, "backend_startup: starting \"%s\"\n",
- be->be_suffix[0].bv_val, 0, 0 );
+ be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)",
+ 0, 0 );
#else
Debug( LDAP_DEBUG_TRACE,
"backend_startup: starting \"%s\"\n",
- be->be_suffix[0].bv_val, 0, 0 );
+ be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)",
+ 0, 0 );
#endif
if ( be->bd_info->bi_open ) {
LDAP_TAILQ_INIT( &backendDB[i].be_pending_csn_list );
+ if ( backendDB[i].be_suffix == NULL ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( BACKEND, CRIT,
+ "backend_startup: warning, database %d (%s) "
+ "has no suffix\n",
+ i, backendDB[i].bd_info->bi_type, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "backend_startup: warning, database %d (%s) "
+ "has no suffix\n",
+ i, backendDB[i].bd_info->bi_type, 0 );
+#endif
+ }
+
if ( backendDB[i].bd_info->bi_db_open ) {
rc = backendDB[i].bd_info->bi_db_open(
&backendDB[i] );
if ( !LDAP_STAILQ_EMPTY( &backendDB[i].be_syncinfo )) {
syncinfo_t *si;
+
+ if ( !( backendDB[i].be_search && backendDB[i].be_add &&
+ backendDB[i].be_modify && backendDB[i].be_delete )) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( BACKEND, CRIT,
+ "backend_startup: database(%d) does not support "
+ "operations required for syncrepl", i, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "backend_startup: database(%d) does not support "
+ "operations required for syncrepl", i, 0, 0 );
+#endif
+ continue;
+ }
+
LDAP_STAILQ_FOREACH( si, &backendDB[i].be_syncinfo, si_next ) {
si->si_be = &backendDB[i];
init_syncrepl( si );
}
if ( op->o_tag != LDAP_REQ_BIND && !op->o_do_not_cache ) {
- g = sl_malloc(sizeof(GroupAssertion) + gr_ndn->bv_len, op->o_tmpmemctx);
+ g = op->o_tmpalloc(sizeof(GroupAssertion) + gr_ndn->bv_len, op->o_tmpmemctx);
g->ga_be = op->o_bd;
g->ga_oc = group_oc;
g->ga_at = group_at;