ldap_pvt_thread_cond_t li_dbcache_cv;
};
+struct ldbm_backend_info {
+ char *lbi_directory;
+};
+
LDAP_END_DECL
#include "proto-back-ldbm.h"
#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,
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 ));
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;
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;
}
{
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;
}