-/* The OSF1 (Digital Unix) linker puts out a worrying warning if any sections
-contain no executable code. It says
-
-Warning: Linking some objects which contain exception information sections
- and some which do not. This may cause fatal runtime exception handling
- problems.
-
-As this may cause people to worry needlessly, include a dummy function here
-to stop the message from appearing. Make it call itself to stop picky compilers
-compilers complaining that it is unused, and put in a dummy argument to stop
-even pickier compilers complaining about infinite loops. */
-
-static void dummy(int x) { dummy(x-1); }
-
-
-/* Table of information about all possible lookup methods. The entries are
-always present, but the "open" and "find" functions are set to NULL for those
-that are not compiled into the binary. The "check" and "close" functions can
-be NULL for methods that don't need them. */
-
-#ifdef LOOKUP_CDB
-#include "lookups/cdb.h"
-#endif
-
-#ifdef LOOKUP_DBM
-#include "lookups/dbmdb.h"
-#endif
-
-#ifdef LOOKUP_DNSDB
-#include "lookups/dnsdb.h"
-#endif
-
-#ifdef LOOKUP_DSEARCH
-#include "lookups/dsearch.h"
-#endif
-
-#ifdef LOOKUP_IBASE
-#include "lookups/ibase.h"
-#endif
-
-#ifdef LOOKUP_LDAP
-#include "lookups/ldap.h"
-#endif
-
-#ifdef LOOKUP_LSEARCH
-#include "lookups/lsearch.h"
-#endif
-
-#ifdef LOOKUP_MYSQL
-#include "lookups/mysql.h"
-#endif
-
-#ifdef LOOKUP_NIS
-#include "lookups/nis.h"
-#endif
-
-#ifdef LOOKUP_NISPLUS
-#include "lookups/nisplus.h"
-#endif
-
-#ifdef LOOKUP_ORACLE
-#include "lookups/oracle.h"
-#endif
-
-#ifdef LOOKUP_PASSWD
-#include "lookups/passwd.h"
-#endif
-
-#ifdef LOOKUP_PGSQL
-#include "lookups/pgsql.h"
-#endif
-
-#ifdef EXPERIMENTAL_SPF
-#include "lookups/spf.h"
-#endif
-
-#ifdef LOOKUP_SQLITE
-#include "lookups/sqlite.h"
-#endif
-
-#ifdef LOOKUP_TESTDB
-#include "lookups/testdb.h"
-#endif
-
-#ifdef LOOKUP_WHOSON
-#include "lookups/whoson.h"
-#endif
-
-/* The second field in each item below is a set of bit flags:
-
- lookup_querystyle => this is a query-style lookup,
- else single-key (+ file) style
- lookup_absfile => an absolute file name is required,
- (for single-key style only)
-
-This list must be in alphabetical order of lookup name because it is
-searched by binary chop, having got rather large for the original linear
-searching. */
-
-lookup_info lookup_list[] = {
-
-/* cdb lookup in single file */
-
- {
- US"cdb", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_CDB
- cdb_open, /* open function */
- cdb_check, /* check function */
- cdb_find, /* find function */
- cdb_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* DBM file lookup; called "dbm" because that is the name in Exim,
-but the code is called dbmdb to avoid name clashes. */
-
- {
- US"dbm", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_DBM
- dbmdb_open, /* open function */
- dbmdb_check, /* check function */
- dbmdb_find, /* find function */
- dbmdb_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* This variant of DBM does not include the binary zero on the end
-of the key strings. */
-
- {
- US"dbmnz", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_DBM
- dbmdb_open, /* sic */ /* open function */
- dbmdb_check, /* sic */ /* check function */
- dbmnz_find, /* find function */
- dbmdb_close, /* sic */ /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Using DNS TXT records as a database */
-
- {
- US"dnsdb", /* lookup name */
- lookup_querystyle, /* query style */
-#ifdef LOOKUP_DNSDB
- dnsdb_open, /* open function */
- NULL, /* check function */
- dnsdb_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Search of files in a directory */
-
- {
- US"dsearch", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_DSEARCH
- dsearch_open, /* open function */
- dsearch_check, /* check function */
- dsearch_find, /* find function */
- dsearch_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Interbase lookup */
-
- {
- US"ibase", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_IBASE
- ibase_open, /* open function */
- NULL, /* no check function */
- ibase_find, /* find function */
- NULL, /* no close function */
- ibase_tidy, /* tidy function */
- ibase_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Linear search of single file with ip-addresses and networks; shares many
-functions with lsearch. */
-
- {
- US"iplsearch", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_LSEARCH
- lsearch_open, /* open function */
- lsearch_check, /* check function */
- iplsearch_find, /* find function */
- lsearch_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* LDAP lookup, allowing data from only one entry to be returned */
-
- {
- US"ldap", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_LDAP
- eldap_open, /* open function */
- NULL, /* check function */
- eldap_find, /* find function */
- NULL, /* no close function */
- eldap_tidy, /* tidy function */
- eldap_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* LDAP lookup, allowing the DN from more one entry to be returned */
-
- {
- US"ldapdn", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_LDAP
- eldap_open, /* sic */ /* open function */
- NULL, /* check function */
- eldapdn_find, /* find function */
- NULL, /* no close function */
- eldap_tidy, /* sic */ /* tidy function */
- eldap_quote /* sic */ /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* LDAP lookup, allowing data from more than one entry to be returned */
-
- {
- US"ldapm", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_LDAP
- eldap_open, /* sic */ /* open function */
- NULL, /* check function */
- eldapm_find, /* find function */
- NULL, /* no close function */
- eldap_tidy, /* sic */ /* tidy function */
- eldap_quote /* sic */ /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Linear search of single file */
-
- {
- US"lsearch", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_LSEARCH
- lsearch_open, /* open function */
- lsearch_check, /* check function */
- lsearch_find, /* find function */
- lsearch_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* MYSQL lookup */
-
- {
- US"mysql", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_MYSQL
- mysql_open, /* open function */
- NULL, /* no check function */
- mysql_find, /* find function */
- NULL, /* no close function */
- mysql_tidy, /* tidy function */
- mysql_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* NIS lookup, excluding trailing 0 from key */
-
- {
- US"nis", /* lookup name */
- 0, /* not abs file, not query style*/
-#ifdef LOOKUP_NIS
- nis_open, /* open function */
- NULL, /* check function */
- nis_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* NIS lookup, including trailing 0 in key */
-
- {
- US"nis0", /* lookup name */
- 0, /* not absfile, not query style */
-#ifdef LOOKUP_NIS
- nis_open, /* sic */ /* open function */
- NULL, /* check function */
- nis0_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* NIS+ lookup */
-
- {
- US"nisplus", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_NISPLUS
- nisplus_open, /* open function */
- NULL, /* check function */
- nisplus_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- nisplus_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Linear search of single file, with wildcarding but no pattern expansion.
-Shares many functions with lsearch. */
-
- {
- US"nwildlsearch", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_LSEARCH
- lsearch_open, /* open function */
- lsearch_check, /* check function */
- nwildlsearch_find, /* find function */
- lsearch_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Oracle lookup */
-
- {
- US"oracle", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_ORACLE
- oracle_open, /* open function */
- NULL, /* check function */
- oracle_find, /* find function */
- NULL, /* no close function */
- oracle_tidy, /* tidy function */
- oracle_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* passwd lookup */
-
- {
- US"passwd", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_PASSWD
- passwd_open, /* open function */
- NULL, /* no check function */
- passwd_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* PGSQL lookup */
-
- {
- US"pgsql", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_PGSQL
- pgsql_open, /* open function */
- NULL, /* no check function */
- pgsql_find, /* find function */
- NULL, /* no close function */
- pgsql_tidy, /* tidy function */
- pgsql_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* SPF lookup */
-
- {
- US"spf", /* lookup name */
- 0, /* not absfile, not query style */
-#ifdef EXPERIMENTAL_SPF
- spf_open, /* open function */
- NULL, /* no check function */
- spf_find, /* find function */
- spf_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* sqlite lookup */
-
- {
- US"sqlite", /* lookup name */
- lookup_absfilequery, /* query-style lookup, starts with file name */
-#ifdef LOOKUP_SQLITE
- sqlite_open, /* open function */
- NULL, /* no check function */
- sqlite_find, /* find function */
- sqlite_close, /* close function */
- NULL, /* no tidy function */
- sqlite_quote /* quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Testdb lookup is for testing Exim, not useful for normal running.
-For that reason, we omit the entry entirely when not building it into
-the binary, so that attempts to use it give "unknown lookup type" instead
-of "lookup type not available". */
-
-#ifdef LOOKUP_TESTDB
- {
- US"testdb", /* lookup name */
- lookup_querystyle, /* query-style lookup */
- testdb_open, /* open function */
- NULL, /* check function */
- testdb_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
- },
-#endif
-
-/* "Whoson" lookup */
-
- {
- US"whoson", /* lookup name */
- lookup_querystyle, /* query-style lookup */
-#ifdef LOOKUP_WHOSON
- whoson_open, /* open function */
- NULL, /* check function */
- whoson_find, /* find function */
- NULL, /* no close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- },
-
-/* Linear search of single file, with wildcarding and pattern expansion. Shares
-many functions with lsearch. */
-
- {
- US"wildlsearch", /* lookup name */
- lookup_absfile, /* uses absolute file name */
-#ifdef LOOKUP_LSEARCH
- lsearch_open, /* open function */
- lsearch_check, /* check function */
- wildlsearch_find, /* find function */
- lsearch_close, /* close function */
- NULL, /* no tidy function */
- NULL /* no quoting function */
-#else
- NULL, NULL, NULL, NULL, NULL, NULL /* lookup not present */
-#endif
- }
-};
-
-/* Number of entries in the list */
-
-int lookup_list_count = sizeof(lookup_list)/sizeof(lookup_info);
-
-