]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-shell/init.c
Cleanup up LDAP_CLIENT_UPDATE code... including some bug fixing.
[openldap] / servers / slapd / back-shell / init.c
index 7b69e139f12f3393bdfb50a36e911920d610facc..03ab2d18011c49b48b908b2d9c3e6fcaceae87a7 100644 (file)
@@ -1,24 +1,31 @@
 /* init.c - initialize shell backend */
+/* $OpenLDAP$ */
+/*
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 
 #include "portable.h"
 
 #include <stdio.h>
 
 #include <ac/socket.h>
+#include <ac/unistd.h>
 
 #include "slap.h"
 #include "shell.h"
 
 #ifdef SLAPD_SHELL_DYNAMIC
-#include <gmodule.h>
 
-G_MODULE_EXPORT void init_module(int argc, char *argv[]) {
-   BackendInfo bi;
+int back_shell_LTX_init_module(int argc, char *argv[]) {
+    BackendInfo bi;
 
-   bi.bi_type = "shell";
-   bi.bi_init = shell_back_initialize;
+    memset( &bi, '\0', sizeof(bi) );
+    bi.bi_type = "shell";
+    bi.bi_init = shell_back_initialize;
 
-   backend_add(&bi);
+    backend_add(&bi);
+    return 0;
 }
 
 #endif /* SLAPD_SHELL_DYNAMIC */
@@ -31,7 +38,7 @@ shell_back_initialize(
        bi->bi_open = 0;
        bi->bi_config = 0;
        bi->bi_close = 0;
-       bi->bi_destroy = 0;
+       bi->bi_destroy = shell_back_destroy;
 
        bi->bi_db_init = shell_back_db_init;
        bi->bi_db_config = shell_back_db_config;
@@ -49,13 +56,41 @@ shell_back_initialize(
        bi->bi_op_delete = shell_back_delete;
        bi->bi_op_abandon = shell_back_abandon;
 
-#ifdef SLAPD_ACLGROUPS
+       bi->bi_extended = 0;
+
        bi->bi_acl_group = 0;
-#endif
+       bi->bi_acl_attribute = 0;
+       bi->bi_chk_referrals = 0;
 
        bi->bi_connection_init = 0;
        bi->bi_connection_destroy = 0;
 
+#ifdef SHELL_SURROGATE_PARENT
+       ldap_pvt_thread_mutex_init( &shell_surrogate_index_mutex );
+       ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[0] );
+       ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[1] );
+#endif
+
+       return 0;
+}
+
+int
+shell_back_destroy(
+       BackendInfo *bi
+)
+{
+#ifdef SHELL_SURROGATE_PARENT
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_index_mutex );
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[0] );
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[1] );
+       if ( shell_surrogate_fd[0] >= 0 ) {
+               close( shell_surrogate_fd[0] );
+               close( shell_surrogate_fd[1] );
+       }
+       if ( shell_surrogate_pid >= 0 )
+               kill( shell_surrogate_pid, SIGTERM );
+#endif
+
        return 0;
 }
 
@@ -66,6 +101,11 @@ shell_back_db_init(
 {
        struct shellinfo        *si;
 
+#ifdef SHELL_SURROGATE_PARENT
+       if ( shell_surrogate_fd[0] < 0 )
+               make_surrogate_parent();
+#endif
+
        si = (struct shellinfo *) ch_calloc( 1, sizeof(struct shellinfo) );
 
        be->be_private = si;