]> git.sur5r.net Git - openldap/commitdiff
Added startup/shutdown routine for slapd back-ends.
authorKurt Spanier <ksp@openldap.org>
Tue, 2 Feb 1999 08:03:03 +0000 (08:03 +0000)
committerKurt Spanier <ksp@openldap.org>
Tue, 2 Feb 1999 08:03:03 +0000 (08:03 +0000)
servers/slapd/back-ldbm/startup.c [new file with mode: 0644]

diff --git a/servers/slapd/back-ldbm/startup.c b/servers/slapd/back-ldbm/startup.c
new file mode 100644 (file)
index 0000000..41e41dd
--- /dev/null
@@ -0,0 +1,98 @@
+/* startup.c - startup ldbm backend */
+
+#include "portable.h"
+
+#include <stdio.h>
+
+#include <ac/string.h>
+#include <ac/socket.h>
+
+#include "ldapconfig.h"
+#include "slap.h"
+#include "back-ldbm.h"
+
+#include "db.h"
+
+
+void
+ldbm_back_startup(
+    Backend    *be
+)
+{
+#ifndef HAVE_BERKELEY_DB2
+
+               ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
+
+#else
+
+       struct ldbminfo  *li = (struct ldbminfo *) be->be_private;
+       DB_ENV           *dbEnv = &li->li_db_env;
+       int    envFlags = DB_CREATE | DB_THREAD;
+       int    err      = 0;
+       char   *home;
+
+       /*  if the data directory is not an absolute path, have it relative
+        to the current working directory (which should not be configured !)  */
+       if ( *li->li_directory != *DEFAULT_DIRSEP ) {
+               char   cwd[MAXPATHLEN];
+
+               (void) getcwd( cwd, MAXPATHLEN );
+               sprintf( cwd, "%s%s%s", cwd, DEFAULT_DIRSEP, li->li_directory );
+               free( li->li_directory );
+               li->li_directory = strdup( cwd );
+
+       }
+
+       /*  set the DB home directory to the data dir  */
+       home = li->li_directory;
+
+       /*  general initialization of the environment  */
+       memset( dbEnv, 0, sizeof( DB_ENV ));
+       dbEnv->db_errcall = ldbm_db_errcall;
+       dbEnv->db_errpfx  = "==>";
+
+
+       /*  now do the db_appinit  */
+       if ( ( err = db_appinit( home, NULL, dbEnv, envFlags )) ) {
+               char  error[BUFSIZ];
+
+               if ( err < 0 ) sprintf( error, "%ld\n", (long) err );
+               else           sprintf( error, "%s\n", strerror( err ));
+
+               fprintf( stderr,
+                               "ldbm_back_startup(): FATAL error in db_appinit() : %s\n",
+                               error );
+               exit( 1 );
+
+       }
+
+#endif
+}
+
+
+void
+ldbm_back_shutdown(
+    Backend    *be
+)
+{
+#ifdef HAVE_BERKELEY_DB2
+
+       struct ldbminfo  *li = (struct ldbminfo *) be->be_private;
+
+       (void) db_appexit( &li->li_db_env );
+
+#endif
+}
+
+
+#ifdef HAVE_BERKELEY_DB2
+
+void
+ldbm_db_errcall( char *prefix, char *message )
+{
+       Debug( LDAP_DEBUG_ANY, "ldbm_db_errcall(): %s %s", prefix, message, 0 );
+}
+
+
+#endif  /*  HAVE_BERKELEY_DB2  */
+