diff --git a/servers/slapd/back-bdb/dbcache.c b/servers/slapd/back-bdb/dbcache.c index 8ee06503e5f1c9b1dece8c593240dcfa0ce96def..2110554fac0f59461ca97dcd28927e4276d0e68c 100644 --- a/servers/slapd/back-bdb/dbcache.c +++ b/servers/slapd/back-bdb/dbcache.c @@ -109,6 +109,9 @@ bdb_db_cache( file = ch_malloc( strlen( name ) + sizeof(BDB_SUFFIX) ); sprintf( file, "%s" BDB_SUFFIX, name ); +#ifdef HAVE_EBCDIC + __atoe( file ); +#endif rc = DB_OPEN( db->bdi_db, file, name, DB_HASH, bdb->bi_db_opflags | DB_CREATE | DB_THREAD, diff --git a/servers/slapd/back-bdb/error.c b/servers/slapd/back-bdb/error.c index c34b277df1316bdf3b19da4d4c4d09016fbfda2c..79d528a0e0272b53aaab46b5902defd5a097718a 100644 --- a/servers/slapd/back-bdb/error.c +++ b/servers/slapd/back-bdb/error.c @@ -15,9 +15,28 @@ void bdb_errcall( const char *pfx, char * msg ) { +#ifdef HAVE_EBCDIC + if ( msg[0] > 0x7f ) + __etoa( msg ); +#endif #ifdef NEW_LOGGING LDAP_LOG ( OPERATION, INFO, "bdb(%s): %s\n", pfx, msg, 0 ); #else Debug( LDAP_DEBUG_ANY, "bdb(%s): %s\n", pfx, msg, 0 ); #endif } + +#ifdef HAVE_EBCDIC + +#undef db_strerror + +/* Not re-entrant! */ +char *ebcdic_dberror( int rc ) +{ + static char msg[1024]; + + strcpy( msg, db_strerror( rc ) ); + __etoa( msg ); + return msg; +} +#endif diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index 7c9ce06645f5cf07dac5800138dd97dd3a61f879..978835bd91b895905a271ffc3d9385c663246d25 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -173,6 +173,9 @@ bdb_db_open( BackendDB *be ) int rc, i; struct bdb_info *bdb = (struct bdb_info *) be->be_private; u_int32_t flags; +#ifdef HAVE_EBCDIC + char path[MAXPATHLEN]; +#endif #ifdef NEW_LOGGING LDAP_LOG( BACK_BDB, ARGS, @@ -284,10 +287,19 @@ bdb_db_open( BackendDB *be ) bdb->bi_dbenv_home, 0, 0); #endif +#ifdef HAVE_EBCDIC + strcpy( path, bdb->bi_dbenv_home ); + __atoe( path ); + rc = bdb->bi_dbenv->open( bdb->bi_dbenv, + path, + flags, + bdb->bi_dbenv_mode ); +#else rc = bdb->bi_dbenv->open( bdb->bi_dbenv, bdb->bi_dbenv_home, flags, bdb->bi_dbenv_mode ); +#endif if( rc != 0 ) { #ifdef NEW_LOGGING LDAP_LOG( BACK_BDB, ERR, @@ -362,12 +374,23 @@ bdb_db_open( BackendDB *be ) BDB_PAGESIZE ); } +#ifdef HAVE_EBCDIC + strcpy( path, bdbi_databases[i].file ); + __atoe( path ); + rc = DB_OPEN( db->bdi_db, + path, + /* bdbi_databases[i].name, */ NULL, + bdbi_databases[i].type, + bdbi_databases[i].flags | flags, + bdb->bi_dbenv_mode ); +#else rc = DB_OPEN( db->bdi_db, bdbi_databases[i].file, /* bdbi_databases[i].name, */ NULL, bdbi_databases[i].type, bdbi_databases[i].flags | flags, bdb->bi_dbenv_mode ); +#endif if( rc != 0 ) { #ifdef NEW_LOGGING @@ -543,6 +566,17 @@ bdb_initialize( { /* version check */ int major, minor, patch; char *version = db_version( &major, &minor, &patch ); +#ifdef HAVE_EBCDIC + char v2[1024]; + + /* All our stdio does an ASCII to EBCDIC conversion on + * the output. Strings from the BDB library are already + * in EBCDIC; we have to go back and forth... + */ + strcpy( v2, version ); + __etoa( v2 ); + version = v2; +#endif if( major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR || diff --git a/servers/slapd/back-bdb/proto-bdb.h b/servers/slapd/back-bdb/proto-bdb.h index 7adf2f0d4747d67e9a6a2768f36cd97a4d389ada..6cef37e39c57fa2b7433f4b9a0ef2ccb2d5b2405 100644 --- a/servers/slapd/back-bdb/proto-bdb.h +++ b/servers/slapd/back-bdb/proto-bdb.h @@ -343,6 +343,12 @@ int bdb_cache_delete_entry( ); void bdb_cache_release_all( Cache *cache ); +#ifdef HAVE_EBCDIC +char *ebcdic_dberror( int rc ); + +#define db_strerror(x) ebcdic_dberror(x) +#endif + LDAP_END_DECL #endif /* _PROTO_BDB_H */