X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fconfig.c;h=527f3c4c43874ae1425a8a00e692f0901cb7b538;hb=4d36fd5a3ed407b0a53004d1431f1669222138b4;hp=dab1dec4325b2e285f34dc37c21939536e6c5bae;hpb=7e6ad5100c2702b1d56a285bdfb341ddf38c0d76;p=openldap diff --git a/servers/slapd/back-ldbm/config.c b/servers/slapd/back-ldbm/config.c index dab1dec432..527f3c4c43 100644 --- a/servers/slapd/back-ldbm/config.c +++ b/servers/slapd/back-ldbm/config.c @@ -1,4 +1,9 @@ /* config.c - ldbm backend configuration file routine */ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ #include "portable.h" @@ -10,21 +15,22 @@ #include "slap.h" #include "back-ldbm.h" -void -ldbm_back_config( +int +ldbm_back_db_config( Backend *be, - char *fname, + const char *fname, int lineno, int argc, char **argv ) { + int rc; struct ldbminfo *li = (struct ldbminfo *) be->be_private; if ( li == NULL ) { - fprintf( stderr, "%s: line %d: ldbm backend info is null!\n", + fprintf( stderr, "%s: line %d: ldbm database info is null!\n", fname, lineno ); - exit( 1 ); + return( 1 ); } /* directory where database files live */ @@ -33,9 +39,11 @@ ldbm_back_config( fprintf( stderr, "%s: line %d: missing dir in \"directory \" line\n", fname, lineno ); - exit( 1 ); + return( 1 ); } - li->li_directory = strdup( argv[1] ); + if ( li->li_directory ) + free( li->li_directory ); + li->li_directory = ch_strdup( argv[1] ); /* mode with which to create new database files */ } else if ( strcasecmp( argv[0], "mode" ) == 0 ) { @@ -43,7 +51,7 @@ ldbm_back_config( fprintf( stderr, "%s: line %d: missing mode in \"mode \" line\n", fname, lineno ); - exit( 1 ); + return( 1 ); } li->li_mode = strtol( argv[1], NULL, 0 ); @@ -53,13 +61,15 @@ ldbm_back_config( fprintf( stderr, "%s: line %d: missing attr in \"index [pres,eq,approx,sub]\" line\n", fname, lineno ); - exit( 1 ); + return( 1 ); } else if ( argc > 3 ) { fprintf( stderr, "%s: line %d: extra junk after \"index [pres,eq,approx,sub]\" line (ignored)\n", fname, lineno ); } - attr_index_config( li, fname, lineno, argc - 1, &argv[1], 0 ); + rc = attr_index_config( li, fname, lineno, argc - 1, &argv[1] ); + + if( rc != LDAP_SUCCESS ) return 1; /* size of the cache in entries */ } else if ( strcasecmp( argv[0], "cachesize" ) == 0 ) { @@ -67,7 +77,7 @@ ldbm_back_config( fprintf( stderr, "%s: line %d: missing size in \"cachesize \" line\n", fname, lineno ); - exit( 1 ); + return( 1 ); } li->li_cache.c_maxsize = atoi( argv[1] ); @@ -77,13 +87,106 @@ ldbm_back_config( fprintf( stderr, "%s: line %d: missing size in \"dbcachesize \" line\n", fname, lineno ); - exit( 1 ); + return( 1 ); } li->li_dbcachesize = atoi( argv[1] ); - /* no write sync */ - } else if ( strcasecmp( argv[0], "dbcachenowsync" ) == 0 ) { - li->li_dbcachewsync = 0; + /* no locking (not safe) */ + } else if ( strcasecmp( argv[0], "dbnolocking" ) == 0 ) { + li->li_dblocking = 0; + + /* no write sync (not safe) */ + } else if ( ( strcasecmp( argv[0], "dbnosync" ) == 0 ) + || ( strcasecmp( argv[0], "dbcachenowsync" ) == 0 ) ) + { + li->li_dbwritesync = 0; + + /* run sync thread */ + } else if ( strcasecmp( argv[0], "dbsync" ) == 0 ) { +#ifndef NO_THREADS + int i; + if ( argc < 2 ) { +#ifdef NEW_LOGGING + LDAP_LOG ( CONFIG, ERR, "ldbm_back_db_config: %s: " + "line %d: missing frequency value in \"dbsync " + "[ [wait-interval]]\" line\n", fname, lineno, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "%s: line %d: missing frquency value in \"dbsync [ [wait-interval]]\" line\n", + fname, lineno, 0 ); +#endif + return 1; + } + + i = atoi( argv[1] ); + + if( i < 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG ( CONFIG, ERR, + "ldbm_back_db_config: %s: " + "line %d: frequency value (%d) invalid \"dbsync " + " [ [wait-interval]]\" line\n", + fname, lineno, i ); +#else + Debug( LDAP_DEBUG_ANY, + "%s: line %d: frquency value (%d) invalid \"dbsync [ [wait-interval]]\" line\n", + fname, lineno, i ); +#endif + return 1; + } + + li->li_dbsyncfreq = i; + + if ( argc > 2 ) { + i = atoi( argv[2] ); + if ( i < 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG ( CONFIG,ERR, "ldbm_back_db_config: %s: " + "line %d: frequency value (%d) invalid \"dbsync " + " [ [wait-interval]]\" line\n", + fname, lineno, i ); +#else + Debug( LDAP_DEBUG_ANY, + "%s: line %d: frquency value (%d) invalid \"dbsync [ [wait-interval]]\" line\n", + fname, lineno, i ); +#endif + return 1; + } + li ->li_dbsyncwaitn = i; + } + + if ( argc > 3 ) { + i = atoi( argv[3] ); + if ( i <= 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG ( CONFIG,ERR, "ldbm_back_db_config: %s: " + "line %d: frequency value (%d) invalid \"dbsync " + " [ [wait-interval]]\" line\n", + fname, lineno, i ); +#else + Debug( LDAP_DEBUG_ANY, + "%s: line %d: frquency value (%d) invalid \"dbsync [ [wait-interval]]\" line\n", + fname, lineno, i ); +#endif + return 1; + } + li ->li_dbsyncwaitinterval = i; + } + + /* turn off writesync when sync policy is in place */ + li->li_dbwritesync = 0; + +#else +#ifdef NEW_LOGGING + LDAP_LOG ( CONFIG, ERR, "ldbm_back_db_config: \"dbsync\"" + " policies not supported in non-threaded environments\n", 0, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "\"dbsync\" policies not supported in non-threaded environments\n", 0, 0, 0); +#endif + return 1; +#endif + /* anything else */ } else { @@ -91,4 +194,6 @@ ldbm_back_config( "%s: line %d: unknown directive \"%s\" in ldbm database definition (ignored)\n", fname, lineno, argv[0] ); } + + return 0; }