@@ -0,0 +1,278 @@
+diff -uNr pdns-recursor-3.7.1/build-scripts/redhat/pdns-recursor-test.spec pdns-recursor-3.7.2/build-scripts/redhat/pdns-recursor-test.spec
+--- pdns-recursor-3.7.1/build-scripts/redhat/pdns-recursor-test.spec 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/build-scripts/redhat/pdns-recursor-test.spec 2015-04-21 15:02:57.000000000 +0200
+@@ -9,7 +9,7 @@
+ Epoch: 0
+ Group: System Environment/Daemons
+ License: GPL
+-Source: http://downloads.powerdns.com/releases/%{name}-3.7.1.tar.bz2
++Source: http://downloads.powerdns.com/releases/%{name}-3.7.2.tar.bz2
+
+ BuildRequires: boost-devel >= 1.39.0
+ BuildRequires: lua-devel >= 5.3
+@@ -20,7 +20,7 @@
+ PowerDNS recursor
+
+ %prep
+-%setup -q -n %{name}-3.7.1
++%setup -q -n %{name}-3.7.2
+
+ %build
+ %configure
+diff -uNr pdns-recursor-3.7.1/config.h pdns-recursor-3.7.2/config.h
+--- pdns-recursor-3.7.1/config.h 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/config.h 2015-04-21 15:02:57.000000000 +0200
+@@ -1,4 +1,4 @@
+ #define RECURSOR
+-#define VERSION "3.7.1"
++#define VERSION "3.7.2"
+ #define DIST_HOST "jenkins@autotest.powerdns.com"
+ #define HAVE_BOOST 1
+diff -uNr pdns-recursor-3.7.1/configure pdns-recursor-3.7.2/configure
+--- pdns-recursor-3.7.1/configure 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/configure 2015-04-21 15:02:57.000000000 +0200
+@@ -1,6 +1,10 @@
+ #!/bin/sh
+ set -e
+
++if [ "$HARDENING" = "" ]; then
++ HARDENING="yes"
++fi
++
+ if [ "$CXX" = "" ]; then
+ CXX="g++"
+ fi
+@@ -46,8 +50,8 @@
+ EOF
+
+ # test for PIE
+- if $CXX $src -c -o a.out -fPIE -DPIE; then
+- if [ "$STATIC" != "semi" ] && [ "$STATIC" != "full" ] && $CXX -pie -o a2.out a.out; then
++ if $CXX $src -c -o a.out -fPIE -DPIE 2>/dev/null; then
++ if [ "$STATIC" != "semi" ] && [ "$STATIC" != "full" ] && $CXX -pie -o a2.out a.out 2>/dev/null; then
+ CF_PIE="-fPIE -DPIE"
+ LD_PIE="-pie"
+ fi
+@@ -69,7 +73,9 @@
+ rm -f $src a.out a2.out
+ }
+
+-test_flags
++if [ "$HARDENING" != "no" ]; then
++ test_flags
++fi
+
+ sed -e "s/@LD_RELRO@/$LD_RELRO/g" -e "s/@LD_PIE@/$LD_PIE/g" -e "s/@CF_PIE@/$CF_PIE/g" -e "s/@CF_FORTIFY@/$CF_FORTIFY/g" -e "s/@CF_STACK@/$CF_STACK/g" < Makefile.in > Makefile
+
+diff -uNr pdns-recursor-3.7.1/contrib/systemd-pdns-recursor.service pdns-recursor-3.7.2/contrib/systemd-pdns-recursor.service
+--- pdns-recursor-3.7.1/contrib/systemd-pdns-recursor.service 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/contrib/systemd-pdns-recursor.service 2015-04-21 15:02:57.000000000 +0200
+@@ -1,7 +1,8 @@
+ [Unit]
+ Description=PowerDNS recursing nameserver
+ Documentation=man:pdns_recursor(1) man:rec_control(1)
+-Wants=network-online.target
++Wants=network-online.target nss-lookup.target
++Before=nss-lookup.target
+ After=network-online.target
+
+ [Service]
+diff -uNr pdns-recursor-3.7.1/dnsparser.cc pdns-recursor-3.7.2/dnsparser.cc
+--- pdns-recursor-3.7.1/dnsparser.cc 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/dnsparser.cc 2015-04-21 15:02:57.000000000 +0200
+@@ -455,9 +455,10 @@
+
+ void PacketReader::getLabelFromContent(const vector<uint8_t>& content, uint16_t& frompos, string& ret, int recurs)
+ {
+- if(recurs > 1000) // the forward reference-check below should make this test 100% obsolete
++ if(recurs > 100) // the forward reference-check below should make this test 100% obsolete
+ throw MOADNSException("Loop");
+ // it is tempting to call reserve on ret, but it turns out it creates a malloc/free storm in the loop
++ int pos = frompos;
+ for(;;) {
+ unsigned char labellen=content.at(frompos++);
+
+@@ -470,7 +471,7 @@
+ uint16_t offset=256*(labellen & ~0xc0) + (unsigned int)content.at(frompos++) - sizeof(dnsheader);
+ // cout<<"This is an offset, need to go to: "<<offset<<endl;
+
+- if(offset >= frompos-2)
++ if(offset >= pos)
+ throw MOADNSException("forward reference during label decompression");
+ return getLabelFromContent(content, offset, ret, ++recurs);
+ }
+diff -uNr pdns-recursor-3.7.1/iputils.cc pdns-recursor-3.7.2/iputils.cc
+--- pdns-recursor-3.7.1/iputils.cc 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/iputils.cc 2015-04-21 15:02:57.000000000 +0200
+@@ -115,6 +115,7 @@
+ return false;
+ }
+
++// FIXME: this function is unused, and using it could reduce some code duplication
+ int sendfromto(int sock, const char* data, int len, int flags, const ComboAddress& from, const ComboAddress& to)
+ {
+ struct msghdr msgh;
+@@ -133,11 +134,15 @@
+ if(from.sin4.sin_family) {
+ addCMsgSrcAddr(&msgh, cbuf, &from);
+ }
++ else {
++ msgh.msg_control=NULL;
++ }
+ return sendmsg(sock, &msgh, flags);
+ }
+
+ // be careful: when using this for receive purposes, make sure addr->sin4.sin_family is set appropriately so getSocklen works!
+ // be careful: when using this function for *send* purposes, be sure to set cbufsize to 0!
++// be careful: if you don't call addCMsgSrcAddr after fillMSGHdr, make sure to set msg_control to NULL
+ void fillMSGHdr(struct msghdr* msgh, struct iovec* iov, char* cbuf, size_t cbufsize, char* data, size_t datalen, ComboAddress* addr)
+ {
+ iov->iov_base = data;
+diff -uNr pdns-recursor-3.7.1/pdns_recursor.cc pdns-recursor-3.7.2/pdns_recursor.cc
+--- pdns-recursor-3.7.1/pdns_recursor.cc 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/pdns_recursor.cc 2015-04-21 15:02:57.000000000 +0200
+@@ -688,6 +688,8 @@
+ fillMSGHdr(&msgh, &iov, cbuf, 0, (char*)&*packet.begin(), packet.size(), &dc->d_remote);
+ if(dc->d_local.sin4.sin_family)
+ addCMsgSrcAddr(&msgh, cbuf, &dc->d_local);
++ else
++ msgh.msg_control=NULL;
+ sendmsg(dc->d_socket, &msgh, 0);
+ if(!SyncRes::s_nopacketcache && !variableAnswer ) {
+ t_packetCache->insertResponsePacket(string((const char*)&*packet.begin(), packet.size()),
+@@ -961,6 +963,9 @@
+ if(destaddr.sin4.sin_family) {
+ addCMsgSrcAddr(&msgh, cbuf, &destaddr);
+ }
++ else {
++ msgh.msg_control=NULL;
++ }
+ sendmsg(fd, &msgh, 0);
+
+ if(response.length() >= sizeof(struct dnsheader)) {
+diff -uNr pdns-recursor-3.7.1/README pdns-recursor-3.7.2/README
+--- pdns-recursor-3.7.1/README 2015-02-12 11:16:00.000000000 +0100
++++ pdns-recursor-3.7.2/README 2015-04-21 15:02:57.000000000 +0200
+@@ -2,7 +2,9 @@
+ -------------
+ For full details, please read:
+
+- http://doc.powerdns.com/built-in-recursor.html
++ https://doc.powerdns.com/md/recursor/
++
++Here follow some brief notes that may be useful to get you going.
+
+ COMPILING
+ ---------
+@@ -14,76 +16,29 @@
+ You only need to download it, there is no need to compile.
+
+ On most modern UNIX distributions, you can simply install 'boost' or
+-'boost-dev' or 'boost-devel'. If you don't have that option, or don't want
+-to use it, try:
+-
+-1) head to http://sourceforge.net/project/showfiles.php?group_id=7586 and
+-download the latest boost tar.bz2 or tar.gz, perhaps from:
+-http://downloads.sourceforge.net/project/boost/boost/1.39.0/boost_1_39_0.tar.bz2?use_mirror=ovh
+-(use the first link if this one doesn't work)
+-
+-2) untar it:
+-
+-$ tar xjf boost_1_39_0.tar.bz2
+-
+-3) Compile the PowerDNS recursor using:
+-
+-$ CXXFLAGS=-I./boost_1_39_0/ ./configure
+-$ CXXFLAGS=-I./boost_1_39_0/ make clean
+-$ CXXFLAGS=-I./boost_1_39_0/ make all
+-(the 'clean' is needed to have make pick up the new boost)
+-
+-4) Run ./pdns_recursor and you should be set!
+-
+-5) (g)make install
+-
+-(use gmake on many BSD variant and Solaris, regular make on Linux)
++'boost-dev' or 'boost-devel'. Otherwise, just download boost, and point the
++compiler at the right directory using CPPFLAGS.
+
+ OPTIONAL LUA SCRIPTING
+ ----------------------
|