]> git.sur5r.net Git - openldap/commitdiff
ITS#2371, fix BDB_SUBDIRs
authorHoward Chu <hyc@openldap.org>
Thu, 13 Mar 2003 15:53:19 +0000 (15:53 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 13 Mar 2003 15:53:19 +0000 (15:53 +0000)
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/init.c

index 449d0f6d7339be00c4ffe52f27d155ff9349147c..f3df2ae08260b3dbd32ffc0f861d77072877f766 100644 (file)
@@ -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"
index db9d00f914dfee8307b1504ae1943e8604550058..7d6dae13f02988c420ab3b3c08d0cb7192dd8132 100644 (file)
@@ -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