* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2009 */
+/* Copyright (c) University of Cambridge 1995 - 2016 */
/* See the file NOTICE for conditions of use and distribution. */
#include "auths/dovecot.h"
#endif
+#ifdef AUTH_GSASL
+#include "auths/gsasl_exim.h"
+#endif
+
+#ifdef AUTH_HEIMDAL_GSSAPI
+#include "auths/heimdal_gssapi.h"
+#endif
+
#ifdef AUTH_PLAINTEXT
#include "auths/plaintext.h"
#endif
#include "auths/spa.h"
#endif
+#ifdef AUTH_TLS
+#include "auths/tls.h"
+#endif
+
auth_info auths_available[] = {
/* Checking by an expansion condition on plain text */
sizeof(auth_cram_md5_options_block),
auth_cram_md5_init, /* init function */
auth_cram_md5_server, /* server function */
- auth_cram_md5_client /* client function */
+ auth_cram_md5_client, /* client function */
+ NULL /* diagnostic function */
},
#endif
sizeof(auth_cyrus_sasl_options_block),
auth_cyrus_sasl_init, /* init function */
auth_cyrus_sasl_server, /* server function */
- NULL /* client function */
+ NULL, /* client function */
+ auth_cyrus_sasl_version_report /* diagnostic function */
},
#endif
sizeof(auth_dovecot_options_block),
auth_dovecot_init, /* init function */
auth_dovecot_server, /* server function */
- NULL /* client function */
+ NULL, /* client function */
+ NULL /* diagnostic function */
+ },
+#endif
+
+#ifdef AUTH_GSASL
+ {
+ US"gsasl", /* lookup name */
+ auth_gsasl_options,
+ &auth_gsasl_options_count,
+ &auth_gsasl_option_defaults,
+ sizeof(auth_gsasl_options_block),
+ auth_gsasl_init, /* init function */
+ auth_gsasl_server, /* server function */
+ NULL, /* client function */
+ auth_gsasl_version_report /* diagnostic function */
+ },
+#endif
+
+#ifdef AUTH_HEIMDAL_GSSAPI
+ {
+ US"heimdal_gssapi", /* lookup name */
+ auth_heimdal_gssapi_options,
+ &auth_heimdal_gssapi_options_count,
+ &auth_heimdal_gssapi_option_defaults,
+ sizeof(auth_heimdal_gssapi_options_block),
+ auth_heimdal_gssapi_init, /* init function */
+ auth_heimdal_gssapi_server, /* server function */
+ NULL, /* client function */
+ auth_heimdal_gssapi_version_report /* diagnostic function */
},
#endif
sizeof(auth_plaintext_options_block),
auth_plaintext_init, /* init function */
auth_plaintext_server, /* server function */
- auth_plaintext_client /* client function */
+ auth_plaintext_client, /* client function */
+ NULL /* diagnostic function */
},
#endif
sizeof(auth_spa_options_block),
auth_spa_init, /* init function */
auth_spa_server, /* server function */
- auth_spa_client /* client function */
+ auth_spa_client, /* client function */
+ NULL /* diagnostic function */
},
#endif
-{ US"", NULL, NULL, NULL, 0, NULL, NULL, NULL }
+#ifdef AUTH_TLS
+ {
+ US"tls", /* lookup name */
+ auth_tls_options,
+ &auth_tls_options_count,
+ &auth_tls_option_defaults,
+ sizeof(auth_tls_options_block),
+ auth_tls_init, /* init function */
+ auth_tls_server, /* server function */
+ NULL, /* client function */
+ NULL /* diagnostic function */
+ },
+#endif
+
+{ US"", NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL }
};
#include "transports/pipe.h"
#endif
+#ifdef EXPERIMENTAL_QUEUEFILE
+#include "transports/queuefile.h"
+#endif
+
#ifdef TRANSPORT_SMTP
#include "transports/smtp.h"
#endif
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 */
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;
}
* 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
-#if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2
-extern lookup_module_info pgsql_lookup_module_info;
+#if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2
+extern lookup_module_info ibase_lookup_module_info;
#endif
-#if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2
-extern lookup_module_info passwd_lookup_module_info;
+#if defined(LOOKUP_LDAP)
+extern lookup_module_info ldap_lookup_module_info;
#endif
-#if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2
-extern lookup_module_info oracle_lookup_module_info;
+#if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2
+extern lookup_module_info lsearch_lookup_module_info;
#endif
-#if defined(LOOKUP_NISPLUS) && LOOKUP_NISPLUS!=2
-extern lookup_module_info nisplus_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_MYSQL) && LOOKUP_MYSQL!=2
-extern lookup_module_info mysql_lookup_module_info;
+#if defined(LOOKUP_NISPLUS) && LOOKUP_NISPLUS!=2
+extern lookup_module_info nisplus_lookup_module_info;
#endif
-#if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2
-extern lookup_module_info lsearch_lookup_module_info;
+#if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2
+extern lookup_module_info oracle_lookup_module_info;
#endif
-#ifdef LOOKUP_LDAP
-extern lookup_module_info ldap_lookup_module_info;
+#if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2
+extern lookup_module_info passwd_lookup_module_info;
#endif
-#if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2
-extern lookup_module_info ibase_lookup_module_info;
+#if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2
+extern lookup_module_info pgsql_lookup_module_info;
#endif
-#if defined(LOOKUP_DSEARCH) && LOOKUP_DSEARCH!=2
-extern lookup_module_info dsearch_lookup_module_info;
+#if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2
+extern lookup_module_info redis_lookup_module_info;
#endif
-#if defined(LOOKUP_DNSDB) && LOOKUP_DNSDB!=2
-extern lookup_module_info dnsdb_lookup_module_info;
+#if defined(EXPERIMENTAL_LMDB)
+extern lookup_module_info lmdb_lookup_module_info;
#endif
-#if defined(LOOKUP_DBM) && LOOKUP_DBM!=2
-extern lookup_module_info dbmdb_lookup_module_info;
+#if defined(EXPERIMENTAL_SPF)
+extern lookup_module_info spf_lookup_module_info;
#endif
-#if defined(LOOKUP_CDB) && LOOKUP_CDB!=2
-extern lookup_module_info cdb_lookup_module_info;
+#if defined(LOOKUP_SQLITE) && LOOKUP_SQLITE!=2
+extern lookup_module_info sqlite_lookup_module_info;
+#endif
+#if defined(LOOKUP_TESTDB) && LOOKUP_TESTDB!=2
+extern lookup_module_info testdb_lookup_module_info;
+#endif
+#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;
struct dirent *ent;
- const pcre *regex_islookupmod = regex_must_compile(
- US"\\." DYNLIB_FN_EXT "$", FALSE, TRUE);
int countmodules = 0;
int moduleerrors = 0;
+#endif
struct lookupmodulestr *p;
if (lookup_list_init_done)
addlookupmodule(NULL, &pgsql_lookup_module_info);
#endif
+#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
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;
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);