Mika Iisakkila wrote: > Any hopes for updates to current stable SASL2 and Cyrus 2.1 > to accommodate BDB 4.1?
Boy, was that easy; patches attached. I have no idea if these actually realize any of the performance gains, but at least both sasl2 and imapd compile and run. I can't give any promises regarding correctness or backwards compatibility with DB4.0. Probably configure should also explicitly look for 4.1, but I'm not going to touch that :-) --mika
diff -Naur cyrus-sasl-2.1.7-orig/sasldb/db_berkeley.c cyrus-sasl-2.1.7/sasldb/db_berkeley.c --- cyrus-sasl-2.1.7-orig/sasldb/db_berkeley.c 2002-07-05 18:45:13.000000000 +0300 +++ cyrus-sasl-2.1.7/sasldb/db_berkeley.c 2002-09-19 14:44:53.000000000 +0300 @@ -85,12 +85,16 @@ ret = db_create(mbdb, NULL, 0); if (ret == 0 && *mbdb != NULL) { - ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, flags, 0660); - if (ret != 0) - { - (void) (*mbdb)->close(*mbdb, 0); - *mbdb = NULL; - } +#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 + ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, flags, 0660); +#else + ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, flags, 0660); +#endif + if (ret != 0) + { + (void) (*mbdb)->close(*mbdb, 0); + *mbdb = NULL; + } } #endif /* DB_VERSION_MAJOR < 3 */ diff -Naur cyrus-sasl-2.1.7-orig/utils/dbconverter-2.c cyrus-sasl-2.1.7/utils/dbconverter-2.c --- cyrus-sasl-2.1.7-orig/utils/dbconverter-2.c 2002-07-05 18:44:43.000000000 +0300 +++ cyrus-sasl-2.1.7/utils/dbconverter-2.c 2002-09-19 14:46:13.000000000 +0300 @@ -214,12 +214,16 @@ ret = db_create(mbdb, NULL, 0); if (ret == 0 && *mbdb != NULL) { - ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, DB_CREATE, 0664); - if (ret != 0) - { - (void) (*mbdb)->close(*mbdb, 0); - *mbdb = NULL; - } +#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 + ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, DB_CREATE, 0664); +#else + ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, DB_CREATE, 0664); +#endif + if (ret != 0) + { + (void) (*mbdb)->close(*mbdb, 0); + *mbdb = NULL; + } } #endif /* DB_VERSION_MAJOR < 3 */
diff -Naur cyrus-imapd-2.1.9-orig/lib/cyrusdb_db3.c cyrus-imapd-2.1.9/lib/cyrusdb_db3.c --- cyrus-imapd-2.1.9-orig/lib/cyrusdb_db3.c 2002-08-06 19:55:03.000000000 +0300 +++ cyrus-imapd-2.1.9/lib/cyrusdb_db3.c 2002-09-19 14:41:32.000000000 +0300 @@ -232,13 +232,17 @@ assert(dbinit); +#if !(DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) do { +#endif #if (DB_VERSION_MAJOR > 3) || ((DB_VERSION_MAJOR == 3) && (DB_VERSION_MINOR > 0)) r = txn_checkpoint(dbenv, 0, 0, 0); #else r = txn_checkpoint(dbenv, 0, 0); #endif - } while (r == DB_INCOMPLETE); +#if !(DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) + } while (r == DB_INCOMPLETE); /* Never returned by BDB 4.1 */ +#endif if (r) { syslog(LOG_ERR, "DBERROR: couldn't checkpoint: %s", db_strerror(r)); @@ -347,7 +351,11 @@ } /* xxx set comparator! */ +#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1 + r = db->open(db, NULL, fname, NULL, DB_BTREE, DB_CREATE, 0664); +#else r = db->open(db, fname, NULL, DB_BTREE, DB_CREATE, 0664); +#endif if (r != 0) { syslog(LOG_ERR, "DBERROR: opening %s: %s", fname, db_strerror(r)); return CYRUSDB_IOERROR;