/* init.c - initialize relay backend */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004 The OpenLDAP Foundation.
+ * Copyright 2004-2006 The OpenLDAP Foundation.
* Portions Copyright 2004 Pierangelo Masarati.
* All rights reserved.
*
#include "portable.h"
#include <stdio.h>
+#include <ac/string.h>
#include "slap.h"
#include "back-relay.h"
-#ifdef SLAPD_RELAY_DYNAMIC
-
-int
-init_module( int argc, char *argv[] ) {
- BackendInfo bi;
-
- memset( &bi, '\0', sizeof( bi ) );
- bi.bi_type = "relay";
- bi.bi_init = relay_back_initialize;
-
- backend_add(&bi);
- return 0;
-}
-
-#endif /* SLAPD_RELAY_DYNAMIC */
-
int
relay_back_initialize( BackendInfo *bi )
{
bi->bi_db_init = relay_back_db_init;
bi->bi_db_config = relay_back_db_config;
bi->bi_db_open = relay_back_db_open;
- bi->bi_db_close = 0 /* relay_back_db_close */ ;
+#if 0
+ bi->bi_db_close =relay_back_db_close;
+#endif
bi->bi_db_destroy = relay_back_db_destroy;
bi->bi_op_bind = relay_back_op_bind;
bi->bi_extended = relay_back_op_extended;
bi->bi_entry_release_rw = relay_back_entry_release_rw;
bi->bi_entry_get_rw = relay_back_entry_get_rw;
+#if 0 /* see comment in op.c */
bi->bi_chk_referrals = relay_back_chk_referrals;
+#endif
bi->bi_operational = relay_back_operational;
bi->bi_has_subordinates = relay_back_has_subordinates;
}
ri->ri_bd = NULL;
- ri->ri_realsuffix.bv_val = NULL;
- ri->ri_realsuffix.bv_len = 0;
+ BER_BVZERO( &ri->ri_realsuffix );
ri->ri_massage = 0;
be->be_private = (void *)ri;
assert( ri != NULL );
- if ( ri->ri_realsuffix.bv_val != NULL ) {
+ if ( !BER_BVISNULL( &ri->ri_realsuffix ) ) {
ri->ri_bd = select_backend( &ri->ri_realsuffix, 0, 1 );
+
/* must be there: it was during config! */
- assert( ri->ri_bd );
+ assert( ri->ri_bd != NULL );
+
+ /* inherit controls */
+ AC_MEMCPY( be->be_ctrls, ri->ri_bd->be_ctrls, sizeof( be->be_ctrls ) );
+
+ } else {
+ /* inherit all? */
+ AC_MEMCPY( be->be_ctrls, frontendDB->be_ctrls, sizeof( be->be_ctrls ) );
}
return 0;
relay_back_info *ri = (relay_back_info *)be->be_private;
if ( ri ) {
- if ( ri->ri_realsuffix.bv_val ) {
+ if ( !BER_BVISNULL( &ri->ri_realsuffix ) ) {
ch_free( ri->ri_realsuffix.bv_val );
}
ch_free( ri );
return 0;
}
+#if SLAPD_RELAY == SLAPD_MOD_DYNAMIC
+
+/* conditionally define the init_module() function */
+SLAP_BACKEND_INIT_MODULE( relay )
+
+#endif /* SLAPD_RELAY == SLAPD_MOD_DYNAMIC */
+