Hajimu UMEMOTO wrote:
Hi,

On Tue, 08 May 2012 02:37:40 +0900
Hajimu UMEMOTO <u...@mahoroba.org> said:

On Mon, 07 May 2012 10:56:12 +0100
Alexey Melnikov <alexey.melni...@isode.com> said:

alexey> BDB 5.X is not currently supported. If you (or anybody else) submit a 
patch
alexey> that makes SASLDB work with BDB 5.X, such patch will likely be 
integrated into
alexey> Cyrus SASL.

ume> How about this parch?

Oops, I forgot to attach one more patch.

Those ifdefs are quite ugly. This is the approach we use in OpenLDAP, it makes for much simpler checks.

--
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/


Index: sasldb/db_berkeley.c
===================================================================
RCS file: /cvs/src/sasl/sasldb/db_berkeley.c,v
retrieving revision 1.11
diff -u -r1.11 db_berkeley.c
--- sasldb/db_berkeley.c        12 Sep 2011 08:50:47 -0000      1.11
+++ sasldb/db_berkeley.c        7 May 2012 18:31:23 -0000
@@ -53,6 +53,8 @@
 #include <errno.h>
 #include "sasldb.h"
 
+#define DB_VERSION_FULL ((DB_VERSION_MAJOR << 24) | (DB_VERSION_MINOR << 16) | 
DB_VERSION_PATCH)
+
 static int db_ok = 0;
 #if defined(KEEP_DB_OPEN)
 static DB * g_db = NULL;
@@ -95,13 +97,13 @@
 #endif
 #endif
 
-#if DB_VERSION_MAJOR < 3
+#if DB_VERSION_FULL < 0x03000000
     ret = db_open(path, DB_HASH, flags, 0660, NULL, NULL, mbdb);
-#else /* DB_VERSION_MAJOR < 3 */
+#else /* DB_VERSION_FULL < 0x03000000 */
     ret = db_create(mbdb, NULL, 0);
     if (ret == 0 && *mbdb != NULL)
     {
-#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1
+#if DB_VERSION_FULL >= 0x04010000 
        ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, flags, 0660);
 #else
        ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, flags, 0660);
@@ -112,7 +114,7 @@
            *mbdb = NULL;
        }
     }
-#endif /* DB_VERSION_MAJOR < 3 */
+#endif /* DB_VERSION_FULL < 0x03000000 */
 
     if (ret != 0) {
        if (rdwr == 0 && ret == ENOENT) {
@@ -464,15 +466,11 @@
 
     if(!dbh->cursor) {
         /* make cursor */
-#if DB_VERSION_MAJOR < 3
-#if DB_VERSION_MINOR < 6
+#if DB_VERSION_FULL < 0x03060000
        result = mbdb->cursor(mbdb, NULL,&dbh->cursor); 
 #else
        result = mbdb->cursor(mbdb, NULL,&dbh->cursor, 0); 
-#endif /* DB_VERSION_MINOR < 7 */
-#else /* DB_VERSION_MAJOR < 3 */
-       result = mbdb->cursor(mbdb, NULL,&dbh->cursor, 0); 
-#endif /* DB_VERSION_MAJOR < 3 */
+#endif /* DB_VERSION_FULL < 0x03000000 */
 
        if (result!=0) {
            return SASL_FAIL;
Index: utils/dbconverter-2.c
===================================================================
RCS file: /cvs/src/sasl/utils/dbconverter-2.c,v
retrieving revision 1.8
diff -u -r1.8 dbconverter-2.c
--- utils/dbconverter-2.c       13 Feb 2003 19:56:17 -0000      1.8
+++ utils/dbconverter-2.c       7 May 2012 18:31:23 -0000
@@ -200,6 +200,7 @@
 
 #include <db.h>
 
+#define DB_VERSION_FULL ((DB_VERSION_MAJOR << 24) | (DB_VERSION_MINOR << 16) | 
DB_VERSION_PATCH)
 /*
  * Open the database
  *
@@ -208,13 +209,13 @@
 {
     int ret;
 
-#if DB_VERSION_MAJOR < 3
+#if DB_VERSION_FULL < 0x03000000
     ret = db_open(path, DB_HASH, DB_CREATE, 0664, NULL, NULL, mbdb);
-#else /* DB_VERSION_MAJOR < 3 */
+#else /* DB_VERSION_FULL < 0x03000000 */
     ret = db_create(mbdb, NULL, 0);
     if (ret == 0 && *mbdb != NULL)
     {
-#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1
+#if DB_VERSION_FULL >= 0x04010000
        ret = (*mbdb)->open(*mbdb, NULL, path, NULL, DB_HASH, DB_CREATE, 0664);
 #else
        ret = (*mbdb)->open(*mbdb, path, NULL, DB_HASH, DB_CREATE, 0664);
@@ -225,7 +226,7 @@
            *mbdb = NULL;
        }
     }
-#endif /* DB_VERSION_MAJOR < 3 */
+#endif /* DB_VERSION_FULL < 0x03000000 */
 
     if (ret != 0) {
        fprintf(stderr,"Error opening password file %s\n", path);
@@ -263,15 +264,11 @@
     if (result!=SASL_OK) goto cleanup;
 
     /* make cursor */
-#if DB_VERSION_MAJOR < 3
-#if DB_VERSION_MINOR < 6
+#if DB_VERSION_FULL < 0x03060000
     result = mbdb->cursor(mbdb, NULL,&cursor); 
 #else
     result = mbdb->cursor(mbdb, NULL,&cursor, 0); 
-#endif /* DB_VERSION_MINOR < 7 */
-#else /* DB_VERSION_MAJOR < 3 */
-    result = mbdb->cursor(mbdb, NULL,&cursor, 0); 
-#endif /* DB_VERSION_MAJOR < 3 */
+#endif /* DB_VERSION_FULL < 0x03060000 */
 
     if (result!=0) {
        fprintf(stderr,"Making cursor failure: %s\n",db_strerror(result));

Reply via email to