]> git.sur5r.net Git - openldap/blob - servers/slapd/back-ldbm/startup.c
Removed unnecessary definition that is already in core.schema.
[openldap] / servers / slapd / back-ldbm / startup.c
1 /* startup.c - startup ldbm backend */
2
3 #include "portable.h"
4
5 #include <stdio.h>
6 #include <direct.h>
7
8 #include <ac/string.h>
9 #include <ac/socket.h>
10
11 #include "ldapconfig.h"
12 #include "slap.h"
13 #include "back-ldbm.h"
14
15 #ifdef HAVE_DB1_DB_H
16 #       include <db1/db.h>
17 #else
18 #       include <db.h>
19 #endif
20
21 #ifdef HAVE_BERKELEY_DB2
22
23 void
24 ldbm_db_errcall( const char *prefix, const char *message )
25 {
26         Debug( LDAP_DEBUG_ANY, "ldbm_db_errcall(): %s %s", prefix, message, 0 );
27 }
28
29 #endif  /*  HAVE_BERKELEY_DB2  */
30
31
32 void
33 ldbm_back_startup(
34     Backend     *be
35 )
36 {
37 #ifndef HAVE_BERKELEY_DB2
38         /* make sure we have one and only one big mutex */
39         static int protect = 0;
40
41         if(!protect++) {
42                 ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
43         }
44
45 #else
46         struct ldbminfo  *li = (struct ldbminfo *) be->be_private;
47         DB_ENV           *dbEnv = &li->li_db_env;
48         int    envFlags = DB_CREATE | DB_THREAD;
49         int    err      = 0;
50         char   *home;
51
52         /*  if the data directory is not an absolute path, have it relative
53         to the current working directory (which should not be configured !)  */
54         if ( *li->li_directory != *DIRSEP ) {
55                 char   cwd[MAXPATHLEN];
56
57                 (void) getcwd( cwd, MAXPATHLEN );
58                 sprintf( cwd, "%s%s%s", cwd, DIRSEP, li->li_directory );
59                 free( li->li_directory );
60                 li->li_directory = strdup( cwd );
61
62         }
63
64         /*  set the DB home directory to the data dir  */
65         home = li->li_directory;
66
67         /*  general initialization of the environment  */
68         memset( dbEnv, 0, sizeof( DB_ENV ));
69         dbEnv->db_errcall = ldbm_db_errcall;
70         dbEnv->db_errpfx  = "==>";
71
72         /*  now do the db_appinit  */
73         if ( ( err = db_appinit( home, NULL, dbEnv, envFlags )) ) {
74                 char  error[BUFSIZ];
75
76                 if ( err < 0 ) sprintf( error, "%ld\n", (long) err );
77                 else           sprintf( error, "%s\n", strerror( err ));
78
79                 fprintf( stderr,
80                                 "ldbm_back_startup(): FATAL error in db_appinit() : %s\n",
81                                 error );
82                 exit( 1 );
83
84         }
85 #endif
86 }
87
88
89 void
90 ldbm_back_shutdown(
91     Backend     *be
92 )
93 {
94 #ifdef HAVE_BERKELEY_DB2
95         struct ldbminfo  *li = (struct ldbminfo *) be->be_private;
96
97         (void) db_appexit( &li->li_db_env );
98 #endif
99 }