#include <stdio.h>
#include <ac/ctype.h>
#include <ac/string.h>
+#include <ac/errno.h>
#include "back-bdb.h"
/* If this fails, we need to restart */
if ( rc ) {
slapd_shutdown = 2;
+ snprintf( c->cr_msg, sizeof( c->cr_msg ),
+ "failed to reopen database, rc=%d", rc );
Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(bdb_cf_cleanup)
- ": failed to reopen database, rc=%d", rc, 0, 0 );
+ ": %s\n", c->cr_msg, 0, 0 );
+ rc = LDAP_OTHER;
}
}
return rc;
case BDB_DIRECTORY: {
FILE *f;
- char *ptr;
+ char *ptr, *testpath;
+ int len;
+
+ len = strlen( c->value_string );
+ testpath = ch_malloc( len + STRLENOF(LDAP_DIRSEP) + STRLENOF("DUMMY") + 1 );
+ ptr = lutil_strcopy( testpath, c->value_string );
+ *ptr++ = LDAP_DIRSEP[0];
+ strcpy( ptr, "DUMMY" );
+ f = fopen( testpath, "w" );
+ if ( f ) {
+ fclose( f );
+ unlink( testpath );
+ }
+ ch_free( testpath );
+ if ( !f ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: invalid path: %s",
+ c->log, strerror( errno ));
+ Debug( LDAP_DEBUG_ANY, "%s\n", c->cr_msg, 0, 0 );
+ return -1;
+ }
if ( bdb->bi_dbenv_home )
ch_free( bdb->bi_dbenv_home );
/* See if a DB_CONFIG file already exists here */
if ( bdb->bi_db_config_path )
ch_free( bdb->bi_db_config_path );
- bdb->bi_db_config_path = ch_malloc( strlen( bdb->bi_dbenv_home ) +
+ bdb->bi_db_config_path = ch_malloc( len +
STRLENOF(LDAP_DIRSEP) + STRLENOF("DB_CONFIG") + 1 );
ptr = lutil_strcopy( bdb->bi_db_config_path, bdb->bi_dbenv_home );
*ptr++ = LDAP_DIRSEP[0];
static CfBackInfo cfBackInfo;
static char *passwd_salt;
+static FILE *logfile;
static char *logfileName;
#ifdef SLAP_AUTH_REWRITE
static BerVarray authz_rewrites;
case CFG_LOGFILE:
ch_free( logfileName );
logfileName = NULL;
+ if ( logfile ) {
+ fclose( logfile );
+ logfile = NULL;
+ }
break;
case CFG_SERVERID: {
}
break;
case CFG_LOGFILE: {
- FILE *logfile;
if ( logfileName ) ch_free( logfileName );
logfileName = c->value_string;
logfile = fopen(logfileName, "w");
out:
/* Undo for a failed operation */
if ( rc != LDAP_SUCCESS ) {
+ ConfigReply msg = ca->reply;
for ( s = save_attrs; s; s = s->a_next ) {
if ( s->a_flags & SLAP_ATTR_IXDEL ) {
s->a_flags &= ~(SLAP_ATTR_IXDEL|SLAP_ATTR_IXADD);
}
}
}
+ ca->reply = msg;
}
if ( ca->cleanup )
slap_mods_opattrs( op, &op->orm_modlist, 1 );
- if ( !slapd_shutdown )
- ldap_pvt_thread_pool_pause( &connection_pool );
+ ldap_pvt_thread_pool_pause( &connection_pool );
/* Strategy:
* 1) perform the Modify on the cached Entry.
op->o_ndn = ndn;
}
- if ( !slapd_shutdown )
- ldap_pvt_thread_pool_resume( &connection_pool );
+ ldap_pvt_thread_pool_resume( &connection_pool );
out:
send_ldap_result( op, rs );
slap_graduate_commit_csn( op );