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) {
