Hello community,

here is the log from the commit of package pdns for openSUSE:Factory checked in 
at 2018-08-31 10:47:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pdns (Old)
 and      /work/SRC/openSUSE:Factory/.pdns.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pdns"

Fri Aug 31 10:47:03 2018 rev:56 rq:632190 version:4.1.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/pdns/pdns.changes        2018-05-29 
10:49:20.666697109 +0200
+++ /work/SRC/openSUSE:Factory/.pdns.new/pdns.changes   2018-08-31 
10:47:07.283397150 +0200
@@ -1,0 +2,24 @@
+Wed Aug 29 16:06:03 UTC 2018 - [email protected]
+
+- Update to 4.1.4
+  - Improvements
+    * #6590: Fix warnings reported by gcc 8.1.0.
+    * #6632, #6844, #6842, #6848: Make the gmysql backend future-proof
+    * #6685, #6686: Initialize some missed qtypes.
+
+  - Bug Fixes
+    * #6780: Avoid concurrent records/comments iteration from
+      running out of sync.
+    * #6816: Fix a crash in the API when adding records.
+    * #4457, #6691: pdns_control notify: handle slave without
+      renotify properly.
+    * #6736, #6738: Reset the TSIG state between queries.
+    * #6857: Remove SOA-check backoff on incoming notify and fix
+      lock handling.
+    * #6858: Fix an issue where updating a record via DNS-UPDATE in
+      a child zone that also exists in the parent zone, we would
+      incorrectly apply the update to the parent zone.
+    * #6676, #6677: Geoipbackend: check geoip_id_by_addr_gl and
+       geoip_id_by_addr_v6_gl return value. (Aki Tuomi)
+
+-------------------------------------------------------------------

Old:
----
  pdns-4.1.3.tar.bz2
  pdns-4.1.3.tar.bz2.sig

New:
----
  pdns-4.1.4.tar.bz2
  pdns-4.1.4.tar.bz2.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pdns.spec ++++++
--- /var/tmp/diff_new_pack.Bqq8yK/_old  2018-08-31 10:47:07.723397689 +0200
+++ /var/tmp/diff_new_pack.Bqq8yK/_new  2018-08-31 10:47:07.727397694 +0200
@@ -17,11 +17,11 @@
 
 
 Name:           pdns
-Version:        4.1.3
+Version:        4.1.4
 Release:        0
 #
 %define pkg_name       pdns
-%define pkg_version 4.1.3
+%define pkg_version 4.1.4
 #
 %if 0%{?suse_version} > 1230 || 0%{?rhel_version} > 600 || 0%{?centos_version} 
> 600 || 0%{?fedora_version} >= 20 || 
0%{?el7}%{?fc20}%{?fc21}%{?fc22}%{?fc23}%{?fc24}%{?fc25}
 %bcond_without systemd

++++++ pdns-4.1.3.tar.bz2 -> pdns-4.1.4.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/.version new/pdns-4.1.4/.version
--- old/pdns-4.1.3/.version     2018-05-24 14:52:44.000000000 +0200
+++ new/pdns-4.1.4/.version     2018-08-29 16:07:16.000000000 +0200
@@ -1 +1 @@
-4.1.3
+4.1.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/configure new/pdns-4.1.4/configure
--- old/pdns-4.1.3/configure    2018-05-24 14:52:43.000000000 +0200
+++ new/pdns-4.1.4/configure    2018-08-29 16:07:15.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pdns 4.1.3.
+# Generated by GNU Autoconf 2.69 for pdns 4.1.4.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@
 # Identity of this package.
 PACKAGE_NAME='pdns'
 PACKAGE_TARNAME='pdns'
-PACKAGE_VERSION='4.1.3'
-PACKAGE_STRING='pdns 4.1.3'
+PACKAGE_VERSION='4.1.4'
+PACKAGE_STRING='pdns 4.1.4'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1538,7 +1538,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures pdns 4.1.3 to adapt to many kinds of systems.
+\`configure' configures pdns 4.1.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1608,7 +1608,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pdns 4.1.3:";;
+     short | recursive ) echo "Configuration of pdns 4.1.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1842,7 +1842,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pdns configure 4.1.3
+pdns configure 4.1.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2435,7 +2435,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by pdns $as_me 4.1.3, which was
+It was created by pdns $as_me 4.1.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3315,7 +3315,7 @@
 
 # Define the identity of the package.
  PACKAGE='pdns'
- VERSION='4.1.3'
+ VERSION='4.1.4'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -23543,7 +23543,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by pdns $as_me 4.1.3, which was
+This file was extended by pdns $as_me 4.1.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23609,7 +23609,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-pdns config.status 4.1.3
+pdns config.status 4.1.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/calidns.1 
new/pdns-4.1.4/docs/calidns.1
--- old/pdns-4.1.3/docs/calidns.1       2018-05-24 14:53:36.000000000 +0200
+++ new/pdns-4.1.4/docs/calidns.1       2018-08-29 16:08:05.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CALIDNS" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "CALIDNS" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 calidns \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnsbulktest.1 
new/pdns-4.1.4/docs/dnsbulktest.1
--- old/pdns-4.1.3/docs/dnsbulktest.1   2018-05-24 14:53:48.000000000 +0200
+++ new/pdns-4.1.4/docs/dnsbulktest.1   2018-08-29 16:08:17.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSBULKTEST" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSBULKTEST" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsbulktest \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnsgram.1 
new/pdns-4.1.4/docs/dnsgram.1
--- old/pdns-4.1.3/docs/dnsgram.1       2018-05-24 14:53:37.000000000 +0200
+++ new/pdns-4.1.4/docs/dnsgram.1       2018-08-29 16:08:06.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSGRAM" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSGRAM" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsgram \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnspcap2protobuf.1 
new/pdns-4.1.4/docs/dnspcap2protobuf.1
--- old/pdns-4.1.3/docs/dnspcap2protobuf.1      2018-05-24 14:53:50.000000000 
+0200
+++ new/pdns-4.1.4/docs/dnspcap2protobuf.1      2018-08-29 16:08:19.000000000 
+0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSPCAP2PROTOBUF" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSPCAP2PROTOBUF" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnspcap2protobuf \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnsreplay.1 
new/pdns-4.1.4/docs/dnsreplay.1
--- old/pdns-4.1.3/docs/dnsreplay.1     2018-05-24 14:53:38.000000000 +0200
+++ new/pdns-4.1.4/docs/dnsreplay.1     2018-08-29 16:08:07.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSREPLAY" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSREPLAY" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsreplay \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnsscan.1 
new/pdns-4.1.4/docs/dnsscan.1
--- old/pdns-4.1.3/docs/dnsscan.1       2018-05-24 14:53:39.000000000 +0200
+++ new/pdns-4.1.4/docs/dnsscan.1       2018-08-29 16:08:08.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSSCAN" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSSCAN" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsscan \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnsscope.1 
new/pdns-4.1.4/docs/dnsscope.1
--- old/pdns-4.1.3/docs/dnsscope.1      2018-05-24 14:53:40.000000000 +0200
+++ new/pdns-4.1.4/docs/dnsscope.1      2018-08-29 16:08:09.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSSCOPE" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSSCOPE" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsscope \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnstcpbench.1 
new/pdns-4.1.4/docs/dnstcpbench.1
--- old/pdns-4.1.3/docs/dnstcpbench.1   2018-05-24 14:53:49.000000000 +0200
+++ new/pdns-4.1.4/docs/dnstcpbench.1   2018-08-29 16:08:18.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSTCPBENCH" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSTCPBENCH" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnstcpbench \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dnswasher.1 
new/pdns-4.1.4/docs/dnswasher.1
--- old/pdns-4.1.3/docs/dnswasher.1     2018-05-24 14:53:41.000000000 +0200
+++ new/pdns-4.1.4/docs/dnswasher.1     2018-08-29 16:08:10.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSWASHER" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DNSWASHER" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnswasher \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/dumresp.1 
new/pdns-4.1.4/docs/dumresp.1
--- old/pdns-4.1.3/docs/dumresp.1       2018-05-24 14:53:42.000000000 +0200
+++ new/pdns-4.1.4/docs/dumresp.1       2018-08-29 16:08:11.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DUMRESP" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "DUMRESP" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 dumresp \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/ixplore.1 
new/pdns-4.1.4/docs/ixplore.1
--- old/pdns-4.1.3/docs/ixplore.1       2018-05-24 14:53:42.000000000 +0200
+++ new/pdns-4.1.4/docs/ixplore.1       2018-08-29 16:08:12.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "IXPLORE" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "IXPLORE" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 ixplore \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/nproxy.1 new/pdns-4.1.4/docs/nproxy.1
--- old/pdns-4.1.3/docs/nproxy.1        2018-05-24 14:53:43.000000000 +0200
+++ new/pdns-4.1.4/docs/nproxy.1        2018-08-29 16:08:12.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NPROXY" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "NPROXY" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 nproxy \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/nsec3dig.1 
new/pdns-4.1.4/docs/nsec3dig.1
--- old/pdns-4.1.3/docs/nsec3dig.1      2018-05-24 14:53:44.000000000 +0200
+++ new/pdns-4.1.4/docs/nsec3dig.1      2018-08-29 16:08:13.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NSEC3DIG" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "NSEC3DIG" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 nsec3dig \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/pdns_control.1 
new/pdns-4.1.4/docs/pdns_control.1
--- old/pdns-4.1.3/docs/pdns_control.1  2018-05-24 14:53:32.000000000 +0200
+++ new/pdns-4.1.4/docs/pdns_control.1  2018-08-29 16:08:01.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_CONTROL" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "PDNS_CONTROL" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_control \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/pdns_notify.1 
new/pdns-4.1.4/docs/pdns_notify.1
--- old/pdns-4.1.3/docs/pdns_notify.1   2018-05-24 14:53:45.000000000 +0200
+++ new/pdns-4.1.4/docs/pdns_notify.1   2018-08-29 16:08:14.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_NOTIFY" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "PDNS_NOTIFY" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_notify \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/pdns_server.1 
new/pdns-4.1.4/docs/pdns_server.1
--- old/pdns-4.1.3/docs/pdns_server.1   2018-05-24 14:53:31.000000000 +0200
+++ new/pdns-4.1.4/docs/pdns_server.1   2018-08-29 16:08:00.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_SERVER" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "PDNS_SERVER" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_server \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/pdnsutil.1 
new/pdns-4.1.4/docs/pdnsutil.1
--- old/pdns-4.1.3/docs/pdnsutil.1      2018-05-24 14:53:33.000000000 +0200
+++ new/pdns-4.1.4/docs/pdnsutil.1      2018-08-29 16:08:02.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNSUTIL" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "PDNSUTIL" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdnsutil \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/saxfr.1 new/pdns-4.1.4/docs/saxfr.1
--- old/pdns-4.1.3/docs/saxfr.1 2018-05-24 14:53:46.000000000 +0200
+++ new/pdns-4.1.4/docs/saxfr.1 2018-08-29 16:08:15.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "SAXFR" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "SAXFR" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 saxfr \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/sdig.1 new/pdns-4.1.4/docs/sdig.1
--- old/pdns-4.1.3/docs/sdig.1  2018-05-24 14:53:47.000000000 +0200
+++ new/pdns-4.1.4/docs/sdig.1  2018-08-29 16:08:16.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "SDIG" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "SDIG" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 sdig \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/zone2json.1 
new/pdns-4.1.4/docs/zone2json.1
--- old/pdns-4.1.3/docs/zone2json.1     2018-05-24 14:53:33.000000000 +0200
+++ new/pdns-4.1.4/docs/zone2json.1     2018-08-29 16:08:03.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2JSON" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "ZONE2JSON" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2json \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/zone2ldap.1 
new/pdns-4.1.4/docs/zone2ldap.1
--- old/pdns-4.1.3/docs/zone2ldap.1     2018-05-24 14:53:35.000000000 +0200
+++ new/pdns-4.1.4/docs/zone2ldap.1     2018-08-29 16:08:04.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2LDAP" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "ZONE2LDAP" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2ldap \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/docs/zone2sql.1 
new/pdns-4.1.4/docs/zone2sql.1
--- old/pdns-4.1.3/docs/zone2sql.1      2018-05-24 14:53:34.000000000 +0200
+++ new/pdns-4.1.4/docs/zone2sql.1      2018-08-29 16:08:03.000000000 +0200
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2SQL" "1" "May 24, 2018" "4.1" "PowerDNS Recursor"
+.TH "ZONE2SQL" "1" "Aug 29, 2018" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2sql \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/modules/geoipbackend/geoipbackend.cc 
new/pdns-4.1.4/modules/geoipbackend/geoipbackend.cc
--- old/pdns-4.1.3/modules/geoipbackend/geoipbackend.cc 2018-05-24 
14:52:33.000000000 +0200
+++ new/pdns-4.1.4/modules/geoipbackend/geoipbackend.cc 2018-08-29 
16:07:05.000000000 +0200
@@ -452,8 +452,11 @@
 bool GeoIPBackend::queryCountry(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION) {
-    ret = GeoIP_code3_by_id(GeoIP_id_by_addr_gl(gi.second.get(), ip.c_str(), 
gl));
-    return true;
+    int id;
+    if ((id = GeoIP_id_by_addr_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_code3_by_id(id);
+      return true;
+    }
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
     GeoIPRegion* gir = GeoIP_region_by_addr_gl(gi.second.get(), ip.c_str(), 
gl);
@@ -476,8 +479,11 @@
 bool GeoIPBackend::queryCountryV6(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION_V6 ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION_V6) {
-    ret = GeoIP_code3_by_id(GeoIP_id_by_addr_v6_gl(gi.second.get(), 
ip.c_str(), gl));
-    return true;
+    int id;
+    if ((id = GeoIP_id_by_addr_v6_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_code3_by_id(id);
+      return true;
+    }
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
     GeoIPRegion* gir = GeoIP_region_by_addr_v6_gl(gi.second.get(), ip.c_str(), 
gl);
@@ -500,8 +506,11 @@
 bool GeoIPBackend::queryCountry2(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION) {
-    ret = GeoIP_code_by_id(GeoIP_id_by_addr_gl(gi.second.get(), ip.c_str(), 
gl));
-    return true;
+    int id;
+    if ((id = GeoIP_id_by_addr_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_code_by_id(id);
+      return true;
+    }
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
     GeoIPRegion* gir = GeoIP_region_by_addr_gl(gi.second.get(), ip.c_str(), 
gl);
@@ -524,7 +533,11 @@
 bool GeoIPBackend::queryCountry2V6(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION_V6 ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION_V6) {
-    ret = GeoIP_code_by_id(GeoIP_id_by_addr_v6_gl(gi.second.get(), ip.c_str(), 
gl));
+    int id;
+    if ((id = GeoIP_id_by_addr_v6_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_code_by_id(id);
+      return true;
+    }
     return true;
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
@@ -548,8 +561,11 @@
 bool GeoIPBackend::queryContinent(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION) {
-    ret = GeoIP_continent_by_id(GeoIP_id_by_addr_gl(gi.second.get(), 
ip.c_str(), gl));
-    return true;
+    int id;
+    if ((id = GeoIP_id_by_addr_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_continent_by_id(id);
+      return true;
+    }
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
     GeoIPRegion* gir = GeoIP_region_by_addr_gl(gi.second.get(), ip.c_str(), 
gl);
@@ -572,8 +588,11 @@
 bool GeoIPBackend::queryContinentV6(string &ret, GeoIPLookup* gl, const string 
&ip, const geoip_file_t& gi) {
   if (gi.first == GEOIP_COUNTRY_EDITION_V6 ||
       gi.first == GEOIP_LARGE_COUNTRY_EDITION_V6) {
-    ret = GeoIP_continent_by_id(GeoIP_id_by_addr_v6_gl(gi.second.get(), 
ip.c_str(), gl));
-    return true;
+    int id;
+    if ((id = GeoIP_id_by_addr_v6_gl(gi.second.get(), ip.c_str(), gl)) > 0) {
+      ret = GeoIP_continent_by_id(id);
+      return true;
+    }
   } else if (gi.first == GEOIP_REGION_EDITION_REV0 ||
              gi.first == GEOIP_REGION_EDITION_REV1) {
     GeoIPRegion* gir = GeoIP_region_by_addr_v6_gl(gi.second.get(), ip.c_str(), 
gl);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/modules/gmysqlbackend/smysql.cc 
new/pdns-4.1.4/modules/gmysqlbackend/smysql.cc
--- old/pdns-4.1.3/modules/gmysqlbackend/smysql.cc      2018-05-24 
14:52:33.000000000 +0200
+++ new/pdns-4.1.4/modules/gmysqlbackend/smysql.cc      2018-08-29 
16:07:05.000000000 +0200
@@ -32,6 +32,12 @@
 #include "pdns/namespaces.hh"
 #include "pdns/lock.hh"
 
+#if MYSQL_VERSION_ID >= 80000 && !defined(MARIADB_BASE_VERSION)
+// Need to keep this for compatibility with MySQL < 8.0.0, which used typedef 
char my_bool;
+// MariaDB up to 10.4 also always define it.
+typedef bool my_bool;
+#endif
+
 bool SMySQL::s_dolog;
 pthread_mutex_t SMySQL::s_myinitlock = PTHREAD_MUTEX_INITIALIZER;
 
@@ -427,7 +433,7 @@
 #endif
 
     if (d_setIsolation && (retry == 1))
-      mysql_options(&d_db, MYSQL_INIT_COMMAND,"SET SESSION 
tx_isolation='READ-COMMITTED'");
+      mysql_options(&d_db, MYSQL_INIT_COMMAND,"SET SESSION TRANSACTION 
ISOLATION LEVEL READ COMMITTED");
 
     mysql_options(&d_db, MYSQL_READ_DEFAULT_GROUP, d_group.c_str());
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/modules/remotebackend/remotebackend.hh 
new/pdns-4.1.4/modules/remotebackend/remotebackend.hh
--- old/pdns-4.1.3/modules/remotebackend/remotebackend.hh       2018-05-24 
14:52:33.000000000 +0200
+++ new/pdns-4.1.4/modules/remotebackend/remotebackend.hh       2018-08-29 
16:07:05.000000000 +0200
@@ -216,7 +216,7 @@
         string val = asString(value);
         if (val == "0") return false;
         if (val == "1") return true;
-      } catch (JsonException) {};
+      } catch (const JsonException&) {};
       throw JsonException("Json value not convertible to boolean");
     };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/communicator.hh 
new/pdns-4.1.4/pdns/communicator.hh
--- old/pdns-4.1.3/pdns/communicator.hh 2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/communicator.hh 2018-08-29 16:07:05.000000000 +0200
@@ -275,7 +275,7 @@
         struct addrinfo* address = res;
         do {
           if (address->ai_addrlen <= sizeof(remote)) {
-            memcpy(&remote, address->ai_addr, address->ai_addrlen);
+            remote.setSockaddr(address->ai_addr, address->ai_addrlen);
             addresses->push_back(remote.toString());
           }
         } while((address = address->ai_next));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/dbdnsseckeeper.cc 
new/pdns-4.1.4/pdns/dbdnsseckeeper.cc
--- old/pdns-4.1.3/pdns/dbdnsseckeeper.cc       2018-05-24 14:52:33.000000000 
+0200
+++ new/pdns-4.1.4/pdns/dbdnsseckeeper.cc       2018-08-29 16:07:05.000000000 
+0200
@@ -100,7 +100,7 @@
   shared_ptr<DNSCryptoKeyEngine> dpk(DNSCryptoKeyEngine::make(algorithm));
   try{
     dpk->create(bits);
-  } catch (std::runtime_error error){
+  } catch (const std::runtime_error& error){
     throw runtime_error("The algorithm does not support the given bit size.");
   }
   dspk.setKey(dpk);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/dnspacket.cc 
new/pdns-4.1.4/pdns/dnspacket.cc
--- old/pdns-4.1.3/pdns/dnspacket.cc    2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/dnspacket.cc    2018-08-29 16:07:05.000000000 +0200
@@ -599,6 +599,9 @@
   
   qtype=mdp.d_qtype;
   qclass=mdp.d_qclass;
+
+  d_trc = TSIGRecordContent();
+
   return 0;
 }
 catch(std::exception& e) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/dnsrecords.cc 
new/pdns-4.1.4/pdns/dnsrecords.cc
--- old/pdns-4.1.3/pdns/dnsrecords.cc   2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/dnsrecords.cc   2018-08-29 16:07:05.000000000 +0200
@@ -116,7 +116,7 @@
 ComboAddress AAAARecordContent::getCA(int port) const
 {
   ComboAddress ret;
-  memset(&ret, 0, sizeof(ret));
+  ret.reset();
 
   ret.sin4.sin_family=AF_INET6;
   ret.sin6.sin6_port = htons(port);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/dynhandler.cc 
new/pdns-4.1.4/pdns/dynhandler.cc
--- old/pdns-4.1.3/pdns/dynhandler.cc   2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/dynhandler.cc   2018-08-29 16:07:05.000000000 +0200
@@ -261,7 +261,7 @@
   ostringstream os;
   if(parts.size()!=3)
     return "syntax: notify-host domain ip";
-  if(!::arg().mustDo("master") && !::arg().mustDo("slave-renotify"))
+  if(!::arg().mustDo("master") && !(::arg().mustDo("slave") && 
::arg().mustDo("slave-renotify")))
       return "PowerDNS not configured as master or slave with 
re-notifications";
 
   DNSName domain;
@@ -289,7 +289,7 @@
   UeberBackend B;
   if(parts.size()!=2)
     return "syntax: notify domain";
-  if(!::arg().mustDo("master") && !::arg().mustDo("slave-renotify"))
+  if(!::arg().mustDo("master") && !(::arg().mustDo("slave") && 
::arg().mustDo("slave-renotify")))
       return "PowerDNS not configured as master or slave with 
re-notifications";
   L<<Logger::Warning<<"Notification request for domain '"<<parts[1]<<"' 
received from operator"<<endl;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/ednssubnet.cc 
new/pdns-4.1.4/pdns/ednssubnet.cc
--- old/pdns-4.1.3/pdns/ednssubnet.cc   2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/ednssubnet.cc   2018-08-29 16:07:05.000000000 +0200
@@ -57,7 +57,7 @@
       return false;
     if(octetsin > sizeof(address.sin4.sin_addr.s_addr))
       return false;
-    memset(&address, 0, sizeof(address));
+    address.reset();
     address.sin4.sin_family = AF_INET;
     if(octetsin > 0)
       memcpy(&address.sin4.sin_addr.s_addr, options+sizeof(esow), octetsin);
@@ -66,7 +66,8 @@
       return false;
     if(octetsin > sizeof(address.sin6.sin6_addr.s6_addr))
       return false;
-    memset(&address, 0, sizeof(address));
+
+    address.reset();
     address.sin4.sin_family = AF_INET6;
     if(octetsin > 0)
       memcpy(&address.sin6.sin6_addr.s6_addr, options+sizeof(esow), octetsin);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/effective_tld_names.dat 
new/pdns-4.1.4/pdns/effective_tld_names.dat
--- old/pdns-4.1.3/pdns/effective_tld_names.dat 2018-05-24 14:53:52.000000000 
+0200
+++ new/pdns-4.1.4/pdns/effective_tld_names.dat 2018-08-29 16:08:19.000000000 
+0200
@@ -381,8 +381,13 @@
 net.bm
 org.bm
 
-// bn : https://en.wikipedia.org/wiki/.bn
-*.bn
+// bn : http://www.bnnic.bn/faqs
+bn
+com.bn
+edu.bn
+gov.bn
+net.bn
+org.bn
 
 // bo : https://nic.bo/delegacion2015.php#h-1.10
 bo
@@ -546,6 +551,7 @@
 not.br
 ntr.br
 odo.br
+ong.br
 org.br
 osasco.br
 palmas.br
@@ -1239,7 +1245,7 @@
 utazas.hu
 video.hu
 
-// id : https://register.pandi.or.id/
+// id : https://pandi.id/en/domain/registration-requirements/
 id
 ac.id
 biz.id
@@ -1250,6 +1256,7 @@
 my.id
 net.id
 or.id
+ponpes.id
 sch.id
 web.id
 
@@ -3692,8 +3699,16 @@
 seoul.kr
 ulsan.kr
 
-// kw : https://en.wikipedia.org/wiki/.kw
-*.kw
+// kw : https://www.nic.kw/policies/
+// Confirmed by registry <[email protected]>
+kw
+com.kw
+edu.kw
+emb.kw
+gov.kw
+ind.kw
+net.kw
+org.kw
 
 // ky : http://www.icta.ky/da_ky_reg_dom.php
 // Confirmed by registry <[email protected]> 2008-06-17
@@ -8608,9 +8623,6 @@
 // iveco : 2015-09-03 CNH Industrial N.V.
 iveco
 
-// iwc : 2014-06-23 Richemont DNS Inc.
-iwc
-
 // jaguar : 2014-11-13 Jaguar Land Rover Ltd
 jaguar
 
@@ -8989,9 +9001,6 @@
 // menu : 2013-09-11 Wedding TLD2, LLC
 menu
 
-// meo : 2014-11-07 MEO Servicos de Comunicacoes e Multimedia, S.A.
-meo
-
 // merckmsd : 2016-07-14 MSD Registry Holdings, Inc.
 merckmsd
 
@@ -9634,9 +9643,6 @@
 // sap : 2014-03-27 SAP AG
 sap
 
-// sapo : 2014-11-07 MEO Servicos de Comunicacoes e Multimedia, S.A.
-sapo
-
 // sarl : 2014-07-03 Binky Moon, LLC
 sarl
 
@@ -10642,9 +10648,6 @@
 // xn--zfr164b : 2013-11-08 China Organizational Name Administration Center
 政务
 
-// xperia : 2015-05-14 Sony Mobile Communications AB
-xperia
-
 // xyz : 2013-12-05 XYZ.COM LLC
 xyz
 
@@ -10737,6 +10740,7 @@
 // Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/
 // Submitted by Luke Wells <[email protected]>
 cn-north-1.eb.amazonaws.com.cn
+cn-northwest-1.eb.amazonaws.com.cn
 elasticbeanstalk.com
 ap-northeast-1.elasticbeanstalk.com
 ap-northeast-2.elasticbeanstalk.com
@@ -12451,10 +12455,6 @@
 // Submitted by Stefan Neufeind <[email protected]>
 customer.speedpartner.de
 
-// Stackspace : https://www.stackspace.io/
-// Submitted by Lina He <[email protected]>
-stackspace.space
-
 // Storj Labs Inc. : https://storj.io/
 // Submitted by Philip Hutchins <[email protected]>
 storj.farm
@@ -12533,7 +12533,7 @@
 webspace.rocks
 lima.zone
 
-// TransIP : htts://www.transip.nl
+// TransIP : https://www.transip.nl
 // Submitted by Rory Breuk <[email protected]>
 *.transurl.be
 *.transurl.eu
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/iputils.cc 
new/pdns-4.1.4/pdns/iputils.cc
--- old/pdns-4.1.3/pdns/iputils.cc      2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/iputils.cc      2018-08-29 16:07:05.000000000 +0200
@@ -145,7 +145,7 @@
 }
 bool HarvestDestinationAddress(const struct msghdr* msgh, ComboAddress* 
destination)
 {
-  memset(destination, 0, sizeof(*destination));
+  destination->reset();
   const struct cmsghdr* cmsg;
   for (cmsg = CMSG_FIRSTHDR(msgh); cmsg != NULL; cmsg = 
CMSG_NXTHDR(const_cast<struct msghdr*>(msgh), const_cast<struct 
cmsghdr*>(cmsg))) {
 #if defined(IP_PKTINFO)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/iputils.hh 
new/pdns-4.1.4/pdns/iputils.hh
--- old/pdns-4.1.3/pdns/iputils.hh      2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/iputils.hh      2018-08-29 16:07:05.000000000 +0200
@@ -282,6 +282,11 @@
     return ntohs(sin4.sin_port);
   }
 
+  void reset()
+  {
+    memset(&sin4, 0, sizeof(sin4));
+    memset(&sin6, 0, sizeof(sin6));
+  }
 };
 
 /** This exception is thrown by the Netmask class and by extension by the 
NetmaskGroup class */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/misc.cc new/pdns-4.1.4/pdns/misc.cc
--- old/pdns-4.1.3/pdns/misc.cc 2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/misc.cc 2018-08-29 16:07:05.000000000 +0200
@@ -723,7 +723,7 @@
       port = pdns_stou(addr.substr(pos+2));
       portSet = true;
     }
-    catch(std::out_of_range) {
+    catch(const std::out_of_range&) {
       return -1;
     }
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/nameserver.cc 
new/pdns-4.1.4/pdns/nameserver.cc
--- old/pdns-4.1.3/pdns/nameserver.cc   2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/nameserver.cc   2018-08-29 16:07:05.000000000 +0200
@@ -111,8 +111,8 @@
   
     if(!setNonBlocking(s))
       throw PDNSException("Unable to set UDP socket to non-blocking: 
"+stringerror());
-  
-    memset(&locala,0,sizeof(locala));
+
+    locala.reset();
     locala.sin4.sin_family=AF_INET;
 
     if(localname=="0.0.0.0")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/qtype.hh new/pdns-4.1.4/pdns/qtype.hh
--- old/pdns-4.1.3/pdns/qtype.hh        2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/qtype.hh        2018-08-29 16:07:05.000000000 +0200
@@ -170,6 +170,7 @@
       qtype_insert("CNAME", 5);
       qtype_insert("SOA", 6);
       qtype_insert("MR", 9);
+      qtype_insert("WKS", 11);
       qtype_insert("PTR", 12);
       qtype_insert("HINFO", 13);
       qtype_insert("MINFO", 14);
@@ -198,6 +199,7 @@
       qtype_insert("NSEC3", 50);
       qtype_insert("NSEC3PARAM", 51);
       qtype_insert("TLSA", 52);
+      qtype_insert("SMIMEA", 53);
       qtype_insert("RKEY", 57);
       qtype_insert("CDS", 59);
       qtype_insert("CDNSKEY", 60);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/rfc2136handler.cc 
new/pdns-4.1.4/pdns/rfc2136handler.cc
--- old/pdns-4.1.3/pdns/rfc2136handler.cc       2018-05-24 14:52:33.000000000 
+0200
+++ new/pdns-4.1.4/pdns/rfc2136handler.cc       2018-08-29 16:07:05.000000000 
+0200
@@ -33,7 +33,7 @@
 
   bool foundRecord=false;
   DNSResourceRecord rec;
-  di->backend->lookup(QType(QType::ANY), rr->d_name);
+  di->backend->lookup(QType(QType::ANY), rr->d_name, nullptr, di->id);
   while(di->backend->get(rec)) {
     if (!rec.qtype.getCode())
       continue;
@@ -171,7 +171,7 @@
 
 
     bool foundRecord = false;
-    di->backend->lookup(rrType, rr->d_name);
+    di->backend->lookup(rrType, rr->d_name, nullptr, di->id);
     while (di->backend->get(rec)) {
       rrset.push_back(rec);
       foundRecord = true;
@@ -289,7 +289,7 @@
             break;
 
           bool foundShorter = false;
-          di->backend->lookup(QType(QType::ANY), shorter);
+          di->backend->lookup(QType(QType::ANY), shorter, nullptr, di->id);
           while (di->backend->get(rec)) {
             if (rec.qname == rr->d_name && rec.qtype == QType::DS)
               fixDS = true;
@@ -444,7 +444,7 @@
     } // end of NSEC3PARAM delete block
 
 
-    di->backend->lookup(rrType, rr->d_name);
+    di->backend->lookup(rrType, rr->d_name, nullptr, di->id);
     while(di->backend->get(rec)) {
       if (rr->d_class == QClass::ANY) { // 3.4.2.3
         if (rec.qname == di->zone && (rec.qtype == QType::NS || rec.qtype == 
QType::SOA)) // Never delete all SOA and NS's
@@ -867,7 +867,7 @@
       rrVector_t *vec = &preRRSet->second;
 
       DNSResourceRecord rec;
-      di.backend->lookup(QType(QType::ANY), rrSet.first);
+      di.backend->lookup(QType(QType::ANY), rrSet.first, nullptr, di.id);
       uint16_t foundRR=0, matchRR=0;
       while (di.backend->get(rec)) {
         if (rec.qtype == rrSet.second) {
@@ -965,9 +965,12 @@
     }
     for (const auto &rr : cnamesToAdd) {
       DNSResourceRecord rec;
-      di.backend->lookup(QType(QType::ANY), rr->d_name);
+      di.backend->lookup(QType(QType::ANY), rr->d_name, nullptr, di.id);
       while (di.backend->get(rec)) {
         if (rec.qtype != QType::CNAME && rec.qtype != QType::RRSIG) {
+          // leave database handle in a consistent state
+          while (di.backend->get(rec))
+            ;
           L<<Logger::Warning<<msgPrefix<<"Refusing update for " << rr->d_name 
<< "/" << QType(rr->d_type).getName() << ": Data other than CNAME exists for 
the same name"<<endl;
           di.backend->abortTransaction();
           return RCode::Refused;
@@ -977,9 +980,12 @@
     }
     for (const auto &rr : nonCnamesToAdd) {
       DNSResourceRecord rec;
-      di.backend->lookup(QType(QType::CNAME), rr->d_name);
+      di.backend->lookup(QType(QType::CNAME), rr->d_name, nullptr, di.id);
       while (di.backend->get(rec)) {
         if (rec.qtype == QType::CNAME && rr->d_type != QType::RRSIG) {
+          // leave database handle in a consistent state
+          while (di.backend->get(rec))
+            ;
           L<<Logger::Warning<<msgPrefix<<"Refusing update for " << rr->d_name 
<< "/" << QType(rr->d_type).getName() << ": CNAME exists for the same 
name"<<endl;
           di.backend->abortTransaction();
           return RCode::Refused;
@@ -990,7 +996,7 @@
     if (nsRRtoDelete.size()) {
       vector<DNSResourceRecord> nsRRInZone;
       DNSResourceRecord rec;
-      di.backend->lookup(QType(QType::NS), di.zone);
+      di.backend->lookup(QType(QType::NS), di.zone, nullptr, di.id);
       while (di.backend->get(rec)) {
         nsRRInZone.push_back(rec);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/slavecommunicator.cc 
new/pdns-4.1.4/pdns/slavecommunicator.cc
--- old/pdns-4.1.3/pdns/slavecommunicator.cc    2018-05-24 14:52:33.000000000 
+0200
+++ new/pdns-4.1.4/pdns/slavecommunicator.cc    2018-08-29 16:07:05.000000000 
+0200
@@ -743,7 +743,16 @@
         requeue.insert(di);
       }
       else {
-        L<<Logger::Debug<<"Got NOTIFY for "<<di.zone<<", going to check SOA 
serial"<<endl;
+        L<<Logger::Debug<<"Got NOTIFY for "<<di.zone<<", going to check SOA 
serial, our serial is "<<di.serial<<endl;
+        // We received a NOTIFY for a zone. This means at least one of the 
zone's master server is working.
+        // Therefore we delete the zone from the list of failed slave-checks 
to allow immediate checking.
+        const auto wasFailedDomain = d_failedSlaveRefresh.find(di.zone);
+        if (wasFailedDomain != d_failedSlaveRefresh.end()) {
+          L<<Logger::Debug<<"Got NOTIFY for "<<di.zone<<", removing zone from 
list of failed slave-checks and going to check SOA serial"<<endl;
+          d_failedSlaveRefresh.erase(di.zone);
+        } else {
+          L<<Logger::Debug<<"Got NOTIFY for "<<di.zone<<", going to check SOA 
serial"<<endl;
+        }
         rdomains.push_back(di);
       }
     }
@@ -779,9 +788,11 @@
 
     for(DomainInfo& di :  rdomains) {
       const auto failed = d_failedSlaveRefresh.find(di.zone);
-      if (failed != d_failedSlaveRefresh.end() && now < failed->second.second )
+      if (failed != d_failedSlaveRefresh.end() && now < failed->second.second 
) {
         // If the domain has failed before and the time before the next check 
has not expired, skip this domain
+        L<<Logger::Debug<<"Zone '"<<di.zone<<"' is on the list of failed SOA 
checks. Skipping SOA checks until "<< failed->second.second<<endl;
         continue;
+      }
       std::vector<std::string> localaddr;
       SuckRequest sr;
       sr.domain=di.zone;
@@ -877,19 +888,28 @@
 
     if(!ssr.d_freshness.count(di.id)) { // If we don't have an answer for the 
domain
       uint64_t newCount = 1;
+      Lock l(&d_lock);
       const auto failedEntry = d_failedSlaveRefresh.find(di.zone);
       if (failedEntry != d_failedSlaveRefresh.end())
         newCount = d_failedSlaveRefresh[di.zone].first + 1;
       time_t nextCheck = now + std::min(newCount * d_tickinterval, 
(uint64_t)::arg().asNum("soa-retry-default"));
       d_failedSlaveRefresh[di.zone] = {newCount, nextCheck};
-      if (newCount == 1 || newCount % 10 == 0)
-        L<<Logger::Warning<<"Unable to retrieve SOA for "<<di.zone<<", this 
was the "<<(newCount == 1 ? "first" : std::to_string(newCount) + "th")<<" 
time."<<endl;
+      if (newCount == 1) {
+        L<<Logger::Warning<<"Unable to retrieve SOA for "<<di.zone<<
+          ", this was the first time. NOTE: For every subsequent failed SOA 
check the domain will be suspended from freshness checks for 'num-errors x "<<
+          d_tickinterval<<" seconds', with a maximum of 
"<<(uint64_t)::arg().asNum("soa-retry-default")<<" seconds. Skipping SOA checks 
until "<<nextCheck<<endl;
+      } else if (newCount % 10 == 0) {
+        L<<Logger::Warning<<"Unable to retrieve SOA for "<<di.zone<<", this 
was the "<<std::to_string(newCount)<<"th time. Skipping SOA checks until 
"<<nextCheck<<endl;
+      }
       continue;
     }
 
-    const auto wasFailedDomain = d_failedSlaveRefresh.find(di.zone);
-    if (wasFailedDomain != d_failedSlaveRefresh.end())
-      d_failedSlaveRefresh.erase(di.zone);
+    {
+      Lock l(&d_lock);
+      const auto wasFailedDomain = d_failedSlaveRefresh.find(di.zone);
+      if (wasFailedDomain != d_failedSlaveRefresh.end())
+        d_failedSlaveRefresh.erase(di.zone);
+    }
 
     uint32_t theirserial = ssr.d_freshness[di.id].theirSerial, ourserial = 
di.serial;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/test-iputils_hh.cc 
new/pdns-4.1.4/pdns/test-iputils_hh.cc
--- old/pdns-4.1.3/pdns/test-iputils_hh.cc      2018-05-24 14:52:33.000000000 
+0200
+++ new/pdns-4.1.4/pdns/test-iputils_hh.cc      2018-08-29 16:07:05.000000000 
+0200
@@ -60,8 +60,8 @@
 
 BOOST_AUTO_TEST_CASE(test_ComboAddressCompare) {
   ComboAddress a, b;
-  memset(&a, 0, sizeof(a));
-  memset(&b, 0, sizeof(b));
+  a.reset();
+  b.reset();
   BOOST_CHECK(!(a<b));
   BOOST_CHECK(!(a>b));
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.3/pdns/ws-auth.cc 
new/pdns-4.1.4/pdns/ws-auth.cc
--- old/pdns-4.1.3/pdns/ws-auth.cc      2018-05-24 14:52:33.000000000 +0200
+++ new/pdns-4.1.4/pdns/ws-auth.cc      2018-08-29 16:07:05.000000000 +0200
@@ -369,6 +369,9 @@
         records.push_back(rr);
       }
       sort(records.begin(), records.end(), [](const DNSResourceRecord& a, 
const DNSResourceRecord& b) {
+              /* if you ever want to update this comparison function,
+                 please be aware that you will also need to update the 
conditions in the code merging
+                 the records and comments below */
               if (a.qname == b.qname) {
                   return b.qtype < a.qtype;
               }
@@ -384,6 +387,9 @@
         comments.push_back(comment);
       }
       sort(comments.begin(), comments.end(), [](const Comment& a, const 
Comment& b) {
+              /* if you ever want to update this comparison function,
+                 please be aware that you will also need to update the 
conditions in the code merging
+                 the records and comments below */
               if (a.qname == b.qname) {
                   return b.qtype < a.qtype;
               }
@@ -402,7 +408,8 @@
     auto cit = comments.begin();
 
     while (rit != records.end() || cit != comments.end()) {
-      if (cit == comments.end() || (rit != records.end() && 
(cit->qname.toString() <= rit->qname.toString() || cit->qtype < rit->qtype || 
cit->qtype == rit->qtype))) {
+      // if you think this should be rit < cit instead of cit < rit, note the 
b < a instead of a < b in the sort comparison functions above
+      if (cit == comments.end() || (rit != records.end() && (rit->qname == 
cit->qname ? (cit->qtype < rit->qtype || cit->qtype == rit->qtype) : cit->qname 
< rit->qname))) {
         current_qname = rit->qname;
         current_qtype = rit->qtype;
         ttl = rit->ttl;
@@ -1205,9 +1212,8 @@
 static void checkDuplicateRecords(vector<DNSResourceRecord>& records) {
   sort(records.begin(), records.end(),
     [](const DNSResourceRecord& rec_a, const DNSResourceRecord& rec_b) -> bool 
{
-      return rec_a.qname.toString() > rec_b.qname.toString() || \
-        rec_a.qtype.getCode() > rec_b.qtype.getCode() || \
-        rec_a.content < rec_b.content;
+      /* we need _strict_ weak ordering */
+      return std::tie(rec_a.qname, rec_a.qtype, rec_a.content) < 
std::tie(rec_b.qname, rec_b.qtype, rec_b.content);
     }
   );
   DNSResourceRecord previous;



Reply via email to