From c0de06865abe58c1d8e5b7e74bbebc5898d9d33d Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga <kurt@openldap.org> Date: Mon, 4 Jun 2001 19:08:38 +0000 Subject: [PATCH] Add "directory" directive to backend configuration to set DB_ENV directory --- servers/slapd/back-ldbm/back-ldbm.h | 4 +++ servers/slapd/back-ldbm/config.c | 42 +++++++++++++++++++++++++++++ servers/slapd/back-ldbm/external.h | 3 +++ servers/slapd/back-ldbm/init.c | 16 ++++++++--- 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/servers/slapd/back-ldbm/back-ldbm.h b/servers/slapd/back-ldbm/back-ldbm.h index b1b374b1a7..04ef6c4637 100644 --- a/servers/slapd/back-ldbm/back-ldbm.h +++ b/servers/slapd/back-ldbm/back-ldbm.h @@ -119,6 +119,10 @@ struct ldbminfo { ldap_pvt_thread_cond_t li_dbcache_cv; }; +struct ldbm_backend_info { + char *lbi_directory; +}; + LDAP_END_DECL #include "proto-back-ldbm.h" diff --git a/servers/slapd/back-ldbm/config.c b/servers/slapd/back-ldbm/config.c index a6c3e15a5b..60c6f4609d 100644 --- a/servers/slapd/back-ldbm/config.c +++ b/servers/slapd/back-ldbm/config.c @@ -16,6 +16,48 @@ #include "back-ldbm.h" +int +ldbm_back_config( + BackendInfo *bi, + const char *fname, + int lineno, + int argc, + char **argv +) +{ + int rc; + struct ldbm_backend_info *lbi = + (struct ldbm_backend_info *) bi->bi_private; + + if ( lbi == NULL ) { + fprintf( stderr, "%s: line %d: ldbm backend info is null!\n", + fname, lineno ); + return 1; + } + + /* directory where database files live */ + if ( strcasecmp( argv[0], "directory" ) == 0 ) { + if ( argc < 2 ) { + fprintf( stderr, + "%s: line %d: missing dir in \"directory <dir>\" line\n", + fname, lineno ); + return( 1 ); + } + if ( lbi->lbi_directory ) { + free( lbi->lbi_directory ); + } + lbi->lbi_directory = ch_strdup( argv[1] ); + + /* anything else */ + } else { + fprintf( stderr, +"%s: line %d: unknown directive \"%s\" in ldbm backend definition (ignored)\n", + fname, lineno, argv[0] ); + } + + return 0; +} + int ldbm_back_db_config( Backend *be, diff --git a/servers/slapd/back-ldbm/external.h b/servers/slapd/back-ldbm/external.h index 2bdac2f069..7bb6ec4a60 100644 --- a/servers/slapd/back-ldbm/external.h +++ b/servers/slapd/back-ldbm/external.h @@ -13,6 +13,9 @@ extern int ldbm_back_initialize LDAP_P(( BackendInfo *bi )); extern int ldbm_back_open LDAP_P(( BackendInfo *bi )); extern int ldbm_back_close LDAP_P(( BackendInfo *bi )); extern int ldbm_back_destroy LDAP_P(( BackendInfo *bi )); +extern int ldbm_back_config LDAP_P(( BackendInfo *bi, + const char *fname, int lineno, + int argc, char **argv )); extern int ldbm_back_db_init LDAP_P(( BackendDB *bd )); extern int ldbm_back_db_open LDAP_P(( BackendDB *bd )); diff --git a/servers/slapd/back-ldbm/init.c b/servers/slapd/back-ldbm/init.c index e856743e11..10a849a7e3 100644 --- a/servers/slapd/back-ldbm/init.c +++ b/servers/slapd/back-ldbm/init.c @@ -43,7 +43,7 @@ ldbm_back_initialize( bi->bi_controls = controls; bi->bi_open = ldbm_back_open; - bi->bi_config = 0; + bi->bi_config = ldbm_back_config; bi->bi_close = ldbm_back_close; bi->bi_destroy = ldbm_back_destroy; @@ -85,6 +85,14 @@ ldbm_back_initialize( bi->bi_connection_init = 0; bi->bi_connection_destroy = 0; + { + struct ldbm_backend_info *lbi = malloc( + sizeof( struct ldbm_backend_info ) ); + + bi->bi_private = lbi; + lbi->lbi_directory = NULL; + } + return 0; } @@ -103,9 +111,11 @@ ldbm_back_open( { int rc; - /* initialize the underlying database system */ - rc = ldbm_initialize( NULL ); + struct ldbm_backend_info *lbi + = (struct ldbm_backend_info *) bi->bi_private; + /* initialize the underlying database system */ + rc = ldbm_initialize( lbi->lbi_directory ); return rc; } -- GitLab