1 /* startup.c - startup ldbm backend */
4 * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
5 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
13 #include <ac/string.h>
14 #include <ac/socket.h>
17 #include "back-ldbm.h"
25 #ifdef HAVE_BERKELEY_DB2
28 ldbm_db_errcall( const char *prefix, const char *message )
30 Debug( LDAP_DEBUG_ANY, "ldbm_db_errcall(): %s %s", prefix, message, 0 );
33 #endif /* HAVE_BERKELEY_DB2 */
41 #ifndef HAVE_BERKELEY_DB2
42 /* make sure we have one and only one big mutex */
43 static int protect = 0;
46 ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
50 struct ldbminfo *li = (struct ldbminfo *) be->be_private;
51 DB_ENV *dbEnv = &li->li_db_env;
52 u_int32_t envFlags = DB_CREATE
53 #ifdef HAVE_BERKELEY_DB2_DB_THREAD
60 /* if the data directory is not an absolute path, have it relative
61 to the current working directory (which should not be configured !) */
62 if ( *li->li_directory != *LDAP_DIRSEP ) {
65 (void) getcwd( cwd, MAXPATHLEN );
66 sprintf( cwd, "%s" LDAP_DIRSEP "%s", cwd, li->li_directory );
67 free( li->li_directory );
68 li->li_directory = strdup( cwd );
72 /* set the DB home directory to the data dir */
73 home = li->li_directory;
75 /* general initialization of the environment */
76 memset( dbEnv, 0, sizeof( DB_ENV ));
77 dbEnv->db_errcall = ldbm_db_errcall;
78 dbEnv->db_errpfx = "==>";
80 /* now do the db_appinit */
81 if ( ( err = db_appinit( home, NULL, dbEnv, envFlags )) ) {
84 if ( err < 0 ) sprintf( error, "%ld\n", (long) err );
85 else sprintf( error, "%s\n", strerror( err ));
88 "ldbm_back_startup(): FATAL error in db_appinit() : %s\n",
102 #ifdef HAVE_BERKELEY_DB2
103 struct ldbminfo *li = (struct ldbminfo *) be->be_private;
105 (void) db_appexit( &li->li_db_env );