Config conflict checking vs. USE_SQLITE
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 8 Jun 2024 13:16:48 +0000 (14:16 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 9 Jun 2024 10:15:53 +0000 (11:15 +0100)
src/src/hintsdb.h
src/src/lookups/dbmdb.c

index 643395e136e8b8aec1e2f99fbb729edc5fe3957f..7335ef842851a6d4715e0c994ad36a98d95fc912 100644 (file)
@@ -33,8 +33,8 @@ The API is:
     exim_dbscan                (get, and bump cursor)
     exim_dbdelete_cursor
     exim_datum_init
     exim_dbscan                (get, and bump cursor)
     exim_dbdelete_cursor
     exim_datum_init
-    exim_datum_size_get
-    exim_datum_data_get
+    exim_datum_size_get/set
+    exim_datum_data_get/set
     exim_datum_free
   Defines:
     EXIM_DB            access handle
     exim_datum_free
   Defines:
     EXIM_DB            access handle
@@ -49,6 +49,17 @@ The users of this API are:
   hintsdb utilities    exim_dbutil.c and exim_dbmvuild.c
   dbmdb lookup         lookups/dbmdb,c
   autoreply transport  transports/autoreply.c
   hintsdb utilities    exim_dbutil.c and exim_dbmvuild.c
   dbmdb lookup         lookups/dbmdb,c
   autoreply transport  transports/autoreply.c
+
+Note that the dbmdb lookup use, bypassing the dbfn.c layer,
+means that no file-locking is done.
+XXX This feels like a layering violation; I don't see it commented on
+anywhere.
+
+Future: consider re-architecting to support caching of the open-handle
+for hintsdb uses (the dbmdb use gets that already).  This would need APIs
+for transaction locks.  Perhaps merge the implementation with the lookups
+layer, in some way, for the open-handle caching (since that manages closes
+required by Exim's process transisitions)?
 */
 
 #ifndef HINTSDB_H
 */
 
 #ifndef HINTSDB_H
@@ -56,6 +67,9 @@ The users of this API are:
 
 
 #ifdef USE_SQLITE
 
 
 #ifdef USE_SQLITE
+# if defined(USE_DB) || defined(USE_GDBM) || defined(USE_TDB)
+#  error USE_SQLITE conflict with alternate definition
+# endif
 
 /* ********************* sqlite3 interface ************************ */
 
 
 /* ********************* sqlite3 interface ************************ */
 
@@ -323,7 +337,7 @@ exim_datum_free(EXIM_DATUM * dp)
 
 #elif defined(USE_TDB)
 
 
 #elif defined(USE_TDB)
 
-# if defined(USE_DB) || defined(USE_GDBM)
+# if defined(USE_DB) || defined(USE_GDBM) || defined(USE_SQLITE)
 #  error USE_TDB conflict with alternate definition
 # endif
 
 #  error USE_TDB conflict with alternate definition
 # endif
 
@@ -460,7 +474,7 @@ d->dptr = NULL;
 
 #elif defined USE_DB
 
 
 #elif defined USE_DB
 
-# if defined(USE_TDB) || defined(USE_GDBM)
+# if defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
 #  error USE_DB conflict with alternate definition
 # endif
 
 #  error USE_DB conflict with alternate definition
 # endif
 
@@ -791,9 +805,9 @@ exim_datum_free(EXIM_DATUM * d)
 /********************* gdbm interface definitions **********************/
 
 #elif defined USE_GDBM
 /********************* gdbm interface definitions **********************/
 
 #elif defined USE_GDBM
-/*XXX TODO: exim's locfile not needed */
+/*XXX TODO: exim's lockfile not needed? */
 
 
-# if defined(USE_TDB) || defined(USE_DB)
+# if defined(USE_TDB) || defined(USE_DB) || defined(USE_SQLITE)
 #  error USE_GDBM conflict with alternate definition
 # endif
 
 #  error USE_GDBM conflict with alternate definition
 # endif
 
@@ -935,8 +949,8 @@ exim_datum_free(EXIM_DATUM * d)
 
 
 
 
 
 
-/* If none of USE_DB, USG_GDBM, or USE_TDB are set, the default is the NDBM
-interface (which seems to be a wrapper for GDBM) */
+/* If none of USE_DB, USG_GDBM, USE_SQLITE or USE_TDB are set,
+the default is the NDBM interface (which seems to be a wrapper for GDBM) */
 
 
 /********************* ndbm interface definitions **********************/
 
 
 /********************* ndbm interface definitions **********************/
index 1b3dc031e898270315a94ff8592f23c823c94e62..d68110b126dd21cb4b835aa119113bcc319e43e2 100644 (file)
@@ -49,7 +49,7 @@ dbmdb_check(void *handle, const uschar *filename, int modemask, uid_t *owners,
 {
 int rc;
 
 {
 int rc;
 
-#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM)
+#if defined(USE_DB) || defined(USE_TDB) || defined(USE_GDBM) || defined(USE_SQLITE)
 rc = lf_check_file(-1, filename, S_IFREG, modemask, owners, owngroups,
   "dbm", errmsg);
 #else
 rc = lf_check_file(-1, filename, S_IFREG, modemask, owners, owngroups,
   "dbm", errmsg);
 #else