X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fdrtables.c;h=a3fa328b909d430bd65af8d088337b126abec628;hb=d36e39d7a785f12c138c60d6b58bf62161c4eca1;hp=3e978243dc8acc8ef8c750aad55e09c1d3f56ded;hpb=3386088d5af4d4c61faa12ae29560e2c5bd43304;p=exim.git diff --git a/src/src/drtables.c b/src/src/drtables.c index 3e978243d..a3fa328b9 100644 --- a/src/src/drtables.c +++ b/src/src/drtables.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2015 */ +/* Copyright (c) University of Cambridge 1995 - 2016 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -228,6 +228,10 @@ exim binary. */ #include "transports/pipe.h" #endif +#ifdef EXPERIMENTAL_QUEUEFILE +#include "transports/queuefile.h" +#endif + #ifdef TRANSPORT_SMTP #include "transports/smtp.h" #endif @@ -389,6 +393,20 @@ transport_info transports_available[] = { TRUE /* local flag */ }, #endif +#ifdef EXPERIMENTAL_QUEUEFILE + { + US"queuefile", /* driver name */ + queuefile_transport_options, /* local options table */ + &queuefile_transport_options_count, /* number of entries */ + &queuefile_transport_option_defaults, /* private options defaults */ + sizeof(queuefile_transport_options_block), /* size of private block */ + queuefile_transport_init, /* init entry point */ + queuefile_transport_entry, /* main entry point */ + NULL, /* no tidyup entry */ + NULL, /* no closedown entry */ + TRUE /* local flag */ + }, +#endif #ifdef TRANSPORT_SMTP { US"smtp", /* driver name */ @@ -415,37 +433,42 @@ struct lookupmodulestr static struct lookupmodulestr *lookupmodules = NULL; -static void addlookupmodule(void *dl, struct lookup_module_info *info) +static void +addlookupmodule(void *dl, struct lookup_module_info *info) { - struct lookupmodulestr *p = store_malloc(sizeof(struct lookupmodulestr)); - p->dl = dl; - p->info = info; - p->next = lookupmodules; - lookupmodules = p; - lookup_list_count += info->lookupcount; +struct lookupmodulestr *p = store_malloc(sizeof(struct lookupmodulestr)); + +p->dl = dl; +p->info = info; +p->next = lookupmodules; +lookupmodules = p; +lookup_list_count += info->lookupcount; } /* only valid after lookup_list and lookup_list_count are assigned */ -static void add_lookup_to_list(lookup_info *info) +static void +add_lookup_to_list(lookup_info *info) { - /* need to add the lookup to lookup_list, sorted */ - int pos = 0; - - /* strategy is to go through the list until we find - * either an empty spot or a name that is higher. - * this can't fail because we have enough space. */ - while (lookup_list[pos] - && (Ustrcmp(lookup_list[pos]->name, info->name) <= 0)) { - pos++; - } - if (lookup_list[pos]) { - /* need to insert it, so move all the other items up - * (last slot is still empty, of course) */ - memmove(&lookup_list[pos+1], - &lookup_list[pos], - sizeof(lookup_info **) * (lookup_list_count-pos-1)); +/* need to add the lookup to lookup_list, sorted */ +int pos = 0; + +/* strategy is to go through the list until we find +either an empty spot or a name that is higher. +this can't fail because we have enough space. */ + +while (lookup_list[pos] && (Ustrcmp(lookup_list[pos]->name, info->name) <= 0)) + pos++; + +if (lookup_list[pos]) + { + /* need to insert it, so move all the other items up + (last slot is still empty, of course) */ + + memmove(&lookup_list[pos+1], + &lookup_list[pos], + sizeof(lookup_info *) * (lookup_list_count-pos-1)); } - lookup_list[pos] = info; +lookup_list[pos] = info; } @@ -453,62 +476,67 @@ static void add_lookup_to_list(lookup_info *info) * which give parse errors on an extern in function scope. Each entry needs * to also be invoked in init_lookup_list() below */ -#if defined(LOOKUP_WHOSON) && LOOKUP_WHOSON!=2 -extern lookup_module_info whoson_lookup_module_info; +#if defined(LOOKUP_CDB) && LOOKUP_CDB!=2 +extern lookup_module_info cdb_lookup_module_info; #endif -#if defined(LOOKUP_TESTDB) && LOOKUP_TESTDB!=2 -extern lookup_module_info testdb_lookup_module_info; +#if defined(LOOKUP_DBM) && LOOKUP_DBM!=2 +extern lookup_module_info dbmdb_lookup_module_info; #endif -#if defined(LOOKUP_SQLITE) && LOOKUP_SQLITE!=2 -extern lookup_module_info sqlite_lookup_module_info; +#if defined(LOOKUP_DNSDB) && LOOKUP_DNSDB!=2 +extern lookup_module_info dnsdb_lookup_module_info; #endif -#ifdef EXPERIMENTAL_SPF -extern lookup_module_info spf_lookup_module_info; +#if defined(LOOKUP_DSEARCH) && LOOKUP_DSEARCH!=2 +extern lookup_module_info dsearch_lookup_module_info; #endif -#ifdef EXPERIMENTAL_REDIS -extern lookup_module_info redis_lookup_module_info; +#if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2 +extern lookup_module_info ibase_lookup_module_info; #endif -#if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2 -extern lookup_module_info pgsql_lookup_module_info; +#if defined(LOOKUP_LDAP) +extern lookup_module_info ldap_lookup_module_info; #endif -#if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2 -extern lookup_module_info passwd_lookup_module_info; +#if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2 +extern lookup_module_info lsearch_lookup_module_info; #endif -#if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2 -extern lookup_module_info oracle_lookup_module_info; +#if defined(LOOKUP_MYSQL) && LOOKUP_MYSQL!=2 +extern lookup_module_info mysql_lookup_module_info; +#endif +#if defined(LOOKUP_NIS) && LOOKUP_NIS!=2 +extern lookup_module_info nis_lookup_module_info; #endif #if defined(LOOKUP_NISPLUS) && LOOKUP_NISPLUS!=2 extern lookup_module_info nisplus_lookup_module_info; #endif -#if defined(LOOKUP_NIS) && LOOKUP_NIS!=2 -extern lookup_module_info nis_lookup_module_info; +#if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2 +extern lookup_module_info oracle_lookup_module_info; #endif -#if defined(LOOKUP_MYSQL) && LOOKUP_MYSQL!=2 -extern lookup_module_info mysql_lookup_module_info; +#if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2 +extern lookup_module_info passwd_lookup_module_info; #endif -#if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2 -extern lookup_module_info lsearch_lookup_module_info; +#if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2 +extern lookup_module_info pgsql_lookup_module_info; #endif -#ifdef LOOKUP_LDAP -extern lookup_module_info ldap_lookup_module_info; +#if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2 +extern lookup_module_info redis_lookup_module_info; #endif -#if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2 -extern lookup_module_info ibase_lookup_module_info; +#if defined(EXPERIMENTAL_LMDB) +extern lookup_module_info lmdb_lookup_module_info; #endif -#if defined(LOOKUP_DSEARCH) && LOOKUP_DSEARCH!=2 -extern lookup_module_info dsearch_lookup_module_info; +#if defined(EXPERIMENTAL_SPF) +extern lookup_module_info spf_lookup_module_info; #endif -#if defined(LOOKUP_DNSDB) && LOOKUP_DNSDB!=2 -extern lookup_module_info dnsdb_lookup_module_info; +#if defined(LOOKUP_SQLITE) && LOOKUP_SQLITE!=2 +extern lookup_module_info sqlite_lookup_module_info; #endif -#if defined(LOOKUP_DBM) && LOOKUP_DBM!=2 -extern lookup_module_info dbmdb_lookup_module_info; +#if defined(LOOKUP_TESTDB) && LOOKUP_TESTDB!=2 +extern lookup_module_info testdb_lookup_module_info; #endif -#if defined(LOOKUP_CDB) && LOOKUP_CDB!=2 -extern lookup_module_info cdb_lookup_module_info; +#if defined(LOOKUP_WHOSON) && LOOKUP_WHOSON!=2 +extern lookup_module_info whoson_lookup_module_info; #endif -void init_lookup_list(void) + +void +init_lookup_list(void) { #ifdef LOOKUP_MODULE_DIR DIR *dd; @@ -517,8 +545,6 @@ void init_lookup_list(void) int moduleerrors = 0; #endif struct lookupmodulestr *p; - const pcre *regex_islookupmod = regex_must_compile( - US"\\." DYNLIB_FN_EXT "$", FALSE, TRUE); if (lookup_list_init_done) return; @@ -576,10 +602,14 @@ void init_lookup_list(void) addlookupmodule(NULL, &pgsql_lookup_module_info); #endif -#ifdef EXPERIMENTAL_REDIS +#if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2 addlookupmodule(NULL, &redis_lookup_module_info); #endif +#ifdef EXPERIMENTAL_LMDB + addlookupmodule(NULL, &lmdb_lookup_module_info); +#endif + #ifdef EXPERIMENTAL_SPF addlookupmodule(NULL, &spf_lookup_module_info); #endif @@ -603,6 +633,9 @@ void init_lookup_list(void) log_write(0, LOG_MAIN, "Couldn't open %s: not loading lookup modules\n", LOOKUP_MODULE_DIR); } else { + const pcre *regex_islookupmod = regex_must_compile( + US"\\." DYNLIB_FN_EXT "$", FALSE, TRUE); + DEBUG(D_lookup) debug_printf("Loading lookup modules from %s\n", LOOKUP_MODULE_DIR); while ((ent = readdir(dd)) != NULL) { char *name = ent->d_name; @@ -659,14 +692,13 @@ void init_lookup_list(void) countmodules++; } } + store_free((void*)regex_islookupmod); closedir(dd); } DEBUG(D_lookup) debug_printf("Loaded %d lookup modules\n", countmodules); #endif - store_free((void*)regex_islookupmod); - DEBUG(D_lookup) debug_printf("Total %d lookups\n", lookup_list_count); lookup_list = store_malloc(sizeof(lookup_info *) * lookup_list_count);