From f45f7d220e44477c2bc7d04735086e3d703f4b7f Mon Sep 17 00:00:00 2001
From: Guilherme Janczak <guilherme.janczak@yandex.com>
Date: Mon, 2 May 2022 13:42:48 +0000
Subject: [PATCH] use transparent strlcpy/strlcat fallback

Using _libbsd-overlay_ through pkg-config allows accessing
`strlcpy`/`strlcat` by including `<string.h>`, just like on BSD. This
simplifies compatibility code massively.
---
 INSTALL                       |  10 ++-
 README                        |   6 +-
 configure.ac                  | 127 +++++++++-------------------------
 libopendkim/Makefile.am       |   4 +-
 libopendkim/dkim-cache.c      |  10 ---
 libopendkim/dkim-canon.c      |  16 +----
 libopendkim/dkim-keys.c       |  16 +----
 libopendkim/dkim-test.c       |  12 +---
 libopendkim/dkim.c            |  46 +++++-------
 libopendkim/tests/t-test122.c |  10 ---
 libopendkim/tests/t-test123.c |  10 ---
 libopendkim/tests/t-test127.c |  10 ---
 libopendkim/tests/t-test131.c |  10 ---
 libopendkim/tests/t-test136.c |  10 ---
 libopendkim/tests/t-test142.c |  10 ---
 libopendkim/tests/t-test153.c |  10 ---
 libopendkim/tests/t-test42.c  |  10 ---
 libopendkim/tests/t-test55.c  |  10 ---
 libopendkim/tests/t-test56.c  |  10 ---
 libopendkim/tests/t-test57.c  |  10 ---
 libopendkim/tests/t-test73.c  |  12 +---
 libopendkim/tests/t-test84.c  |  10 ---
 libopendkim/tests/t-test88.c  |  10 ---
 libopendkim/util.c            |  12 +---
 miltertest/Makefile.am        |   4 +-
 miltertest/miltertest.c       |  40 ++++-------
 opendkim/Makefile.am          |   4 +-
 opendkim/config.c             |  12 +---
 opendkim/flowrate.c           |  10 ---
 opendkim/opendkim-ar.c        |  12 +---
 opendkim/opendkim-db.c        |  62 +++++++----------
 opendkim/opendkim-spam.c      |  10 ---
 opendkim/opendkim-testkey.c   |  10 ---
 opendkim/opendkim.c           | 106 +++++++++++++---------------
 opendkim/reputation.c         |  14 +---
 opendkim/stats.c              |  10 ---
 opendkim/test.c               |  12 +---
 opendkim/util.c               |  12 +---
 reprrd/reprrd.c               |  13 ++--
 stats/Makefile.am             |   4 +-
 stats/opendkim-importstats.c  |  10 ---
 41 files changed, 177 insertions(+), 569 deletions(-)

--- a/INSTALL
+++ b/INSTALL
@@ -50,7 +50,7 @@ doesn't find it, you will need to specif
 --with-db-libdir
 --with-db-lib
 		These provide a finer control over the location of BerkeleyDB
-		include, library path and libary name where the default 
+		include, library path and libary name where the default
 		locations of --with-db are not enough.
 
 --with-domain	Specifies the local domain name in use.  Used only for
@@ -129,9 +129,9 @@ doesn't find it, you will need to specif
 		/usr directories will be searched for the required includes
 		and libraries.
 
---with-unbound	Location of the Unbound DNSSEC capable asynchronous resolver 
+--with-unbound	Location of the Unbound DNSSEC capable asynchronous resolver
 		library and include file.
-                
+
 
 
 FEATURES
@@ -210,6 +210,10 @@ Steps to compiling the library and the m
     system.
 	./configure
 
+    Note: When creating a package, pass `--without-libbsd` to the configure
+    script. If it fails, the program depends on either of libbsd or libobsd
+    in your system.
+
 (5) Compile the package.
 	make
 
--- a/README
+++ b/README
@@ -59,8 +59,8 @@ o sendmail v8.13.0 (or later), or Postfi
 
 o Access to a working nameserver (required only for signature verification).
 
-o On Linux systems, either libbsd (BSD compatibility library) or some other
-  library that provides strlcat() and strlcpy().
+o If `./configure --without-libbsd` fails, either of libbsd or libobsd are
+  required. This happens on glibc, for instance.
 
 o If you wish to interface the filter with SQL databases, or store statistical
   information in a database, OpenDBX v1.3.7 or later is required.
@@ -229,7 +229,7 @@ Other OpenDKIM issues:
 
  Report any bugs to the email address opendkim-users@lists.opendkim.org or to
  the sourceforge issue trackers accessible at:
- 
+
  https://sourceforge.net/p/opendkim/_list/tickets
 
 
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 #
 # Copyright (c) 2009-2015, The Trusted Domain Project.  All rights reserved.
-# 
+#
 
 #
 # Setup
@@ -47,13 +47,13 @@ AC_CONFIG_MACRO_DIR([m4])
 
 #
 # Hexadecimal version, for use in generating dkim.h
-# 
+#
 HEX_VERSION=$(printf %08x $(( ((VERSION_RELEASE << 8 | VERSION_MAJOR_REV) << 8 | VERSION_MINOR_REV) << 8| VERSION_PATCH )))
 AC_SUBST([HEX_VERSION])
 
 #
 # library version, passed to libtool
-# 
+#
 LIBOPENDKIM_VERSION_INFO=$(printf %d:%d:%d LIBVERSION_CURRENT LIBVERSION_REVISION LIBVERSION_AGE)
 AC_SUBST([LIBOPENDKIM_VERSION_INFO])
 
@@ -130,11 +130,11 @@ AC_CHECK_TYPES([useconds_t])
 # See if libopendkim will need -lresolv
 #
 dnscheck='
-#include "confdefs.h" 
+#include "confdefs.h"
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/nameser.h>
-#include <resolv.h> 
+#include <resolv.h>
 int main() {
 res_mkquery (0, 0, 0, 0, 0, 0, 0, 0, 0);
 dn_expand (0, 0, 0, 0, 0);
@@ -165,7 +165,7 @@ $dnscheck
 	LIBS="$saved_LIBS"
 ])
 AC_SUBST([LIBRESOLV])
- 
+
 #
 # Checks for header files
 #
@@ -196,78 +196,17 @@ AC_FUNC_REALLOC
 
 AC_CHECK_FUNCS([dup2 endpwent getcwd gethostname gethostbyname getaddrinfo gethostbyname2 gettimeofday isascii memchr memmove memset regcomp select socket strcasecmp strchr strdup strerror strncasecmp strrchr strstr strtol strtoul strtoull realpath strsep])
 
-bsdstrl_h_found="no"
-strl_found="no"
-libstrl_found="no"
-strl_h_found="no"
-
-AC_CHECK_HEADERS([bsd/string.h], [bsdstrl_h_found="yes"])
-
-AC_CHECK_FUNCS([strlcat strlcpy], [strl_found="yes"],
-               [
-		saved_LIBS="$LIBS"
-		LIBS="$outer_LIBS"
-		AC_SEARCH_LIBS([strlcat],
-		               [bsd strl],
-		               [libstrl_found="yes"],
-		               [strl_found="no"])
-		AC_SEARCH_LIBS([strlcpy],
-		               [bsd strl],
-		               [libstrl_found="yes"],
-		               [strl_found="no"])
-		STRL_LIBS="$LIBS"
-		LIBS="$saved_LIBS"
-               ])
-
-if test x"$libstrl_found" = x"yes"
-then
-	LIBS="$LIBS $STRL_LIBS"
-fi
-
-# we need something above to have worked
-if test x"$strl_found" != x"yes" -a x"$libstrl_found" != x"yes"
-then
-	AC_MSG_ERROR(no strlcpy/strlcat found)
-fi
-
-AC_CHECK_HEADERS([strl.h], [strl_h_found="yes"])
-if test x"$strl_h_found" != x"yes"
-then
-	strldirs="/usr/local/include /usr/include"
-
-	for d in $strldirs
-	do
-		AC_MSG_CHECKING([for strl.h in $d/strl])
-		if test -f $d/strl/strl.h
-		then
-			unset ac_cv_header_strl_h
-			saved_CPPFLAGS="$CPPFLAGS"
-			CPPFLAGS="$CPPFLAGS -I$d/strl"
-			AC_CHECK_HEADERS([strl.h], [strl_h_found="yes"])
-			CPPFLAGS="$saved_CPPFLAGS"
-		fi
-
-		if test x"$strl_h_found" = x"yes"
-		then
-			CPPFLAGS="$CPPFLAGS -I$d/strl"
-			break
-		fi
-	done
-fi
-
-# we need to include <strl.h> if an installed strl.h was found and no
-# bsd/string.h was found
-if test x"$strl_h_found" = x"yes" -a x"$bsdstrl_h_found" = x"no"
-then
-	AC_DEFINE([USE_STRL_H], 1,
-	          [Define to 1 if you need to include <strl.h> to get the `strlcat()' and `strlcpy()' functions.])
-fi
-
-if test x"$bsdstrl_h_found" = x"yes"
-then
-	AC_DEFINE([USE_BSD_H], 1,
-	          [Define to 1 if you need to include <bsd/string.h> to get the `strlcat()' and `strlcpy()' functions.])
-fi
+AC_ARG_WITH([libbsd], AS_HELP_STRING([--without-libbsd],
+                                     [Error when BSD functions are not found]))
+AC_CHECK_FUNCS([strlcpy strlcat],, [LIBBSD_NEEDED=yes])
+AS_IF([test "x$LIBBSD_NEEDED" = "xyes"], [
+      AS_IF([test "x$with_libbsd" = "xno"], [
+            AC_MSG_ERROR([BSD functions not found and --without-libbsd was used])
+      ])
+      PKG_CHECK_MODULES([LIBBSD], [libbsd-overlay],,
+				        [AC_MSG_ERROR([BSD functions not found,
+                                       libbsd is required])])
+])
 
 #
 # Checks for structure members
@@ -446,7 +385,7 @@ fi
 
 #
 # test coverage/profiling stuff
-# 
+#
 AC_ARG_ENABLE([codecoverage],
 	AS_HELP_STRING([--enable-codecoverage],
 	               [include code coverage/profiling code]))
@@ -574,7 +513,7 @@ AM_CONDITIONAL(GPROF_FILENAMES, test x"$
 
 #
 # opendkim
-# 
+#
 AC_ARG_ENABLE([filter],
               AS_HELP_STRING([--disable-filter],
                              [do not compile the opendkim filter]),
@@ -732,7 +671,7 @@ then
 
 		#if GNUTLS_VERSION_NUMBER < 0x020b07
 		# error GnuTLS 2.11.7 or later required
-		#endif 
+		#endif
 		int main()
 		{
 			return 0;
@@ -1009,7 +948,7 @@ AC_SUBST(LIBMILTER_LIBS)
 
 #
 # librrd
-# 
+#
 AC_ARG_WITH([librrd],
             AS_HELP_STRING([--with-librrd],
                            [location of librrd includes and library]),
@@ -1023,7 +962,7 @@ fi
 
 if test \( x"$librrdpath" = x"auto" -o x"$librrdpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
 then
-	PKG_CHECK_MODULES([RRDTOOL], [librrd], 
+	PKG_CHECK_MODULES([RRDTOOL], [librrd],
 	                  [
                           	librrd_found="yes"
 	                  ],
@@ -1085,7 +1024,7 @@ AC_SUBST(RRDTOOL_LIBS)
 
 #
 # libmemcached
-# 
+#
 AC_ARG_WITH([libmemcached],
             AS_HELP_STRING([--with-libmemcached],
                            [location of libmemcached includes and library]),
@@ -1095,7 +1034,7 @@ libmemcache_found="no"
 
 if test \( x"$libmcdpath" = x"auto" -o x"$libmcdpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
 then
-	PKG_CHECK_MODULES([LIBMEMCACHED], [libmemcached >= 0.36], 
+	PKG_CHECK_MODULES([LIBMEMCACHED], [libmemcached >= 0.36],
 	                  [
                           	libmemcache_found="yes"
 	                  	LIBMEMCACHED_INCDIRS="$LIBMEMCACHED_CFLAGS"
@@ -1159,7 +1098,7 @@ main()
 	return 0;
 }
 		])],
-		AC_MSG_RESULT([ok]), 
+		AC_MSG_RESULT([ok]),
 		AC_MSG_ERROR([libmemcached version 0.36 or later required]))
 fi
 
@@ -1383,7 +1322,7 @@ if test \(  x"$trepath" = x"auto" -o x"$
 then
         PKG_CHECK_MODULES([LIBTRE], [tre >= 0.8.0], [tre_found="yes"],
 	[
-        	PKG_CHECK_MODULES([LIBTRE], [tre >= 0.7.5], 
+        	PKG_CHECK_MODULES([LIBTRE], [tre >= 0.7.5],
 		[
 			tre_found="yes"
 			AC_DEFINE([TRE_PRE_080], 1,
@@ -1626,7 +1565,7 @@ main()
 	return 0;
 }
 				])],
-				AC_MSG_RESULT([ok]), 
+				AC_MSG_RESULT([ok]),
 				AC_MSG_ERROR([Lua version 5.1 or later required]))
 	CPPFLAGS="$saved_CPPFLAGS"
 	AC_DEFINE([USE_LUA], 1, [support for Lua scripting])
@@ -1836,7 +1775,7 @@ main()
 	return 0;
 }
 				])],
-				AC_MSG_RESULT([ok]), 
+				AC_MSG_RESULT([ok]),
 				AC_MSG_ERROR([OpenLDAP version 2.1.3 or later required]))
 	CPPFLAGS="$saved_CPPFLAGS"
 	AC_DEFINE([USE_LDAP], 1, [OpenLDAP support for datasets enabled])
@@ -2086,7 +2025,7 @@ fi
 
 #
 # reputation requires libjansson
-# 
+#
 
 AC_ARG_WITH([libjansson],
             AS_HELP_STRING([--with-libjansson],
@@ -2418,7 +2357,7 @@ AC_DEFINE_UNQUOTED([LIBOPENDKIM_FEATURE_
 
 #
 # setup for testing
-# 
+#
 
 AC_ARG_ENABLE([live-testing],
               AS_HELP_STRING([--disable-live-testing],
@@ -2428,7 +2367,7 @@ AM_CONDITIONAL(LIVE_TESTS, test x"$live_
 
 #
 # specify test socket
-# 
+#
 
 AC_ARG_WITH([test-socket],
             AS_HELP_STRING([--with-test-socket],
@@ -2535,7 +2474,7 @@ AC_SUBST(LIBERL_LIBS)
 
 CPPFLAGS="$CPPFLAGS -DCONFIG_BASE=\\\"$sysconfdir\\\""
 
-test "x$prefix" = xNONE && prefix=$ac_default_prefix 
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
 SYSCONFDIR=`eval echo "$sysconfdir"`
 AC_SUBST([SYSCONFDIR])
 
@@ -2645,7 +2584,7 @@ AC_OUTPUT([	Makefile
 		miltertest/Makefile
 		opendkim/Makefile opendkim/opendkim.8 opendkim/opendkim-genkey
 			opendkim/opendkim-genkey.8 opendkim/opendkim-genzone.8
-			opendkim/opendkim-lua.3 
+			opendkim/opendkim-lua.3
 			opendkim/opendkim-testkey.8 opendkim/opendkim-stats.8
 			opendkim/opendkim-testmsg.8 opendkim/opendkim.conf.5
 			opendkim/opendkim.conf.simple
--- a/libopendkim/Makefile.am
+++ b/libopendkim/Makefile.am
@@ -9,9 +9,9 @@ LDADD = ./libopendkim.la
 
 lib_LTLIBRARIES = libopendkim.la
 libopendkim_la_SOURCES = base32.c base64.c dkim-atps.c dkim-cache.c dkim-canon.c dkim-dns.c dkim-keys.c dkim-mailparse.c dkim-report.c dkim-tables.c dkim-test.c dkim-util.c dkim.c util.c base64.h dkim-cache.h dkim-canon.h dkim-dns.h dkim-internal.h dkim-keys.h dkim-mailparse.h dkim-report.h dkim-tables.h dkim-test.h dkim-types.h dkim-util.h dkim.h util.h
-libopendkim_la_CPPFLAGS = $(LIBCRYPTO_CPPFLAGS)
+libopendkim_la_CPPFLAGS = $(LIBCRYPTO_CPPFLAGS) $(LIBBSD_CFLAGS)
 libopendkim_la_CFLAGS = $(LIBCRYPTO_INCDIRS) $(LIBOPENDKIM_INC) $(COV_CFLAGS)
-libopendkim_la_LDFLAGS = -no-undefined  $(LIBCRYPTO_LIBDIRS) $(COV_LDFLAGS) -version-info $(LIBOPENDKIM_VERSION_INFO)
+libopendkim_la_LDFLAGS = -no-undefined  $(LIBCRYPTO_LIBDIRS) $(COV_LDFLAGS) -version-info $(LIBOPENDKIM_VERSION_INFO) $(LIBBSD_LIBS)
 libopendkim_la_LIBADD = $(LIBOPENDKIM_LIBS) $(LIBCRYPTO_LDADD) $(COV_LIBADD)
 if !ALL_SYMBOLS
 libopendkim_la_DEPENDENCIES = symbols.map
--- a/libopendkim/dkim-cache.c
+++ b/libopendkim/dkim-cache.c
@@ -29,16 +29,6 @@
 #include "dkim-internal.h"
 #include "dkim-cache.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* limits, macros, etc. */
 #define	BUFRSZ			1024
 #define DB_MODE			(S_IRUSR|S_IWUSR)
--- a/libopendkim/dkim-canon.c
+++ b/libopendkim/dkim-canon.c
@@ -45,16 +45,6 @@
 #include "dkim-util.h"
 #include "util.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* definitions */
 #define	CRLF	(u_char *) "\r\n"
 #define	SP	(u_char *) " "
@@ -379,7 +369,7 @@ dkim_canon_header_string(struct dkim_dst
 
 				tmp = tmpbuf;
 			}
-			
+
 			if (*p == ':')
 			{
 				p++;
@@ -681,7 +671,7 @@ dkim_canon_init(DKIM *dkim, _Bool tmp, _
 				DKIM_FREE(dkim, sha);
 				return DKIM_STAT_INTERNAL;
 			}
-				
+
 			if (tmp)
 			{
 				status = dkim_tmpfile(dkim, &fd, keep);
@@ -1512,7 +1502,7 @@ dkim_canon_signature(DKIM *dkim, struct
 		tmphdr.hdr_next = NULL;
 		if (cur->canon_canon == DKIM_CANON_RELAXED)
 			dkim_lowerhdr(tmphdr.hdr_text);
-		
+
 		/* canonicalize the signature */
 		status = dkim_canon_header(dkim, cur, &tmphdr, FALSE);
 		if (status != DKIM_STAT_OK)
--- a/libopendkim/dkim-keys.c
+++ b/libopendkim/dkim-keys.c
@@ -29,16 +29,6 @@
 #include "dkim-test.h"
 #include "util.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* prototypes */
 extern void dkim_error __P((DKIM *, const char *, ...));
 
@@ -156,7 +146,7 @@ dkim_get_key_dns(DKIM *dkim, DKIM_SIGINF
 			dkim_error(dkim, "'%s' query failed", qname);
 			return DKIM_STAT_KEYFAIL;
 		}
-	
+
 		if (lib->dkiml_dns_callback == NULL)
 		{
 			timeout.tv_sec = dkim->dkim_timeout;
@@ -240,7 +230,7 @@ dkim_get_key_dns(DKIM *dkim, DKIM_SIGINF
 		/* copy it first */
 		(void) dn_expand((unsigned char *) &ansbuf, eom, cp,
 		                 (char *) qname, sizeof qname);
- 
+
 		if ((n = dn_skipname(cp, eom)) < 0)
 		{
 			dkim_error(dkim, "'%s' reply corrupt", qname);
@@ -420,7 +410,7 @@ dkim_get_key_dns(DKIM *dkim, DKIM_SIGINF
 **  	and must be set prior to use of this function.  Failing to do
 **  	so will cause this function to return DKIM_STAT_KEYFAIL every time.
 **  	The file should contain lines of the form:
-** 
+**
 **  		<selector>._domainkey.<domain> <space> key-data
 **
 **  	Case matching on the left is case-sensitive, but libopendkim already
--- a/libopendkim/dkim-test.c
+++ b/libopendkim/dkim-test.c
@@ -36,16 +36,6 @@
 #include "dkim-util.h"
 #include "dkim-test.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* definitions */
 #define	TESTTTL			300
 #define MAXPACKET		8192
@@ -443,7 +433,7 @@ dkim_test_key(DKIM_LIB *lib, char *selec
 			}
 			return -1;
 		}
-	
+
 		rsa->rsa_keysize = RSA_size(rsa->rsa_rsa);
 		rsa->rsa_pad = RSA_PKCS1_PADDING;
 
--- a/libopendkim/dkim.c
+++ b/libopendkim/dkim.c
@@ -91,16 +91,6 @@
 #include "util.h"
 #include "base64.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* prototypes */
 void dkim_error __P((DKIM *, const char *, ...));
 
@@ -264,7 +254,7 @@ const u_char *dkim_required_signhdrs[] =
 /* ========================= PRIVATE SECTION ========================= */
 
 /*
-**  DKIM_SET_FREE -- destroy a DKIM_SET 
+**  DKIM_SET_FREE -- destroy a DKIM_SET
 **
 **  Parameters:
 **  	dkim -- DKIM context
@@ -744,7 +734,7 @@ dkim_process_set(DKIM *dkim, dkim_set_t
 			}
 		}
 		break;
-		
+
 	  case DKIM_SETTYPE_SIGNATURE:
 		/* make sure required stuff is here */
 		if (dkim_param_get(set, (u_char *) "s") == NULL ||
@@ -881,7 +871,7 @@ dkim_process_set(DKIM *dkim, dkim_set_t
 		}
 
 		break;
-			
+
 	  default:
 		assert(0);
 	}
@@ -1081,7 +1071,7 @@ dkim_privkey_load(DKIM *dkim)
 	}
 #endif /* USE_GNUTLS */
 
-#ifdef USE_GNUTLS 
+#ifdef USE_GNUTLS
 	status = gnutls_x509_privkey_init(&rsa->rsa_key);
 	if (status != GNUTLS_E_SUCCESS)
 	{
@@ -2386,7 +2376,7 @@ dkim_gensighdr(DKIM *dkim, DKIM_SIGINFO
 		format = "v=%s;%sa=%s;%sc=%s/%s;%sd=%s;%ss=%s;%st=%llu";
 	else if (sizeof(sig->sig_timestamp) == sizeof(unsigned long))
 		format = "v=%s;%sa=%s;%sc=%s/%s;%sd=%s;%ss=%s;%st=%lu";
-	else 
+	else
 		format = "v=%s;%sa=%s;%sc=%s/%s;%sd=%s;%ss=%s;%st=%u";
 
 	(void) dkim_dstring_printf(dstr, format,
@@ -3141,7 +3131,7 @@ dkim_headercheck(DKIM *dkim)
 
 /*
 **  DKIM_EOH_SIGN -- declare end-of-headers; prepare for signing
-** 
+**
 **  Parameters:
 **  	dkim -- DKIM handle
 **
@@ -3289,7 +3279,7 @@ dkim_eoh_sign(DKIM *dkim)
 
 /*
 **  DKIM_EOH_VERIFY -- declare end-of-headers; set up verification
-** 
+**
 **  Parameters:
 **  	dkim -- DKIM handle
 **
@@ -4273,7 +4263,7 @@ dkim_init(void *(*caller_mallocf)(void *
 	libhandle->dkiml_skipre = FALSE;
 	libhandle->dkiml_malloc = caller_mallocf;
 	libhandle->dkiml_free = caller_freef;
-	strlcpy((char *) libhandle->dkiml_tmpdir, (char *) td, 
+	strlcpy((char *) libhandle->dkiml_tmpdir, (char *) td,
 	        sizeof libhandle->dkiml_tmpdir);
 	libhandle->dkiml_flags = DKIM_LIBFLAGS_DEFAULT;
 	libhandle->dkiml_timeout = DEFTIMEOUT;
@@ -4305,7 +4295,7 @@ dkim_init(void *(*caller_mallocf)(void *
 	libhandle->dkiml_dns_start = dkim_res_query;
 	libhandle->dkiml_dns_cancel = dkim_res_cancel;
 	libhandle->dkiml_dns_waitreply = dkim_res_waitreply;
-	
+
 #define FEATURE_INDEX(x)	((x) / (8 * sizeof(u_int)))
 #define FEATURE_OFFSET(x)	((x) % (8 * sizeof(u_int)))
 #define FEATURE_ADD(lib,x)	(lib)->dkiml_flist[FEATURE_INDEX((x))] |= (1 << FEATURE_OFFSET(x))
@@ -4369,7 +4359,7 @@ dkim_close(DKIM_LIB *lib)
 
 	if (lib->dkiml_skipre)
 		(void) regfree(&lib->dkiml_skiphdrre);
-	
+
 	if (lib->dkiml_signre)
 		(void) regfree(&lib->dkiml_hdrre);
 
@@ -4386,7 +4376,7 @@ dkim_close(DKIM_LIB *lib)
 
 	if (lib->dkiml_dns_close != NULL && lib->dkiml_dns_service != NULL)
 		lib->dkiml_dns_close(lib->dkiml_dns_service);
-	
+
 	free((void *) lib);
 
 #ifndef USE_GNUTLS
@@ -6206,7 +6196,7 @@ dkim_header(DKIM *dkim, u_char *hdr, siz
 
 /*
 **  DKIM_EOH -- declare end-of-headers
-** 
+**
 **  Parameters:
 **  	dkim -- DKIM handle
 **
@@ -6449,7 +6439,7 @@ dkim_chunk(DKIM *dkim, u_char *buf, size
 				dkim->dkim_chunksm = 0;
 			}
 			break;
-			
+
 		  case 2:
 			if (DKIM_ISLWSP(*p))
 			{
@@ -6479,7 +6469,7 @@ dkim_chunk(DKIM *dkim, u_char *buf, size
 				break;
 			}
 			/* FALLTHROUGH */
-				
+
 		  case 3:
 			if (*p == '\n')
 			{
@@ -6898,7 +6888,7 @@ dkim_getsighdr_d(DKIM *dkim, size_t init
 						                  n);
 						x += n;
 						len += n;
-						
+
 					}
 				}
 				else
@@ -7015,7 +7005,7 @@ dkim_sig_hdrsigned(DKIM_SIGINFO *sig, u_
 			if (c1 == NULL)
 			{
 				start = hdrlist;
-				len = c2 - start; 
+				len = c2 - start;
 			}
 			else
 			{
@@ -7087,7 +7077,7 @@ dkim_sig_setdnssec(DKIM_SIGINFO *sig, in
 {
 	assert(sig != NULL);
 
-	switch (dnssec_status) 
+	switch (dnssec_status)
 	{
 	  case DKIM_DNSSEC_BOGUS:
 	  case DKIM_DNSSEC_INSECURE:
@@ -8923,7 +8913,7 @@ dkim_add_querymethod(DKIM *dkim, const c
 		           strlen(type) + 1);
 		return DKIM_STAT_NORESOURCE;
 	}
-		
+
 	if (options != NULL)
 	{
 		q->qm_options = dkim_strdup(dkim, tmp, 0);
--- a/libopendkim/tests/t-test122.c
+++ b/libopendkim/tests/t-test122.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	GIBBERISHLEN	(sizeof(GIBBERISH) - 1)
--- a/libopendkim/tests/t-test123.c
+++ b/libopendkim/tests/t-test123.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	GIBBERISHLEN	(sizeof(GIBBERISH) - 1)
--- a/libopendkim/tests/t-test127.c
+++ b/libopendkim/tests/t-test127.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	MAXMSGSIZE	16384
--- a/libopendkim/tests/t-test131.c
+++ b/libopendkim/tests/t-test131.c
@@ -23,16 +23,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	NULLBH		"bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="
--- a/libopendkim/tests/t-test136.c
+++ b/libopendkim/tests/t-test136.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define SIG2 "v=1; a=rsa-sha1; c=relaxed/relaxed; d=example.com; s=test;\r\n\tt=1172620939; bh=Z9ONHHsBrKN0pbfrOu025VfbdR4=;\r\n\th=Received:Received:Received:From:To:Date:Subject:Message-ID;\r\n\tb=Jf+j2RDZRkpIF1KaL5ByhHFPWj5RMeX5764IVlwIc11equjQND51K9FfL5pyjXvwj\r\n\t FoFPW0PGJb3liej6iDDEHgYpXR4p5qqlGx/C1Q9gf/MQN/Xlkv6ZXgR38QnWAfZxh5\r\n\t N1f5xUg+SJb5yBDoXklG62IRdia1Hq9MuiGumrGM="
--- a/libopendkim/tests/t-test142.c
+++ b/libopendkim/tests/t-test142.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 #define	MAXMSGSIZE	16384
 
--- a/libopendkim/tests/t-test153.c
+++ b/libopendkim/tests/t-test153.c
@@ -18,16 +18,6 @@
 # include <gnutls/gnutls.h>
 #endif /* USE_GNUTLS */
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* libopendkim includes */
 #include "../dkim.h"
 #include "t-testdata.h"
--- a/libopendkim/tests/t-test42.c
+++ b/libopendkim/tests/t-test42.c
@@ -26,16 +26,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define SIG2 "v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=test;\r\n\tt=1172620939; bh=yHBAX+3IwxTZIynBuB/5tlsBInJq9n8qz5fgAycHi80=;\r\n\th=Received:Received:Received:From:To:Date:Subject:Message-ID; b=Y3y\r\n\tVeA3WZdCZl1sGuOZNC3BBRhtGCOExkZdw5xQoGPvSX/q6AC1SAJvOUWOri95AZAUGs0\r\n\t/bIDzzt23ei9jc+rptlavrl/5ijMrl6ShmvkACk6It62KPkJcDpoGfi5AZkrfX1Ou/z\r\n\tqGg5xJX86Kqd7FgNolMg7PbfyWliK2Yb84="
--- a/libopendkim/tests/t-test55.c
+++ b/libopendkim/tests/t-test55.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	GIBBERISHLEN	(sizeof(GIBBERISH) - 1)
--- a/libopendkim/tests/t-test56.c
+++ b/libopendkim/tests/t-test56.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	GIBBERISHLEN	(sizeof(GIBBERISH) - 1)
--- a/libopendkim/tests/t-test57.c
+++ b/libopendkim/tests/t-test57.c
@@ -24,16 +24,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define SIG2 "v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=test;\r\n\tt=1172620939; bh=TRy6u0KYixKENCPL95G1Y1uwclQ9rWthX6rFgE7gWb8=;\r\n\th=Received:Received:Received:From:To:Date:Subject:Message-ID;\r\n\tb=aMDMwcz08Na0zYLrEZnUMBUipMh3blE+pWiBSvX+t2ynaDUGTqd27xuR5JddL9y1T\r\n\t 6h0LkUMIcijsPBWa1WWfKL23QceksV75Y1/Tt6gmVi3SdVAoJbbZImrOaAQ3YQAn64\r\n\t dp1vI0Z8gSashYlwy+7gtmVSLAj/fpcAF6yNDPuE="
--- a/libopendkim/tests/t-test73.c
+++ b/libopendkim/tests/t-test73.c
@@ -27,16 +27,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	BUFRSZ		1024
 #define	MAXADDRESS	256
 #define	MAXHEADER	4096
@@ -85,7 +75,7 @@ stub_dns_waitreply(void *srv, void *qh,
 
 	memset(&newhdr, '\0', sizeof newhdr);
 	memset(&dnptrs, '\0', sizeof dnptrs);
-		
+
 	newhdr.qdcount = htons(1);
 	newhdr.ancount = htons(1);
 	newhdr.rcode = NOERROR;
--- a/libopendkim/tests/t-test84.c
+++ b/libopendkim/tests/t-test84.c
@@ -26,16 +26,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	SIG1 "v=1; a=rsa-sha256; c=relaxed/simple; d=sendmail.com; s=test; t=1172620939; i=@eng.sendmail.com; bh=yHBAX+3IwxTZIynBuB/5tlsBInJq9n8qz5fgAycHi80=; h=Received:Received:Received:From:To:Date:Subject:Message-ID; b=r5DyHh4oxZcCBcIzpKTnEk6yvWDI9g9DI+UUIwl2ZAcZ6P0BbsOQ8MEjmUdwlZitqoFLa25/Re8/rC5kHasOb3vs0T37vkasoTb1rGR7y/bcMnY4hRkPAyC7NoLoTjneJMTQ/WQYnZe3DJ8lVuDRYvY9BeV2EjH8kiGsa9QttiA="
--- a/libopendkim/tests/t-test88.c
+++ b/libopendkim/tests/t-test88.c
@@ -22,16 +22,6 @@
 #include "../dkim.h"
 #include "t-testdata.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #define	MAXHEADER	4096
 
 #define	MAXMSGSIZE	16384
--- a/libopendkim/util.c
+++ b/libopendkim/util.c
@@ -27,16 +27,6 @@
 #include "dkim-internal.h"
 #include "util.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #if defined(__RES) && (__RES >= 19940415)
 # define RES_UNC_T		char *
 #else /* __RES && __RES >= 19940415 */
@@ -198,7 +188,7 @@ dkim_lowerhdr(unsigned char *str)
 
 /*
 **  DKIM_HEXCHAR -- translate a hexadecimal character
-**  
+**
 **  Parameters:
 **  	c -- character to translate
 **
--- a/miltertest/Makefile.am
+++ b/miltertest/Makefile.am
@@ -10,8 +10,8 @@ if LUA
 bin_PROGRAMS = miltertest
 
 miltertest_SOURCES = miltertest.c
-miltertest_CPPFLAGS = -I$(srcdir)/../libopendkim $(LIBMILTER_INCDIRS) $(LIBLUA_INCDIRS)
-miltertest_LDFLAGS = ../libopendkim/libopendkim.la $(LIBLUA_LIBDIRS)
+miltertest_CPPFLAGS = -I$(srcdir)/../libopendkim $(LIBMILTER_INCDIRS) $(LIBLUA_INCDIRS) $(LIBBSD_CFLAGS)
+miltertest_LDFLAGS = ../libopendkim/libopendkim.la $(LIBLUA_LIBDIRS) $(LIBBSD_LIBS)
 miltertest_LDADD = $(LIBLUA_LIBS) $(LIBNSL_LIBS)
 
 man_MANS = miltertest.8
--- a/miltertest/miltertest.c
+++ b/miltertest/miltertest.c
@@ -37,16 +37,6 @@
 /* libopendkim includes */
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* Lua includes */
 #include <lua.h>
 #include <lualib.h>
@@ -410,7 +400,7 @@ mt_eom_request(struct mt_context *ctx, c
 **  	cmd -- milter command received (returned)
 ** 	buf -- where to write data
 **  	buflen -- bytes available at "buf" (updated)
-** 
+**
 **  Return value:
 **  	TRUE iff successful.
 */
@@ -618,7 +608,7 @@ mt_assert_state(struct mt_context *ctx,
 			if (verbose > 0)
 			{
 				fprintf(stdout,
-				        "%s: filter returned status %d to option negotiation on fd %d\n", 
+				        "%s: filter returned status %d to option negotiation on fd %d\n",
 				        progname, rcmd, ctx->ctx_fd);
 			}
 
@@ -679,7 +669,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to connection information on fd %d\n", 
+					        "%s: filter returned status %d to connection information on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -722,7 +712,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to HELO on fd %d\n", 
+					        "%s: filter returned status %d to HELO on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -765,7 +755,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to MAIL on fd %d\n", 
+					        "%s: filter returned status %d to MAIL on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -808,7 +798,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to RCPT on fd %d\n", 
+					        "%s: filter returned status %d to RCPT on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -848,7 +838,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to DATA on fd %d\n", 
+					        "%s: filter returned status %d to DATA on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -894,7 +884,7 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to header on fd %d\n", 
+					        "%s: filter returned status %d to header on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
 
@@ -933,10 +923,10 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to EOH on fd %d\n", 
+					        "%s: filter returned status %d to EOH on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
-	
+
 				ctx->ctx_state = STATE_DEAD;
 			}
 		}
@@ -973,10 +963,10 @@ mt_assert_state(struct mt_context *ctx,
 				if (verbose > 0)
 				{
 					fprintf(stdout,
-					        "%s: filter returned status %d to body on fd %d\n", 
+					        "%s: filter returned status %d to body on fd %d\n",
 					        progname, rcmd, ctx->ctx_fd);
 				}
-	
+
 				ctx->ctx_state = STATE_DEAD;
 			}
 		}
@@ -1623,7 +1613,7 @@ mt_disconnect(lua_State *l)
 {
 	_Bool polite = TRUE;
 	int top;
-	
+
 	struct mt_context *ctx;
 
 	assert(l != NULL);
@@ -1820,7 +1810,7 @@ mt_negotiate(lua_State *l)
 		if (verbose > 0)
 		{
 			fprintf(stdout,
-			        "%s: filter returned status %d to option negotiation on fd %d\n", 
+			        "%s: filter returned status %d to option negotiation on fd %d\n",
 			        progname, rcmd, ctx->ctx_fd);
 		}
 
@@ -3828,7 +3818,7 @@ mt_getheader(lua_State *l)
 
 /*
 **  USAGE -- print usage message
-** 
+**
 **  Parameters:
 **  	Not now.  Maybe later.
 **
--- a/opendkim/Makefile.am
+++ b/opendkim/Makefile.am
@@ -25,8 +25,8 @@ sbin_PROGRAMS += opendkim
 opendkim_SOURCES = opendkim.c opendkim.h opendkim-ar.c opendkim-ar.h opendkim-arf.c opendkim-arf.h opendkim-config.h opendkim-crypto.c opendkim-crypto.h opendkim-db.c opendkim-db.h opendkim-dns.c opendkim-dns.h opendkim-lua.c opendkim-lua.h config.c config.h flowrate.c flowrate.h reputation.c reputation.h stats.c stats.h test.c test.h util.c util.h
 opendkim_CC = $(PTHREAD_CC)
 opendkim_CFLAGS = $(PTHREAD_CFLAGS) $(LIBCRYPTO_CFLAGS) $(COV_CFLAGS)
-opendkim_CPPFLAGS = -I$(srcdir)/../libopendkim $(LIBCRYPTO_CPPFLAGS)
-opendkim_LDFLAGS = $(LIBCRYPTO_LIBDIRS) $(LIBMILTER_LIBDIRS) $(PTHREAD_CFLAGS) $(COV_LDFLAGS)
+opendkim_CPPFLAGS = -I$(srcdir)/../libopendkim $(LIBCRYPTO_CPPFLAGS) $(LIBBSD_CFLAGS)
+opendkim_LDFLAGS = $(LIBCRYPTO_LIBDIRS) $(LIBMILTER_LIBDIRS) $(PTHREAD_CFLAGS) $(COV_LDFLAGS) $(LIBBSD_LIBS)
 opendkim_LDADD = ../libopendkim/libopendkim.la $(LIBMILTER_LIBS) $(LIBCRYPTO_LIBS) $(PTHREAD_LIBS) $(COV_LIBADD) $(LIBRESOLV)
 if USE_DB_OPENDKIM
 opendkim_CPPFLAGS += $(LIBDB_INCDIRS)
--- a/opendkim/config.c
+++ b/opendkim/config.c
@@ -22,16 +22,6 @@
 /* libopendkim includes */
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "config.h"
 
@@ -304,7 +294,7 @@ config_load_level(char *file, struct con
 						size_t newlen;
 
 						oldlen = strlen(*deprecated);
-						newlen = oldlen + 2 + 
+						newlen = oldlen + 2 +
 						         strlen(def[n].cd_name);
 						new = realloc(*deprecated,
 						              newlen);
--- a/opendkim/flowrate.c
+++ b/opendkim/flowrate.c
@@ -16,16 +16,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "flowrate.h"
 #include "opendkim.h"
--- a/opendkim/opendkim-ar.c
+++ b/opendkim/opendkim-ar.c
@@ -21,16 +21,6 @@
 # include <sysexits.h>
 #endif /* ARTEST */
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "opendkim-ar.h"
 
@@ -377,7 +367,7 @@ ares_dedup(struct authres *ar, int n)
 **  	hdr -- NULL-terminated contents of an Authentication-Results:
 **  	       header field
 **  	ar -- a pointer to a (struct authres) loaded by values after parsing
-**  
+**
 **  Return value:
 **  	0 on success, -1 on failure.
 */
--- a/opendkim/opendkim-db.c
+++ b/opendkim/opendkim-db.c
@@ -36,16 +36,6 @@
 /* libopendkim includes */
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* repute includes */
 #ifdef _FFR_REPUTATION
 # include <repute.h>
@@ -854,7 +844,7 @@ dkimf_db_datasplit(char *buf, size_t buf
 **
 **  Notes:
 **  	Expands "$d" and "$D" as defined in opendkim.conf(5).
-** 
+**
 **  	Should report overflows.
 */
 
@@ -1002,7 +992,7 @@ dkimf_db_list_free(struct dkimf_db_list
 		list = next;
 	}
 }
-		
+
 /*
 **  DKIMF_DB_RELIST_FREE -- destroy a linked regex list
 **
@@ -1312,7 +1302,7 @@ dkimf_db_open_sql(struct dkimf_db_dsn *d
 **
 **  Parameters:
 **  	db -- DKIMF_DB handle
-** 
+**
 **  Return value:
 **  	A DKIMF_DB_TYPE_* constant.
 */
@@ -2174,7 +2164,7 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 			}
 
 			assert(key != NULL);
-			
+
 			if (value != NULL &&
 			    (new->db_flags & DKIMF_DB_FLAG_VALLIST) != 0)
 			{
@@ -2230,7 +2220,7 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 						list = newl;
 					else
 						next->db_list_next = newl;
-	
+
 					next = newl;
 					n++;
 				}
@@ -2536,7 +2526,7 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 		/*
 		**  General format of a DSN:
 		**  <backend>://[user[:pwd]@][port+]host/dbase[/key=val[?...]]
-		**  
+		**
 		**  "table", "keycol" and "datacol" will be set in one of the
 		**  key-value pairs.  "filter" is optional.
 		*/
@@ -2763,7 +2753,7 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 				free(new);
 				return -1;
 			}
-	
+
 			new->db_iflags |= DKIMF_DB_IFLAG_RECONNECT;
 			odbx = NULL;
 		}
@@ -2858,10 +2848,10 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 		**  General format of an LDAP specification:
 		**  scheme://host[:port][/dn[?attrs[?scope[?filter[?exts]]]]]
 		**  (see RFC4516)
-		**  
+		**
 		**  "bindpass", "authmech" and "usetls" will be set in
 		**  other config values.
-		**  
+		**
 		**  Take the descriptive values (e.g. attributes) from the
 		**  first one.
 		*/
@@ -3063,7 +3053,7 @@ dkimf_db_open(DKIMF_DB *db, char *name,
 		close(fd);
 
 		/* try to compile it */
-		if (dkimf_lua_db_hook(tmp, 0, NULL, &lres, 
+		if (dkimf_lua_db_hook(tmp, 0, NULL, &lres,
 		                      (void *) &lua->lua_script,
 		                      &lua->lua_scriptlen) != 0)
 		{
@@ -3707,12 +3697,12 @@ dkimf_db_delete(DKIMF_DB db, void *buf,
 	assert(buf != NULL);
 
 	if (db->db_type == DKIMF_DB_TYPE_FILE ||
-	    db->db_type == DKIMF_DB_TYPE_CSL || 
-	    db->db_type == DKIMF_DB_TYPE_DSN || 
-	    db->db_type == DKIMF_DB_TYPE_LDAP || 
-	    db->db_type == DKIMF_DB_TYPE_LUA || 
-	    db->db_type == DKIMF_DB_TYPE_MEMCACHE || 
-	    db->db_type == DKIMF_DB_TYPE_REPUTE || 
+	    db->db_type == DKIMF_DB_TYPE_CSL ||
+	    db->db_type == DKIMF_DB_TYPE_DSN ||
+	    db->db_type == DKIMF_DB_TYPE_LDAP ||
+	    db->db_type == DKIMF_DB_TYPE_LUA ||
+	    db->db_type == DKIMF_DB_TYPE_MEMCACHE ||
+	    db->db_type == DKIMF_DB_TYPE_REPUTE ||
 	    db->db_type == DKIMF_DB_TYPE_REFILE ||
 	    db->db_type == DKIMF_DB_TYPE_ERLANG)
 		return EINVAL;
@@ -3865,11 +3855,11 @@ dkimf_db_put(DKIMF_DB db, void *buf, siz
 	assert(outbuf != NULL);
 
 	if (db->db_type == DKIMF_DB_TYPE_FILE ||
-	    db->db_type == DKIMF_DB_TYPE_CSL || 
-	    db->db_type == DKIMF_DB_TYPE_DSN || 
-	    db->db_type == DKIMF_DB_TYPE_LDAP || 
-	    db->db_type == DKIMF_DB_TYPE_LUA || 
-	    db->db_type == DKIMF_DB_TYPE_REPUTE || 
+	    db->db_type == DKIMF_DB_TYPE_CSL ||
+	    db->db_type == DKIMF_DB_TYPE_DSN ||
+	    db->db_type == DKIMF_DB_TYPE_LDAP ||
+	    db->db_type == DKIMF_DB_TYPE_LUA ||
+	    db->db_type == DKIMF_DB_TYPE_REPUTE ||
 	    db->db_type == DKIMF_DB_TYPE_REFILE)
 		return EINVAL;
 
@@ -5114,7 +5104,7 @@ dkimf_db_get(DKIMF_DB db, void *buf, siz
 		key = (char *) db->db_data;
 
 		snprintf(query, sizeof query, "%s:%s", key, (char *) buf);
-		
+
 		out = memcached_get(mcs, query, strlen(query), &vlen,
 		                    &flags, &ret);
 
@@ -5600,7 +5590,7 @@ dkimf_db_close(DKIMF_DB db)
 
 				first = FALSE;
 			}
-			
+
 			(void) dkimf_db_close(ldap->ldap_cache);
 		}
 #  endif /* USE_DB */
@@ -5983,7 +5973,7 @@ dkimf_db_walk(DKIMF_DB db, _Bool first,
 			(void) odbx_result_finish(result);
 			result = NULL;
 		}
-		
+
 		/* run a query and start results cursor if needed */
 		if (result == NULL)
 		{
@@ -6234,7 +6224,7 @@ dkimf_db_walk(DKIMF_DB db, _Bool first,
 			if (ldap->ldap_descr->lud_attrs[c] == NULL)
 				noattrs = TRUE;
 
-			if (noattrs) 
+			if (noattrs)
 			{
 				if ((req[c].dbdata_flags & DKIMF_DB_DATA_OPTIONAL) == 0)
 					status = -1;
@@ -6439,7 +6429,7 @@ dkimf_db_walk(DKIMF_DB db, _Bool first,
 **  	db -- a DKIMF_DB handle
 **  	a -- array (returned)
 **  	base -- base array
-** 
+**
 **  Return value:
 **  	Length of the created array, or -1 on error/empty.
 */
--- a/opendkim/opendkim-spam.c
+++ b/opendkim/opendkim-spam.c
@@ -25,16 +25,6 @@
 # include <odbx.h>
 #endif /* USE_ODBX */
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "config.h"
 #include "stats.h"
--- a/opendkim/opendkim-testkey.c
+++ b/opendkim/opendkim-testkey.c
@@ -36,16 +36,6 @@
 #include <dkim.h>
 #include <dkim-test.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "opendkim-db.h"
 #include "opendkim-dns.h"
--- a/opendkim/opendkim.c
+++ b/opendkim/opendkim.c
@@ -92,16 +92,6 @@
 # include "vbr.h"
 #endif /* _FFR_VBR */
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 #ifdef _FFR_REPUTATION
 /* reputation includes */
 # include <repute.h>
@@ -803,7 +793,7 @@ pthread_mutex_t pwdb_lock;			/* passwd/g
 **  	An sfsistat.
 */
 
-sfsistat 
+sfsistat
 smfi_insheader(SMFICTX *ctx, int idx, char *hname, char *hvalue)
 {
 	assert(ctx != NULL);
@@ -1413,7 +1403,7 @@ dkimf_xs_rblcheck(lua_State *l)
 	ctx = (SMFICTX *) lua_touserdata(l, 1);
 	if (ctx != NULL)
 		cc = (struct connctx *) dkimf_getpriv(ctx);
-		
+
 	query = lua_tostring(l, 2);
 	qroot = lua_tostring(l, 3);
 	if (lua_gettop(l) == 4)
@@ -2715,7 +2705,7 @@ dkimf_xs_rcptcount(lua_State *l)
 	dfc = cc->cctx_msg;
 
 	rcnt = 0;
-	
+
 	for (addr = dfc->mctx_rcptlist; addr != NULL; addr = addr->a_next)
 		rcnt++;
 
@@ -2767,7 +2757,7 @@ dkimf_xs_rcpt(lua_State *l)
 		lua_pushstring(l, "dkimf_xs_rcpt");
 		return 1;
 	}
-	
+
 	cc = (struct connctx *) dkimf_getpriv(ctx);
 	dfc = cc->cctx_msg;
 
@@ -3090,7 +3080,7 @@ dkimf_xs_getsigarray(lua_State *l)
 	{
 		lua_pushnil(l);
 	}
-	
+
 	return 1;
 }
 
@@ -3156,7 +3146,7 @@ dkimf_xs_getsigcount(lua_State *l)
 	{
 		lua_pushnumber(l, 1);
 	}
-	
+
 	return 1;
 }
 
@@ -4762,7 +4752,7 @@ dkimf_securefile(const char *path, ino_t
 			return status;
 
 		if (partial[1] != '\0')
-			strlcat(partial, "/", sizeof partial); 
+			strlcat(partial, "/", sizeof partial);
 	}
 
 	return 1;
@@ -4818,7 +4808,7 @@ dkimf_securefile(const char *path, ino_t
 
 		pthread_mutex_unlock(&pwdb_lock);
 	}
-		
+
 	/* guess we're okay... */
 	*ino = s.st_ino;
 	return 1;
@@ -6208,7 +6198,7 @@ dkimf_config_load(struct config *data, s
 		{
 			if (strcmp(str, "HOSTNAME") == 0)
 				conf->conf_authservid = strdup(myhostname);
-			else	
+			else
 				conf->conf_authservid = strdup(str);
 		}
 
@@ -6317,7 +6307,7 @@ dkimf_config_load(struct config *data, s
 
 #ifdef	_FFR_IDENTITY_HEADER
 		(void) config_get(data, "IdentityHeader",
-				  &conf->conf_identityhdr, 
+				  &conf->conf_identityhdr,
 				  sizeof conf->conf_identityhdr);
 
 		(void) config_get(data, "IdentityHeaderRemove",
@@ -6991,7 +6981,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_peerdb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7010,7 +7000,7 @@ dkimf_config_load(struct config *data, s
 
 		status = dkimf_db_open(&conf->conf_testdnsdb,
 		                       conf->conf_testdnsdata,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7038,7 +7028,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_internal, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7055,7 +7045,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_internal, DEFINTERNAL,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7084,7 +7074,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_exignore, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7112,7 +7102,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_exemptdb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7134,7 +7124,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_bldb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7155,7 +7145,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_signhdrsdb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7176,7 +7166,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_remardb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7211,7 +7201,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_atpsdb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -7233,7 +7223,7 @@ dkimf_config_load(struct config *data, s
 		char *dberr = NULL;
 
 		status = dkimf_db_open(&conf->conf_dontsigntodb, str,
-		                       (dbflags | 
+		                       (dbflags |
 		                        DKIMF_DB_FLAG_ICASE |
 		                        DKIMF_DB_FLAG_READONLY),
 		                       NULL, &dberr);
@@ -8179,7 +8169,7 @@ dkimf_config_load(struct config *data, s
 
 				saveerrno = errno;
 
-				syslog(LOG_ERR, "malloc(): %s", 
+				syslog(LOG_ERR, "malloc(): %s",
 				       strerror(errno));
 
 				errno = saveerrno;
@@ -8299,7 +8289,7 @@ dkimf_config_load(struct config *data, s
 			char signer[BUFRSZ + 1];
 
 			dbd[0].dbdata_flags = 0;
-			
+
 			memset(keyname, '\0', sizeof keyname);
 
 			dbd[0].dbdata_buffer = keyname;
@@ -8324,7 +8314,7 @@ dkimf_config_load(struct config *data, s
 				dbd[2].dbdata_buflen = sizeof keydata - 1;
 				dbd[2].dbdata_flags = DKIMF_DB_DATA_BINARY;
 
-				if (dkimf_db_get(conf->conf_keytabledb,	
+				if (dkimf_db_get(conf->conf_keytabledb,
 				                 keyname, strlen(keyname),
 				                 dbd, 3, &found) != 0 ||
 				    !found ||
@@ -8437,7 +8427,7 @@ dkimf_dns_init(DKIM_LIB *lib, struct dki
 		{
 			if (err != NULL)
 				*err = "failed to add resolver configuration file";
-	
+
 			return FALSE;
 		}
 	}
@@ -9247,7 +9237,7 @@ dkimf_cleanup(SMFICTX *ctx)
 			while (cur != NULL)
 			{
 				next = cur->se_next;
-	
+
 				free(cur);
 
 				cur = next;
@@ -10261,7 +10251,7 @@ dkimf_sigreport(connctx cc, struct dkimf
 				syslog(LOG_ERR, "%s: fdopen(): %s",
 				       dfc->mctx_jobid, strerror(errno));
 			}
-	
+
 			close(fd);
 			return;
 		}
@@ -10276,7 +10266,7 @@ dkimf_sigreport(connctx cc, struct dkimf
 				syslog(LOG_ERR, "%s: popen(): %s",
 				       dfc->mctx_jobid, strerror(errno));
 			}
-	
+
 			return;
 		}
 	}
@@ -11362,7 +11352,7 @@ mlfi_header(SMFICTX *ctx, char *headerf,
 		**  feed to the canonicalization algorithms the headers
 		**  exactly as the MTA will modify them, so verification
 		**  should still work.
-		**  
+		**
 		**  This is based on experimentation and on reading
 		**  sendmail/headers.c, and may require more tweaking before
 		**  it's precisely right.  There are other munges the
@@ -11433,7 +11423,7 @@ mlfi_header(SMFICTX *ctx, char *headerf,
 
 			return SMFIS_TEMPFAIL;
 		}
-	
+
 		for (rep = conf->conf_replist;
 		     rep != NULL;
 		     rep = rep->repl_next)
@@ -11629,7 +11619,7 @@ mlfi_eoh(SMFICTX *ctx)
 		if (from == NULL && !didfrom)
 			from = dkimf_findheader(dfc, "from", 0);
 	}
-  
+
   	if (from != NULL)
 		dkimf_dstring_copy(addr, from->hdr_val);
 
@@ -12140,7 +12130,7 @@ mlfi_eoh(SMFICTX *ctx)
 
 	/* still no key selected; check the signing table (if any) */
 	if (originok && dfc->mctx_srhead == NULL &&
-	    (user != NULL && dfc->mctx_domain[0] != '\0') && 
+	    (user != NULL && dfc->mctx_domain[0] != '\0') &&
 #ifdef _FFR_LUA_ONLY_SIGNING
 	    !conf->conf_luasigning &&
 #endif /* _FFR_LUA_ONLY_SIGNING */
@@ -12299,7 +12289,7 @@ mlfi_eoh(SMFICTX *ctx)
 	*/
 
 	/* signing requests with signing mode disabled */
-	if (dfc->mctx_srhead != NULL && 
+	if (dfc->mctx_srhead != NULL &&
 	    (conf->conf_mode & DKIMF_MODE_SIGNER) == 0)
 		return SMFIS_ACCEPT;
 
@@ -12619,7 +12609,7 @@ mlfi_eoh(SMFICTX *ctx)
 					idset = TRUE;
 				}
 			}
-		
+
 			if (!idset && conf->conf_dolog)
 			{
 				syslog(LOG_INFO,
@@ -12629,7 +12619,7 @@ mlfi_eoh(SMFICTX *ctx)
 			}
 		}
 #endif /* _FFR_IDENTITY_HEADER */
-				
+
 		if (!idset)
 		{
 			snprintf((char *) identity, sizeof identity, "@%s",
@@ -12803,7 +12793,7 @@ mlfi_eoh(SMFICTX *ctx)
 
 			/* set the VBR transaction type */
 			(void) vbr_settype(dfc->mctx_vbr, (u_char *) vbr_type);
-	
+
 			/* set the VBR certifier list */
 			(void) vbr_setcert(dfc->mctx_vbr, (u_char *) vbr_cert);
 
@@ -12915,7 +12905,7 @@ mlfi_eoh(SMFICTX *ctx)
 
 #ifdef _FFR_IDENTITY_HEADER
 		if (conf->conf_identityhdr != NULL &&
-		    conf->conf_rmidentityhdr && 
+		    conf->conf_rmidentityhdr &&
 		    dfc->mctx_srhead != NULL &&
 		    strcasecmp(conf->conf_identityhdr, hdr->hdr_hdr) == 0)
 			continue;
@@ -12942,7 +12932,7 @@ mlfi_eoh(SMFICTX *ctx)
 #ifdef _FFR_REPUTATION
 		/* check for spam flag */
 		if (conf->conf_repspamcheck != NULL &&
-		    regexec(&conf->conf_repspamre, 
+		    regexec(&conf->conf_repspamre,
 		            dkimf_dstring_get(dfc->mctx_tmpstr),
 		            0, NULL, 0) == 0)
 			dfc->mctx_spam = TRUE;
@@ -13340,7 +13330,7 @@ mlfi_eom(SMFICTX *ctx)
 	    dfc->mctx_srhead != NULL)
 	{
 		struct Header *hdr;
-		
+
 		hdr = dkimf_findheader(dfc, conf->conf_identityhdr, 0);
 		if (hdr != NULL)
 		{
@@ -13357,7 +13347,7 @@ mlfi_eom(SMFICTX *ctx)
 		}
 	}
 #endif /* _FFR_IDENTITY_HEADER */
-					
+
 	/* log something if the message was multiply signed */
 	if (dfc->mctx_dkimv != NULL && conf->conf_dolog)
 	{
@@ -13482,7 +13472,7 @@ mlfi_eom(SMFICTX *ctx)
 				slash = strchr((char *) ares->ares_host, '/');
 				if (slash != NULL)
 					*slash = '\0';
-					
+
 				if (conf->conf_remardb != NULL)
 				{
 					status = dkimf_db_get(conf->conf_remardb,
@@ -13790,7 +13780,7 @@ mlfi_eom(SMFICTX *ctx)
 					fclose(f);
 				}
 			}
-		}	
+		}
 
 		if (dfc->mctx_status == DKIMF_STATUS_GOOD)
 		{
@@ -14576,7 +14566,7 @@ mlfi_eom(SMFICTX *ctx)
 				vbr_certifier = NULL;
 				vbr_vouchers = NULL;
 				vbr_type = NULL;
-	
+
 				/* break out the VBR-Info header contents */
 				strlcpy(tmp, vbr_header->hdr_val, sizeof tmp);
 				for (p = strtok_r(tmp, ";", &sctx);
@@ -14624,7 +14614,7 @@ mlfi_eom(SMFICTX *ctx)
 						vbr_vouchers = (char *) value;
 					}
 				}
-			
+
 				/* confirm a valid signature was there */
 				if (dfc->mctx_dkimv != NULL &&
 				    dkim_getsiglist(dfc->mctx_dkimv,
@@ -14646,7 +14636,7 @@ mlfi_eom(SMFICTX *ctx)
 						}
 					}
 				}
-				
+
 				if (vbr_validsig)
 				{
 					/* use accessors to set parsed values */
@@ -14656,7 +14646,7 @@ mlfi_eom(SMFICTX *ctx)
 					            (u_char *) vbr_type);
 					vbr_setdomain(dfc->mctx_vbr,
 					              (u_char *) vbr_domain);
-		
+
 					/* attempt the query */
 					vbr_status = vbr_query(dfc->mctx_vbr,
 					                       (u_char **) &vbr_result,
@@ -14739,7 +14729,7 @@ mlfi_eom(SMFICTX *ctx)
 						        vbr_certifier,
 						        sizeof header);
 					}
-		
+
 					if (dkimf_insheader(ctx, 1,
 					                    AUTHRESULTSHDR,
 					                    (char *) header) == MI_FAILURE)
@@ -15827,7 +15817,7 @@ main(int argc, char **argv)
 				        progname, query);
 				return EX_USAGE;
 			}
-	
+
 			result = (char **) malloc(sizeof(char *) * n);
 			if (result == NULL)
 			{
--- a/opendkim/reputation.c
+++ b/opendkim/reputation.c
@@ -21,16 +21,6 @@
 /* libopendkim includes */
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "reputation.h"
 #include "opendkim.h"
@@ -223,7 +213,7 @@ dkimf_rep_check(DKIMF_REP rep, DKIM_SIGI
 	if (rep->rep_lastflush + rep->rep_ttl < now)
 	{
 		f = TRUE;
-		
+
 		req[0].dbdata_buffer = (void *) &when;
 		req[0].dbdata_buflen = sizeof when;
 		req[0].dbdata_flags = DKIMF_DB_DATA_BINARY;
@@ -341,7 +331,7 @@ dkimf_rep_check(DKIMF_REP rep, DKIM_SIGI
 			strlcpy(domain, DKIMF_REP_LOWTIME, sizeof domain);
 			dlen = strlen(domain);
 		}
-		
+
 		f = FALSE;
 
 		/* get the total message limit */
--- a/opendkim/stats.c
+++ b/opendkim/stats.c
@@ -40,16 +40,6 @@
 /* libopendkim includes */
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "stats.h"
 #include "util.h"
--- a/opendkim/test.c
+++ b/opendkim/test.c
@@ -21,16 +21,6 @@
 #include "build-config.h"
 #include <dkim.h>
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* libmilter includes */
 #include <libmilter/mfapi.h>
 
@@ -712,7 +702,7 @@ dkimf_testfile(DKIM_LIB *libopendkim, st
 #ifdef USE_UNBOUND
 					char *dnssec;
 					int dnsseccode = DKIM_DNSSEC_UNKNOWN;
-				
+
 					dnsseccode = dkim_sig_getdnssec(sig);
 
 					switch (dnsseccode)
--- a/opendkim/util.c
+++ b/opendkim/util.c
@@ -46,16 +46,6 @@
 # endif /* SOLARIS <= 20600 */
 #endif /* SOLARIS */
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* opendkim includes */
 #include "opendkim.h"
 #include "util.h"
@@ -217,7 +207,7 @@ static unsigned char alphabet[64] = "ABC
 
 /*
 **  DKIMF_ISBLANK -- return TRUE iff a string contains only whitespace
-**  
+**
 **  Parameters:
 **  	str -- string to check
 **
--- a/reprrd/reprrd.c
+++ b/reprrd/reprrd.c
@@ -22,11 +22,6 @@
 /* libreprrd includes */
 #include "reprrd.h"
 
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* data types */
 struct reprrd_handle
 {
@@ -250,7 +245,7 @@ reprrd_query(REPRRD r, const char *domai
 		end = now;
 		start = last_update - 1;
 		step = REPRRD_STEP;
-	
+
 		reprrd_mkpath(path, sizeof path, r, domain,
 		              REPRRD_TYPE_MESSAGES);
 
@@ -287,7 +282,7 @@ reprrd_query(REPRRD r, const char *domai
 		end = now;
 		start = last_update - 1;
 		step = REPRRD_STEP;
-	
+
 		rrd_clear_error();
 		status = rrd_fetch_r(path, REPRRD_CF_AVERAGE, &start, &end,
 		                     &step, &ds_cnt, &ds_names, &data);
@@ -324,7 +319,7 @@ reprrd_query(REPRRD r, const char *domai
 		end = now;
 		start = last_update - 1;
 		step = REPRRD_STEP;
-	
+
 		reprrd_mkpath(path, sizeof path, r, domain, REPRRD_TYPE_SPAM);
 
 		rrd_clear_error();
@@ -407,7 +402,7 @@ reprrd_query(REPRRD r, const char *domai
 		end = now;
 		start = now - REPRRD_STEP * REPRRD_BACKSTEPS;
 		step = REPRRD_STEP;
-	
+
 		rrd_clear_error();
 		status = rrd_fetch_r(path, REPRRD_CF_FAILURES, &start, &end,
 		                     &step, &ds_cnt, &ds_names, &data);
--- a/stats/Makefile.am
+++ b/stats/Makefile.am
@@ -14,9 +14,9 @@ if USE_ODBX
 sbin_PROGRAMS = opendkim-importstats
 
 opendkim_importstats_SOURCES = opendkim-importstats.c
-opendkim_importstats_CPPFLAGS = $(LIBODBX_CPPFLAGS) -I$(srcdir)/../libopendkim -I$(srcdir)/../opendkim
+opendkim_importstats_CPPFLAGS = $(LIBODBX_CPPFLAGS) -I$(srcdir)/../libopendkim -I$(srcdir)/../opendkim $(LIBBSD_CFLAGS)
 opendkim_importstats_CFLAGS = $(LIBODBX_CFLAGS) $(COV_CFLAGS)
-opendkim_importstats_LDFLAGS = $(LIBODBX_LDFLAGS) $(COV_LDFLAGS)
+opendkim_importstats_LDFLAGS = $(LIBODBX_LDFLAGS) $(COV_LDFLAGS) $(LIBBSD_LIBS)
 opendkim_importstats_LDADD = $(LIBODBX_LIBS) $(LIBDL_LIBS) $(COV_LIBADD)
 
 man_MANS += opendkim-importstats.8
--- a/stats/opendkim-importstats.c
+++ b/stats/opendkim-importstats.c
@@ -23,16 +23,6 @@
 /* OpenDKIM includes */
 #include "stats.h"
 
-/* libbsd if found */
-#ifdef USE_BSD_H
-# include <bsd/string.h>
-#endif /* USE_BSD_H */
-
-/* libstrl if needed */
-#ifdef USE_STRL_H
-# include <strl.h>
-#endif /* USE_STRL_H */
-
 /* libodbx includes */
 #ifdef USE_ODBX
 # include <odbx.h>
