Hello community,

here is the log from the commit of package pdns for openSUSE:Factory checked in 
at 2019-03-24 15:01:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pdns (Old)
 and      /work/SRC/openSUSE:Factory/.pdns.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pdns"

Sun Mar 24 15:01:15 2019 rev:61 rq:687824 version:4.1.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/pdns/pdns.changes        2019-03-20 
13:20:11.745330670 +0100
+++ /work/SRC/openSUSE:Factory/.pdns.new.25356/pdns.changes     2019-03-24 
15:01:15.843169579 +0100
@@ -1,0 +2,15 @@
+Fri Mar 22 14:48:38 UTC 2019 - Michael Ströder <[email protected]>
+
+- Update to 4.1.8
+  * #7604: Correctly interpret an empty AXFR response to an IXFR query,
+  * #7610: Fix replying from ANY address for non-standard port,
+  * #7609: Fix rectify for ENT records in narrow zones,
+  * #7607: Do not compress the root,
+  * #7608: Fix dot stripping in `setcontent()`,
+  * #7605: Fix invalid SOA record in MySQL which prevented the authoritative 
server from starting,
+  * #7603: Prevent leak of file descriptor if running out of ports for 
incoming AXFR,
+  * #7602: Fix API search failed with “Commands out of sync; you can’t run 
this command now”,
+  * #7509: Plug `mysql_thread_init` memory leak,
+  * #7567: EL6: fix `CXXFLAGS` to build with compiler optimizations.
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ pdns.spec ++++++
--- /var/tmp/diff_new_pack.rogj7r/_old  2019-03-24 15:01:16.339169515 +0100
+++ /var/tmp/diff_new_pack.rogj7r/_new  2019-03-24 15:01:16.343169515 +0100
@@ -17,11 +17,11 @@
 
 
 Name:           pdns
-Version:        4.1.7
+Version:        4.1.8
 Release:        0
 #
 %define pkg_name       pdns
-%define pkg_version 4.1.7
+%define pkg_version 4.1.8
 #
 %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.7.tar.bz2 -> pdns-4.1.8.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/.version new/pdns-4.1.8/.version
--- old/pdns-4.1.7/.version     2019-03-18 11:52:25.000000000 +0100
+++ new/pdns-4.1.8/.version     2019-03-22 12:48:11.000000000 +0100
@@ -1 +1 @@
-4.1.7
+4.1.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/configure new/pdns-4.1.8/configure
--- old/pdns-4.1.7/configure    2019-03-18 11:52:22.000000000 +0100
+++ new/pdns-4.1.8/configure    2019-03-22 12:48:09.000000000 +0100
@@ -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.7.
+# Generated by GNU Autoconf 2.69 for pdns 4.1.8.
 #
 #
 # 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.7'
-PACKAGE_STRING='pdns 4.1.7'
+PACKAGE_VERSION='4.1.8'
+PACKAGE_STRING='pdns 4.1.8'
 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.7 to adapt to many kinds of systems.
+\`configure' configures pdns 4.1.8 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.7:";;
+     short | recursive ) echo "Configuration of pdns 4.1.8:";;
    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.7
+pdns configure 4.1.8
 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.7, which was
+It was created by pdns $as_me 4.1.8, 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.7'
+ VERSION='4.1.8'
 
 
 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.7, which was
+This file was extended by pdns $as_me 4.1.8, 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.7
+pdns config.status 4.1.8
 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.7/docs/calidns.1 
new/pdns-4.1.8/docs/calidns.1
--- old/pdns-4.1.7/docs/calidns.1       2019-03-18 11:55:30.000000000 +0100
+++ new/pdns-4.1.8/docs/calidns.1       2019-03-22 12:49:30.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CALIDNS" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "CALIDNS" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 calidns \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnsbulktest.1 
new/pdns-4.1.8/docs/dnsbulktest.1
--- old/pdns-4.1.7/docs/dnsbulktest.1   2019-03-18 11:56:22.000000000 +0100
+++ new/pdns-4.1.8/docs/dnsbulktest.1   2019-03-22 12:49:49.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSBULKTEST" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSBULKTEST" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsbulktest \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnsgram.1 
new/pdns-4.1.8/docs/dnsgram.1
--- old/pdns-4.1.7/docs/dnsgram.1       2019-03-18 11:55:34.000000000 +0100
+++ new/pdns-4.1.8/docs/dnsgram.1       2019-03-22 12:49:31.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSGRAM" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSGRAM" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsgram \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnspcap2protobuf.1 
new/pdns-4.1.8/docs/dnspcap2protobuf.1
--- old/pdns-4.1.7/docs/dnspcap2protobuf.1      2019-03-18 11:56:29.000000000 
+0100
+++ new/pdns-4.1.8/docs/dnspcap2protobuf.1      2019-03-22 12:49:52.000000000 
+0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSPCAP2PROTOBUF" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSPCAP2PROTOBUF" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnspcap2protobuf \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnsreplay.1 
new/pdns-4.1.8/docs/dnsreplay.1
--- old/pdns-4.1.7/docs/dnsreplay.1     2019-03-18 11:55:38.000000000 +0100
+++ new/pdns-4.1.8/docs/dnsreplay.1     2019-03-22 12:49:33.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSREPLAY" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSREPLAY" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsreplay \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnsscan.1 
new/pdns-4.1.8/docs/dnsscan.1
--- old/pdns-4.1.7/docs/dnsscan.1       2019-03-18 11:55:42.000000000 +0100
+++ new/pdns-4.1.8/docs/dnsscan.1       2019-03-22 12:49:34.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSSCAN" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSSCAN" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsscan \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnsscope.1 
new/pdns-4.1.8/docs/dnsscope.1
--- old/pdns-4.1.7/docs/dnsscope.1      2019-03-18 11:55:46.000000000 +0100
+++ new/pdns-4.1.8/docs/dnsscope.1      2019-03-22 12:49:36.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSSCOPE" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSSCOPE" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnsscope \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnstcpbench.1 
new/pdns-4.1.8/docs/dnstcpbench.1
--- old/pdns-4.1.7/docs/dnstcpbench.1   2019-03-18 11:56:26.000000000 +0100
+++ new/pdns-4.1.8/docs/dnstcpbench.1   2019-03-22 12:49:50.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSTCPBENCH" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSTCPBENCH" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnstcpbench \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dnswasher.1 
new/pdns-4.1.8/docs/dnswasher.1
--- old/pdns-4.1.7/docs/dnswasher.1     2019-03-18 11:55:49.000000000 +0100
+++ new/pdns-4.1.8/docs/dnswasher.1     2019-03-22 12:49:37.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DNSWASHER" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DNSWASHER" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dnswasher \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/dumresp.1 
new/pdns-4.1.8/docs/dumresp.1
--- old/pdns-4.1.7/docs/dumresp.1       2019-03-18 11:55:53.000000000 +0100
+++ new/pdns-4.1.8/docs/dumresp.1       2019-03-22 12:49:38.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "DUMRESP" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "DUMRESP" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 dumresp \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/ixplore.1 
new/pdns-4.1.8/docs/ixplore.1
--- old/pdns-4.1.7/docs/ixplore.1       2019-03-18 11:55:56.000000000 +0100
+++ new/pdns-4.1.8/docs/ixplore.1       2019-03-22 12:49:40.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "IXPLORE" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "IXPLORE" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 ixplore \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/nproxy.1 new/pdns-4.1.8/docs/nproxy.1
--- old/pdns-4.1.7/docs/nproxy.1        2019-03-18 11:56:00.000000000 +0100
+++ new/pdns-4.1.8/docs/nproxy.1        2019-03-22 12:49:41.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NPROXY" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "NPROXY" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 nproxy \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/nsec3dig.1 
new/pdns-4.1.8/docs/nsec3dig.1
--- old/pdns-4.1.7/docs/nsec3dig.1      2019-03-18 11:56:04.000000000 +0100
+++ new/pdns-4.1.8/docs/nsec3dig.1      2019-03-22 12:49:43.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "NSEC3DIG" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "NSEC3DIG" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 nsec3dig \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/pdns_control.1 
new/pdns-4.1.8/docs/pdns_control.1
--- old/pdns-4.1.7/docs/pdns_control.1  2019-03-18 11:55:11.000000000 +0100
+++ new/pdns-4.1.8/docs/pdns_control.1  2019-03-22 12:49:23.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_CONTROL" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "PDNS_CONTROL" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_control \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/pdns_notify.1 
new/pdns-4.1.8/docs/pdns_notify.1
--- old/pdns-4.1.7/docs/pdns_notify.1   2019-03-18 11:56:08.000000000 +0100
+++ new/pdns-4.1.8/docs/pdns_notify.1   2019-03-22 12:49:44.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_NOTIFY" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "PDNS_NOTIFY" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_notify \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/pdns_server.1 
new/pdns-4.1.8/docs/pdns_server.1
--- old/pdns-4.1.7/docs/pdns_server.1   2019-03-18 11:55:06.000000000 +0100
+++ new/pdns-4.1.8/docs/pdns_server.1   2019-03-22 12:49:21.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNS_SERVER" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "PDNS_SERVER" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdns_server \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/pdnsutil.1 
new/pdns-4.1.8/docs/pdnsutil.1
--- old/pdns-4.1.7/docs/pdnsutil.1      2019-03-18 11:55:15.000000000 +0100
+++ new/pdns-4.1.8/docs/pdnsutil.1      2019-03-22 12:49:24.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PDNSUTIL" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "PDNSUTIL" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 pdnsutil \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/saxfr.1 new/pdns-4.1.8/docs/saxfr.1
--- old/pdns-4.1.7/docs/saxfr.1 2019-03-18 11:56:12.000000000 +0100
+++ new/pdns-4.1.8/docs/saxfr.1 2019-03-22 12:49:46.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "SAXFR" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "SAXFR" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 saxfr \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/sdig.1 new/pdns-4.1.8/docs/sdig.1
--- old/pdns-4.1.7/docs/sdig.1  2019-03-18 11:56:17.000000000 +0100
+++ new/pdns-4.1.8/docs/sdig.1  2019-03-22 12:49:47.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "SDIG" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "SDIG" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 sdig \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/zone2json.1 
new/pdns-4.1.8/docs/zone2json.1
--- old/pdns-4.1.7/docs/zone2json.1     2019-03-18 11:55:19.000000000 +0100
+++ new/pdns-4.1.8/docs/zone2json.1     2019-03-22 12:49:25.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2JSON" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "ZONE2JSON" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2json \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/zone2ldap.1 
new/pdns-4.1.8/docs/zone2ldap.1
--- old/pdns-4.1.7/docs/zone2ldap.1     2019-03-18 11:55:26.000000000 +0100
+++ new/pdns-4.1.8/docs/zone2ldap.1     2019-03-22 12:49:28.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2LDAP" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "ZONE2LDAP" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2ldap \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/docs/zone2sql.1 
new/pdns-4.1.8/docs/zone2sql.1
--- old/pdns-4.1.7/docs/zone2sql.1      2019-03-18 11:55:22.000000000 +0100
+++ new/pdns-4.1.8/docs/zone2sql.1      2019-03-22 12:49:26.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "ZONE2SQL" "1" "Mar 18, 2019" "4.1" "PowerDNS Recursor"
+.TH "ZONE2SQL" "1" "Mar 22, 2019" "4.1" "PowerDNS Recursor"
 .SH NAME
 zone2sql \- 
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/modules/gmysqlbackend/gmysqlbackend.cc 
new/pdns-4.1.8/modules/gmysqlbackend/gmysqlbackend.cc
--- old/pdns-4.1.7/modules/gmysqlbackend/gmysqlbackend.cc       2019-03-18 
11:51:54.000000000 +0100
+++ new/pdns-4.1.8/modules/gmysqlbackend/gmysqlbackend.cc       2019-03-22 
12:47:55.000000000 +0100
@@ -59,7 +59,8 @@
                    getArg("password"),
                    getArg("group"),
                    mustDo("innodb-read-committed"),
-                   getArgAsNum("timeout")));
+                   getArgAsNum("timeout"),
+                   mustDo("thread-cleanup")));
 }
 
 class gMySQLFactory : public BackendFactory
@@ -78,6 +79,7 @@
     declare(suffix,"group", "Database backend MySQL 'group' to connect as", 
"client");
     declare(suffix,"innodb-read-committed","Use InnoDB READ-COMMITTED 
transaction isolation level","yes");
     declare(suffix,"timeout", "The timeout in seconds for each attempt to 
read/write to the server", "10");
+    declare(suffix,"thread-cleanup","Explicitly call mysql_thread_end() when 
threads end","no");
 
     declare(suffix,"dnssec","Enable DNSSEC processing","no");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/modules/gmysqlbackend/smysql.cc 
new/pdns-4.1.8/modules/gmysqlbackend/smysql.cc
--- old/pdns-4.1.7/modules/gmysqlbackend/smysql.cc      2019-03-18 
11:51:54.000000000 +0100
+++ new/pdns-4.1.8/modules/gmysqlbackend/smysql.cc      2019-03-22 
12:47:55.000000000 +0100
@@ -38,6 +38,32 @@
 typedef bool my_bool;
 #endif
 
+/*
+ * Older versions of the MySQL and MariaDB client leak memory
+ * because they expect the application to call mysql_thread_end()
+ * when a thread ends. This thread_local static object provides
+ * that closure, but only when the user has asked for it
+ * by setting gmysql-thread-cleanup.
+ * For more discussion, see https://github.com/PowerDNS/pdns/issues/6231
+ */
+class MySQLThreadCloser
+{
+public:
+  ~MySQLThreadCloser() {
+    if(d_enabled) {
+      mysql_thread_end();
+    }
+  }
+  void enable() {
+   d_enabled = true;
+  }
+
+private:
+  bool d_enabled = false;
+};
+
+static thread_local MySQLThreadCloser threadcloser;
+
 bool SMySQL::s_dolog;
 pthread_mutex_t SMySQL::s_myinitlock = PTHREAD_MUTEX_INITIALIZER;
 
@@ -411,6 +437,10 @@
   int retry=1;
 
   Lock l(&s_myinitlock);
+  if (d_threadCleanup) {
+    threadcloser.enable();
+  }
+
   if (!mysql_init(&d_db))
     throw sPerrorException("Unable to initialize mysql driver");
 
@@ -459,8 +489,8 @@
 }
 
 SMySQL::SMySQL(const string &database, const string &host, uint16_t port, 
const string &msocket, const string &user,
-               const string &password, const string &group, bool setIsolation, 
unsigned int timeout):
-  d_database(database), d_host(host), d_msocket(msocket), d_user(user), 
d_password(password), d_group(group), d_timeout(timeout), d_port(port), 
d_setIsolation(setIsolation)
+               const string &password, const string &group, bool setIsolation, 
unsigned int timeout, bool threadCleanup):
+  d_database(database), d_host(host), d_msocket(msocket), d_user(user), 
d_password(password), d_group(group), d_timeout(timeout), d_port(port), 
d_setIsolation(setIsolation), d_threadCleanup(threadCleanup)
 {
   connect();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/modules/gmysqlbackend/smysql.hh 
new/pdns-4.1.8/modules/gmysqlbackend/smysql.hh
--- old/pdns-4.1.7/modules/gmysqlbackend/smysql.hh      2019-03-18 
11:51:54.000000000 +0100
+++ new/pdns-4.1.8/modules/gmysqlbackend/smysql.hh      2019-03-22 
12:47:55.000000000 +0100
@@ -32,7 +32,8 @@
   SMySQL(const string &database, const string &host="", uint16_t port=0,
          const string &msocket="",const string &user="",
          const string &password="", const string &group="",
-         bool setIsolation=false, unsigned int timeout=10);
+         bool setIsolation=false, unsigned int timeout=10,
+         bool threadCleanup=false);
 
   ~SMySQL();
 
@@ -61,6 +62,7 @@
   unsigned int d_timeout;
   uint16_t d_port;
   bool d_setIsolation;
+  bool d_threadCleanup;
 };
 
 #endif /* SSMYSQL_HH */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/backends/gsql/gsqlbackend.cc 
new/pdns-4.1.8/pdns/backends/gsql/gsqlbackend.cc
--- old/pdns-4.1.7/pdns/backends/gsql/gsqlbackend.cc    2019-03-18 
11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/backends/gsql/gsqlbackend.cc    2019-03-22 
12:47:55.000000000 +0100
@@ -370,31 +370,42 @@
   }
 
   vector<DomainInfo> allSlaves;
-  int numanswers=d_result.size();
-  for(int n=0;n<numanswers;++n) { // id,name,master,last_check
+
+  for(const auto& row : d_result) { // id,name,master,last_check
     DomainInfo sd;
-    ASSERT_ROW_COLUMNS("info-all-slaves-query", d_result[n], 4);
-    sd.id=pdns_stou(d_result[n][0]);
+    ASSERT_ROW_COLUMNS("info-all-slaves-query", row, 4);
     try {
-      sd.zone= DNSName(d_result[n][1]);
+      sd.id=pdns_stou(row[0]);
+      sd.zone= DNSName(row[1]);
+
+      stringtok(sd.masters, row[2], ", \t");
+      sd.last_check=pdns_stou(row[3]);
+      sd.backend=this;
+      sd.kind=DomainInfo::Slave;
+      allSlaves.push_back(sd);
     } catch (...) {
       continue;
     }
-    stringtok(sd.masters, d_result[n][2], ", \t");
-    sd.last_check=pdns_stou(d_result[n][3]);
-    sd.backend=this;
-    sd.kind=DomainInfo::Slave;
-    allSlaves.push_back(sd);
   }
 
-  for(vector<DomainInfo>::iterator i=allSlaves.begin();i!=allSlaves.end();++i) 
{
-    SOAData sdata;
-    sdata.serial=0;
-    sdata.refresh=0;
-    getSOA(i->zone,sdata);
-    if((time_t)(i->last_check+sdata.refresh) < time(0)) {
-      i->serial=sdata.serial;
-      unfreshDomains->push_back(*i);
+  for (auto& slave : allSlaves) {
+    try {
+      SOAData sdata;
+      sdata.serial=0;
+      sdata.refresh=0;
+      getSOA(slave.zone, sdata);
+      if(static_cast<time_t>(slave.last_check + sdata.refresh) < 
time(nullptr)) {
+        slave.serial=sdata.serial;
+        unfreshDomains->push_back(slave);
+      }
+    }
+    catch(const std::exception& exp) {
+      L<<Logger::Warning<<"Error while parsing SOA data for slave zone 
'"<<slave.zone.toLogString()<<"': "<<exp.what()<<endl;
+      continue;
+    }
+    catch(...) {
+      L<<Logger::Warning<<"Error while parsing SOA data for slave zone 
'"<<slave.zone.toLogString()<<"', skipping"<<endl;
+      continue;
     }
   }
 }
@@ -1726,7 +1737,7 @@
       result.push_back(comment);
     }
 
-    d_SearchRecordsQuery_stmt->reset();
+    d_SearchCommentsQuery_stmt->reset();
 
     return true;
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/dbdnsseckeeper.cc 
new/pdns-4.1.8/pdns/dbdnsseckeeper.cc
--- old/pdns-4.1.7/pdns/dbdnsseckeeper.cc       2019-03-18 11:51:54.000000000 
+0100
+++ new/pdns-4.1.8/pdns/dbdnsseckeeper.cc       2019-03-22 12:47:55.000000000 
+0100
@@ -691,7 +691,7 @@
   }
 
   set<DNSName> nsec3set;
-  if (haveNSEC3 && !narrow) {
+  if (haveNSEC3 && (!narrow || !isOptOut)) {
     for (auto &loopRR: rrs) {
       bool skip=false;
       DNSName shorter = loopRR.qname;
@@ -742,12 +742,12 @@
 
     if(haveNSEC3) // NSEC3
     {
-      if(!narrow && nsec3set.count(qname)) {
-        ordername=DNSName(toBase32Hex(hashQNameWithSalt(ns3pr, qname)));
-        if(!realrr)
+      if(nsec3set.count(qname)) {
+        if(!narrow)
+          ordername=DNSName(toBase32Hex(hashQNameWithSalt(ns3pr, qname)));
+        if(!realrr && !isOptOut)
           auth=true;
-      } else if(!realrr)
-        auth=false;
+      }
     }
     else if (realrr) // NSEC
       ordername=qname.makeRelative(zone);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/dnsrecords.cc 
new/pdns-4.1.8/pdns/dnsrecords.cc
--- old/pdns-4.1.7/pdns/dnsrecords.cc   2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/dnsrecords.cc   2019-03-22 12:47:55.000000000 +0100
@@ -38,7 +38,7 @@
     case QType::DNAME:
     case QType::NS:
     case QType::PTR:
-      if(!content.empty())
+      if (content.size() >= 2 && *(content.rbegin()) == '.')
         boost::erase_tail(content, 1);
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/dnswriter.cc 
new/pdns-4.1.8/pdns/dnswriter.cc
--- old/pdns-4.1.7/pdns/dnswriter.cc    2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/dnswriter.cc    2019-03-22 12:47:55.000000000 +0100
@@ -79,7 +79,7 @@
   commit();
   d_rollbackmarker=d_content.size();
 
-  if(compress && !name.empty() && d_qname==name) {  // don't do the whole 
label compression thing if we *know* we can get away with "see question" - 
except when compressing the root
+  if(compress && !name.isRoot() && d_qname==name) {  // don't do the whole 
label compression thing if we *know* we can get away with "see question" - 
except when compressing the root
     static unsigned char marker[2]={0xc0, 0x0c};
     d_content.insert(d_content.end(), (const char *) &marker[0], (const char 
*) &marker[2]);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/ixfr.cc new/pdns-4.1.8/pdns/ixfr.cc
--- old/pdns-4.1.7/pdns/ixfr.cc 2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/ixfr.cc 2019-03-22 12:47:55.000000000 +0100
@@ -59,6 +59,12 @@
     // the serial of this SOA record is the serial of the
     // zone before the removals and updates of this sequence
     if (sr->d_st.serial == masterSOA->d_st.serial) {
+      if (records.size() == 2) {
+        // if the entire update is two SOAs records with the same
+        // serial, this is actually an empty AXFR!
+        return {{remove, records}};
+      }
+
       // if it's the final SOA, there is nothing for us to see
       break;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/nameserver.cc 
new/pdns-4.1.8/pdns/nameserver.cc
--- old/pdns-4.1.7/pdns/nameserver.cc   2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/nameserver.cc   2019-03-22 12:47:55.000000000 +0100
@@ -112,10 +112,12 @@
     if(!setNonBlocking(s))
       throw PDNSException("Unable to set UDP socket to non-blocking: 
"+stringerror());
 
-    locala.reset();
-    locala.sin4.sin_family=AF_INET;
+    locala=ComboAddress(localname, ::arg().asNum("local-port"));
+
+    if(locala.sin4.sin_family != AF_INET)
+      throw PDNSException("Attempting to bind IPv4 socket to IPv6 address");
 
-    if(localname=="0.0.0.0")
+    if(IsAnyAddress(locala))
       setsockopt(s, IPPROTO_IP, GEN_IP_PKTINFO, &one, sizeof(one));
 
     if (!setSocketTimestamps(s))
@@ -130,9 +132,6 @@
     if( ::arg().mustDo("non-local-bind") )
        Utility::setBindAny(AF_INET, s);
 
-    locala=ComboAddress(localname, ::arg().asNum("local-port"));
-    if(locala.sin4.sin_family != AF_INET) 
-      throw PDNSException("Attempting to bind IPv4 socket to IPv6 address");
 
     if( !d_additional_socket )
         g_localaddresses.push_back(locala);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/resolver.cc 
new/pdns-4.1.8/pdns/resolver.cc
--- old/pdns-4.1.7/pdns/resolver.cc     2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/resolver.cc     2019-03-22 12:47:55.000000000 +0100
@@ -86,10 +86,11 @@
   }
   else {
     // tcp, let the kernel figure out the port
-    // cerr<<"letting kernel pick TCP port"<<endl;
     ourLocal.sin4.sin_port = 0;
-    if(::bind(sock, (struct sockaddr *)&ourLocal, ourLocal.getSocklen()) < 0)
+    if(::bind(sock, (struct sockaddr *)&ourLocal, ourLocal.getSocklen()) < 0) {
+      closesocket(sock);
       throw PDNSException("Resolver binding to local TCP socket on 
"+ourLocal.toString()+": "+stringerror());
+    }
   }
   return sock;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pdns-4.1.7/pdns/test-ixfr_cc.cc 
new/pdns-4.1.8/pdns/test-ixfr_cc.cc
--- old/pdns-4.1.7/pdns/test-ixfr_cc.cc 2019-03-18 11:51:54.000000000 +0100
+++ new/pdns-4.1.8/pdns/test-ixfr_cc.cc 2019-03-22 12:47:55.000000000 +0100
@@ -211,7 +211,14 @@
 
   auto ret = processIXFRRecords(master, zone, records, 
std::dynamic_pointer_cast<SOARecordContent>(masterSOA));
 
-  BOOST_CHECK_EQUAL(ret.size(), 0);
+  // this is actually an empty AXFR
+  BOOST_CHECK_EQUAL(ret.size(), 1);
+  // nothing in the deletion part then
+  BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0);
+  // and the two SOAs in the addition part
+  BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2);
+  BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, 
QType(QType::SOA).getCode());
+  BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, 
QType(QType::SOA).getCode());
 }
 
 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_records) {



Reply via email to