From: Howard Chu Date: Thu, 13 Mar 2003 15:53:19 +0000 (+0000) Subject: ITS#2371, fix BDB_SUBDIRs X-Git-Tag: NO_SLAP_OP_BLOCKS~117 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=44be38c0f0920df76d25374f61139410538cb048;p=openldap ITS#2371, fix BDB_SUBDIRs --- diff --git a/servers/slapd/back-bdb/back-bdb.h b/servers/slapd/back-bdb/back-bdb.h index 449d0f6d73..f3df2ae082 100644 --- a/servers/slapd/back-bdb/back-bdb.h +++ b/servers/slapd/back-bdb/back-bdb.h @@ -31,9 +31,9 @@ LDAP_BEGIN_DECL #define BDB_MAX_ADD_LOOP 30 #ifdef BDB_SUBDIRS -#define BDB_TMP_SUBDIR LDAP_DIRSEP "tmp" -#define BDB_LG_SUBDIR LDAP_DIRSEP "log" -#define BDB_DATA_SUBDIR LDAP_DIRSEP "data" +#define BDB_TMP_SUBDIR "tmp" +#define BDB_LG_SUBDIR "log" +#define BDB_DATA_SUBDIR "data" #endif #define BDB_SUFFIX ".bdb" diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index db9d00f914..7d6dae13f0 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -208,12 +208,27 @@ bdb_db_open( BackendDB *be ) #ifdef BDB_SUBDIRS { - char dir[MAXPATHLEN]; - size_t len = strlen( bdb->bi_dbenv_home ); - - strcpy( dir, bdb->bi_dbenv_home ); - strcat( &dir[len], BDB_TMP_SUBDIR ); + char dir[MAXPATHLEN], *ptr; + if (bdb->bi_dbenv_home[0] == '.') { + /* If home is a relative path, relative subdirs + * are just concat'd by BDB. We don't want the + * path to be concat'd twice, e.g. + * ./test-db/./test-db/tmp + */ + ptr = dir; + } else { + ptr = lutil_strcopy( dir, bdb->bi_dbenv_home ); + *ptr++ = LDAP_DIRSEP[0]; +#ifdef HAVE_EBCDIC + __atoe( dir ); +#endif + } + + strcpy( ptr, BDB_TMP_SUBDIR ); +#ifdef HAVE_EBCDIC + __atoe( ptr ); +#endif rc = bdb->bi_dbenv->set_tmp_dir( bdb->bi_dbenv, dir ); if( rc != 0 ) { #ifdef NEW_LOGGING @@ -228,8 +243,10 @@ bdb_db_open( BackendDB *be ) return rc; } - strcat( &dir[len], BDB_LG_SUBDIR ); - + strcpy( ptr, BDB_LG_SUBDIR ); +#ifdef HAVE_EBCDIC + __atoe( ptr ); +#endif rc = bdb->bi_dbenv->set_lg_dir( bdb->bi_dbenv, dir ); if( rc != 0 ) { #ifdef NEW_LOGGING @@ -244,8 +261,10 @@ bdb_db_open( BackendDB *be ) return rc; } - strcat( &dir[len], BDB_DATA_SUBDIR ); - + strcpy( ptr, BDB_DATA_SUBDIR ); +#ifdef HAVE_EBCDIC + __atoe( ptr ); +#endif rc = bdb->bi_dbenv->set_data_dir( bdb->bi_dbenv, dir ); if( rc != 0 ) { #ifdef NEW_LOGGING