]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-relay/init.c
Cleanup db_lock/unlock parameters
[openldap] / servers / slapd / back-relay / init.c
index d36327578098b29eee83ee9ca971ef7e14269c4c..4a83e2f63ecccbfeb79ce7a9e8e191a3b77f09a9 100644 (file)
@@ -1,7 +1,7 @@
 /* init.c - initialize relay backend */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2003-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 <ac/socket.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 )
 {
@@ -56,7 +38,9 @@ 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;
@@ -72,7 +56,9 @@ relay_back_initialize( BackendInfo *bi )
        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;
 
@@ -87,12 +73,16 @@ relay_back_db_init( Backend *be )
 {
        relay_back_info         *ri;
 
+       be->be_private = NULL;
+
        ri = (relay_back_info *)ch_calloc( 1, sizeof( relay_back_info ) );
        if ( ri == NULL ) {
                return -1;
        }
 
        ri->ri_bd = NULL;
+       BER_BVZERO( &ri->ri_realsuffix );
+       ri->ri_massage = 0;
 
        be->be_private = (void *)ri;
 
@@ -106,22 +96,19 @@ relay_back_db_open( Backend *be )
 
        assert( ri != NULL );
 
-#if 0
-       be->bd_info = ri->ri_bd->bd_info;
+       if ( !BER_BVISNULL( &ri->ri_realsuffix ) ) {
+               ri->ri_bd = select_backend( &ri->ri_realsuffix, 0, 1 );
 
-       if ( !ri->ri_do_not_massage ) {
-               char    *argv[ 4 ];
+               /* must be there: it was during config! */
+               assert( ri->ri_bd != NULL );
 
-               argv[ 0 ] = "suffixmassage";
-               argv[ 1 ] = be->be_suffix[0].bv_val;
-               argv[ 2 ] = ri->ri_bd->be_suffix[0].bv_val;
-               argv[ 3 ] = NULL;
+               /* inherit controls */
+               AC_MEMCPY( be->be_ctrls, ri->ri_bd->be_ctrls, sizeof( be->be_ctrls ) );
 
-               if ( be->be_config( be, "back-relay", 1, 3, argv ) ) {
-                       return 1;
-               }
+       } else {
+               /* inherit all? */
+               AC_MEMCPY( be->be_ctrls, frontendDB->be_ctrls, sizeof( be->be_ctrls ) );
        }
-#endif
 
        return 0;
 }
@@ -138,8 +125,19 @@ relay_back_db_destroy( Backend *be )
        relay_back_info         *ri = (relay_back_info *)be->be_private;
 
        if ( ri ) {
+               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 */
+