SPF: better buld compatibility with OpenBSD
[exim.git] / src / src / lookups / spf.c
index ba5cf6b69d5f969075e8cce2c3a0a79d3ae03221..48d6ce3b5887d242d25212d68c4355db4d4e5c74 100644 (file)
@@ -1,5 +1,3 @@
-/* $Cambridge: exim/src/src/lookups/spf.c,v 1.1 2005/05/25 20:07:55 tom Exp $ */
-
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
  *
+ * Copyright (c) The Exim Maintainers 2016
  */
 
 #include "../exim.h"
 
-#ifndef EXPERIMENTAL_SPF
-static void dummy(int x) { dummy(x-1); }
+#ifndef SUPPORT_SPF
+static void dummy(int x);
+static void dummy2(int x) { dummy(x-1); }
+static void dummy(int x) { dummy2(x-1); }
 #else
 
 #include "lf_functions.h"
-#include "spf.h"
+#if !defined(HAVE_NS_TYPE) && defined(NS_INADDRSZ)
+# 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,13 +44,17 @@ 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,
-             uschar **result, uschar **errmsg, BOOL *do_cache) {
+static int
+spf_find(void *handle, uschar *filename, const uschar *keystring, int key_len,
+             uschar **result, uschar **errmsg, uint *do_cache)
+{
   SPF_server_t *spf_server = handle;
   SPF_request_t *spf_request = NULL;
   SPF_response_t *spf_response = NULL;
@@ -56,11 +65,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 +81,41 @@ int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len,
   return OK;
 }
 
-#endif /* EXPERIMENTAL_SPF */
+
+/*************************************************
+*         Version reporting entry point          *
+*************************************************/
+
+/* See local README for interface description. */
+
+#include "../version.h"
+
+void
+spf_version_report(FILE *f)
+{
+#ifdef DYNLOOKUP
+fprintf(f, "Library version: SPF: Exim version %s\n", EXIM_VERSION_STR);
+#endif
+}
+
+
+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 */
+  spf_version_report             /* version reporting */
+};
+
+#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 /* SUPPORT_SPF */