Add dynamic lookup support
[exim.git] / src / src / lookups / spf.c
index ba5cf6b69d5f969075e8cce2c3a0a79d3ae03221..2ca4bbab4b5bdb5484d779505e8c7a7c3941801b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/lookups/spf.c,v 1.1 2005/05/25 20:07:55 tom Exp $ */
+/* $Cambridge: exim/src/src/lookups/spf.c,v 1.3 2009/11/11 14:43:28 nm4 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -24,12 +24,14 @@ static void dummy(int x) { dummy(x-1); }
 #else
 
 #include "lf_functions.h"
-#include "spf.h"
+#ifndef HAVE_NS_TYPE
+#define HAVE_NS_TYPE
+#endif
 #include <spf2/spf.h>
 #include <spf2/spf_dns_resolv.h>
 #include <spf2/spf_dns_cache.h>
 
-void *spf_open(uschar *filename, uschar **errmsg) {
+static void *spf_open(uschar *filename, uschar **errmsg) {
   SPF_server_t *spf_server = NULL;
   spf_server = SPF_server_new(SPF_DNS_CACHE, 0);
   if (spf_server == NULL) {
@@ -39,12 +41,12 @@ void *spf_open(uschar *filename, uschar **errmsg) {
   return (void *) spf_server;
 }
 
-void spf_close(void *handle) {
+static void spf_close(void *handle) {
   SPF_server_t *spf_server = handle;
   if (spf_server) SPF_server_free(spf_server);
 }
 
-int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len,
+static int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len,
              uschar **result, uschar **errmsg, BOOL *do_cache) {
   SPF_server_t *spf_server = handle;
   SPF_request_t *spf_request = NULL;
@@ -56,11 +58,11 @@ int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len,
     return FAIL;
   }
 
-  if (SPF_request_set_ipv4_str(spf_request, filename)) {
+  if (SPF_request_set_ipv4_str(spf_request, CS filename)) {
     *errmsg = string_sprintf("invalid IP address '%s'", filename);
     return FAIL;
   }
-  if (SPF_request_set_env_from(spf_request, keystring)) {
+  if (SPF_request_set_env_from(spf_request, CS keystring)) {
     *errmsg = string_sprintf("invalid envelope from address '%s'", keystring);
     return FAIL;
   }
@@ -72,4 +74,22 @@ int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len,
   return OK;
 }
 
+static lookup_info _lookup_info = {
+  US"spf",                       /* lookup name */
+  0,                             /* not absfile, not query style */
+  spf_open,                      /* open function */
+  NULL,                          /* no check function */
+  spf_find,                      /* find function */
+  spf_close,                     /* close function */
+  NULL,                          /* no tidy function */
+  NULL                           /* no quoting function */
+};
+
+#ifdef DYNLOOKUP
+#define spf_lookup_module_info _lookup_module_info
+#endif
+
+static lookup_info *_lookup_list[] = { &_lookup_info };
+lookup_module_info spf_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 1 };
+
 #endif /* EXPERIMENTAL_SPF */