Gitweb:
https://git.exim.org/exim.git/commitdiff/4a90d4879978fe062e0539da0942c3f9176f5b9b
Commit: 4a90d4879978fe062e0539da0942c3f9176f5b9b
Parent: 7dd52d1ff8cd5e8914172d3131412bf1c2ceaf92
Author: Jeremy Harris <jgh146exb@???>
AuthorDate: Sun May 10 19:00:24 2020 +0100
Committer: Jeremy Harris <jgh146exb@???>
CommitDate: Tue May 12 12:13:58 2020 +0100
Move the LMDB lokup support from Experimental to mainline
---
doc/doc-docbook/spec.xfpt | 23 ++++++++++++++++++++
doc/doc-txt/NewStuff | 3 +++
doc/doc-txt/experimental-spec.txt | 46 ---------------------------------------
src/src/EDITME | 12 ++++------
src/src/config.h.defaults | 2 +-
src/src/drtables.c | 4 ++--
src/src/exim.c | 5 +----
src/src/lookups/lmdb.c | 4 ++--
src/src/macro_predef.c | 7 +++---
9 files changed, 40 insertions(+), 66 deletions(-)
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index be3e7c9..6dcb69d 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -6858,6 +6858,29 @@ The final resulting element can be a simple JSON type or a JSON object
or array; for the latter two a string-representation of the JSON
is returned.
For elements of type string, the returned value is de-quoted.
+
+
+.new
+.next
+.cindex LMDB
+.cindex lookup lmdb
+.cindex database lmdb
+&(lmdb)&: The given file is an LMDB database.
+LMDB is a memory-mapped key-value store,
+with API modeled loosely on that of BerkeleyDB.
+See &url(https://symas.com/products/lightning-memory-mapped-database/)
+for the feature set and operation modes.
+
+Exim provides read-only access via the LMDB C library.
+The library can be obtained from &url(https://github.com/LMDB/lmdb)
+or your operating system package repository.
+To enable LMDB support in Exim set LOOKUP_LMDB=yes in &_Local/Makefile_&.
+
+You will need to separately create the LMDB database file,
+possibly using the &"mdb_load"& utility.
+.wen
+
+
.next
.cindex "linear search"
.cindex "lookup" "lsearch"
diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff
index f3bf3e8..253eae2 100644
--- a/doc/doc-txt/NewStuff
+++ b/doc/doc-txt/NewStuff
@@ -18,6 +18,9 @@ Version 4.95
3. TLS resumption support, previously experimental, is now supported and
included in default builds.
+ 4. Single-key LMDB lookups, previously experimental, are now supported.
+ The support is not built unless specified in the Local/Makefile.
+
Version 4.94
------------
diff --git a/doc/doc-txt/experimental-spec.txt b/doc/doc-txt/experimental-spec.txt
index 599d2bb..8c9a866 100644
--- a/doc/doc-txt/experimental-spec.txt
+++ b/doc/doc-txt/experimental-spec.txt
@@ -466,52 +466,6 @@ Rationale:
Note that non-RFC-documented field names and data types are used.
-LMDB Lookup support
--------------------
-LMDB is an ultra-fast, ultra-compact, crash-proof key-value embedded data store.
-It is modeled loosely on the BerkeleyDB API. You should read about the feature
-set as well as operation modes at
https://symas.com/products/lightning-memory-mapped-database/
-
-LMDB single key lookup support is provided by linking to the LMDB C library.
-The current implementation does not support writing to the LMDB database.
-
-Visit
https://github.com/LMDB/lmdb to download the library or find it in your
-operating systems package repository.
-
-If building from source, this description assumes that headers will be in
-/usr/local/include, and that the libraries are in /usr/local/lib.
-
-1. In order to build exim with LMDB lookup support add or uncomment
-
-EXPERIMENTAL_LMDB=yes
-
-to your Local/Makefile. (Re-)build/install exim. exim -d should show
-Experimental_LMDB in the line "Support for:".
-
-EXPERIMENTAL_LMDB=yes
-LDFLAGS += -llmdb
-# CFLAGS += -I/usr/local/include
-# LDFLAGS += -L/usr/local/lib
-
-The first line sets the feature to include the correct code, and
-the second line says to link the LMDB libraries into the
-exim binary. The commented out lines should be uncommented if you
-built LMDB from source and installed in the default location.
-Adjust the paths if you installed them elsewhere, but you do not
-need to uncomment them if an rpm (or you) installed them in the
-package controlled locations (/usr/include and /usr/lib).
-
-2. Create your LMDB files, you can use the mdb_load utility which is
-part of the LMDB distribution our your favourite language bindings.
-
-3. Add the single key lookups to your exim.conf file, example lookups
-are below.
-
-${lookup{$sender_address_domain}lmdb{/var/lib/baruwa/data/db/relaydomains.mdb}{$value}}
-${lookup{$sender_address_domain}lmdb{/var/lib/baruwa/data/db/relaydomains.mdb}{$value}fail}
-${lookup{$sender_address_domain}lmdb{/var/lib/baruwa/data/db/relaydomains.mdb}}
-
-
Queuefile transport
-------------------
Queuefile is a pseudo transport which does not perform final delivery.
diff --git a/src/src/EDITME b/src/src/EDITME
index e198a9c..d7be01c 100644
--- a/src/src/EDITME
+++ b/src/src/EDITME
@@ -415,6 +415,8 @@ LOOKUP_DNSDB=yes
# LOOKUP_IBASE=yes
# LOOKUP_JSON=yes
# LOOKUP_LDAP=yes
+# LOOKUP_LMDB=yes
+
# LOOKUP_MYSQL=yes
# LOOKUP_MYSQL_PC=mariadb
# LOOKUP_NIS=yes
@@ -491,7 +493,8 @@ SUPPORT_DANE=yes
# You do not need to use this for any lookup information added via pkg-config.
# LOOKUP_INCLUDE=-I /usr/local/ldap/include -I /usr/local/mysql/include -I /usr/local/pgsql/include
-# LOOKUP_LIBS=-L/usr/local/lib -lldap -llber -lmysqlclient -lpq -lgds -lsqlite3
+# LOOKUP_INCLUDE +=-I /usr/local/include
+# LOOKUP_LIBS=-L/usr/local/lib -lldap -llber -lmysqlclient -lpq -lgds -lsqlite3 -llmdb
#------------------------------------------------------------------------------
@@ -626,13 +629,6 @@ DISABLE_MAL_MKS=yes
# Uncomment the following to include extra information in fail DSN message (bounces)
# EXPERIMENTAL_DSN_INFO=yes
-# Uncomment the following to add LMDB lookup support
-# You need to have LMDB installed on your system (
https://github.com/LMDB/lmdb)
-# Depending on where it is installed you may have to edit the CFLAGS and LDFLAGS lines.
-# EXPERIMENTAL_LMDB=yes
-# CFLAGS += -I/usr/local/include
-# LDFLAGS += -llmdb
-
# Uncomment the following line to add queuefile transport support
# EXPERIMENTAL_QUEUEFILE=yes
diff --git a/src/src/config.h.defaults b/src/src/config.h.defaults
index 1a1091f..07c0ecf 100644
--- a/src/src/config.h.defaults
+++ b/src/src/config.h.defaults
@@ -99,6 +99,7 @@ Do not put spaces between # and the 'define'.
#define LOOKUP_IBASE
#define LOOKUP_JSON
#define LOOKUP_LDAP
+#define LOOKUP_LMDB
#define LOOKUP_LSEARCH
#define LOOKUP_MYSQL
#define LOOKUP_NIS
@@ -204,7 +205,6 @@ Do not put spaces between # and the 'define'.
#define EXPERIMENTAL_BRIGHTMAIL
#define EXPERIMENTAL_DCC
#define EXPERIMENTAL_DSN_INFO
-#define EXPERIMENTAL_LMDB
#define EXPERIMENTAL_QUEUEFILE
#define EXPERIMENTAL_SRS_ALT
diff --git a/src/src/drtables.c b/src/src/drtables.c
index 0ca369c..67a2b8f 100644
--- a/src/src/drtables.c
+++ b/src/src/drtables.c
@@ -602,7 +602,7 @@ extern lookup_module_info pgsql_lookup_module_info;
#if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2
extern lookup_module_info redis_lookup_module_info;
#endif
-#if defined(EXPERIMENTAL_LMDB)
+#if defined(LOOKUP_LMDB)
extern lookup_module_info lmdb_lookup_module_info;
#endif
#if defined(SUPPORT_SPF)
@@ -698,7 +698,7 @@ addlookupmodule(NULL, &pgsql_lookup_module_info);
addlookupmodule(NULL, &redis_lookup_module_info);
#endif
-#ifdef EXPERIMENTAL_LMDB
+#ifdef LOOKUP_LMDB
addlookupmodule(NULL, &lmdb_lookup_module_info);
#endif
diff --git a/src/src/exim.c b/src/src/exim.c
index f61fe20..da43414 100644
--- a/src/src/exim.c
+++ b/src/src/exim.c
@@ -1001,9 +1001,6 @@ g = string_cat(NULL, US"Support for:");
#ifdef EXPERIMENTAL_DSN_INFO
g = string_cat(g, US" Experimental_DSN_info");
#endif
-#ifdef EXPERIMENTAL_LMDB
- g = string_cat(g, US" Experimental_LMDB");
-#endif
#ifdef EXPERIMENTAL_QUEUEFILE
g = string_cat(g, US" Experimental_QUEUEFILE");
#endif
@@ -1037,7 +1034,7 @@ g = string_cat(g, US"Lookups (built-in):");
#if defined(LOOKUP_LDAP) && LOOKUP_LDAP!=2
g = string_cat(g, US" ldap ldapdn ldapm");
#endif
-#ifdef EXPERIMENTAL_LMDB
+#ifdef LOOKUP_LMDB
g = string_cat(g, US" lmdb");
#endif
#if defined(LOOKUP_MYSQL) && LOOKUP_MYSQL!=2
diff --git a/src/src/lookups/lmdb.c b/src/src/lookups/lmdb.c
index 4066751..d9cf25d 100644
--- a/src/src/lookups/lmdb.c
+++ b/src/src/lookups/lmdb.c
@@ -8,7 +8,7 @@
#include "../exim.h"
-#ifdef EXPERIMENTAL_LMDB
+#ifdef LOOKUP_LMDB
#include <lmdb.h>
@@ -158,4 +158,4 @@ static lookup_info lmdb_lookup_info = {
static lookup_info *_lookup_list[] = { &lmdb_lookup_info };
lookup_module_info lmdb_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 1 };
-#endif /* EXPERIMENTAL_LMDB */
+#endif /* LOOKUP_LMDB */
diff --git a/src/src/macro_predef.c b/src/src/macro_predef.c
index aeb234a..9c3d34a 100644
--- a/src/src/macro_predef.c
+++ b/src/src/macro_predef.c
@@ -180,9 +180,6 @@ due to conflicts with other common macros. */
#ifdef TCP_FASTOPEN
builtin_macro_create(US"_HAVE_TCP_FASTOPEN");
#endif
-#ifdef EXPERIMENTAL_LMDB
- builtin_macro_create(US"_HAVE_LMDB");
-#endif
#ifdef SUPPORT_SPF
builtin_macro_create(US"_HAVE_SPF");
#endif
@@ -226,6 +223,10 @@ due to conflicts with other common macros. */
#ifdef LOOKUP_IBASE
builtin_macro_create(US"_HAVE_LOOKUP_IBASE");
#endif
+#ifdef LOOKUP_LMDB
+ builtin_macro_create(US"_HAVE_LMDB");
+ builtin_macro_create(US"_HAVE_LOOKUP_LMDB");
+#endif
#ifdef LOOKUP_LDAP
builtin_macro_create(US"_HAVE_LOOKUP_JSON");
#endif