X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fconfig.c;h=527f3c4c43874ae1425a8a00e692f0901cb7b538;hb=9fc4a749dcecda7176cea4859fa8f51bbc91feff;hp=44a38c7bac628801cfc177ff3ab74cb0a2986d8f;hpb=42f6e78dd4e2d481c1bc75b8bc6d38fe9c62bc07;p=openldap diff --git a/servers/slapd/back-ldbm/config.c b/servers/slapd/back-ldbm/config.c index 44a38c7bac..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" @@ -13,12 +18,13 @@ 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 ) { @@ -35,14 +41,10 @@ ldbm_back_db_config( fname, lineno ); return( 1 ); } + if ( li->li_directory ) + free( li->li_directory ); li->li_directory = ch_strdup( argv[1] ); - li->li_nextid_file = - ch_malloc( strlen(li->li_directory) + sizeof("/NEXTID") + 1 ); - - strcpy(li->li_nextid_file, li->li_directory); - strcat(li->li_nextid_file, "/NEXTID"); - /* mode with which to create new database files */ } else if ( strcasecmp( argv[0], "mode" ) == 0 ) { if ( argc < 2 ) { @@ -65,7 +67,9 @@ ldbm_back_db_config( "%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 ) { @@ -87,9 +91,102 @@ ldbm_back_db_config( } 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 {