Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pdns-recursor for openSUSE:Factory checked in at 2023-04-04 21:26:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pdns-recursor (Old) and /work/SRC/openSUSE:Factory/.pdns-recursor.new.19717 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pdns-recursor" Tue Apr 4 21:26:47 2023 rev:63 rq:1077167 version:4.8.4 Changes: -------- --- /work/SRC/openSUSE:Factory/pdns-recursor/pdns-recursor.changes 2023-03-07 16:51:19.289896538 +0100 +++ /work/SRC/openSUSE:Factory/.pdns-recursor.new.19717/pdns-recursor.changes 2023-04-04 21:26:54.387402187 +0200 @@ -1,0 +2,7 @@ +Tue Apr 4 09:04:14 UTC 2023 - Adam Majer <adam.ma...@suse.de> + +- update to 4.8.4 + * Deterred spoofing attempts can lead to authoritative servers + being marked unavailable (bsc#1209897, CVE-2023-26437) + +------------------------------------------------------------------- Old: ---- pdns-recursor-4.8.3.tar.bz2 pdns-recursor-4.8.3.tar.bz2.sig New: ---- pdns-recursor-4.8.4.tar.bz2 pdns-recursor-4.8.4.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pdns-recursor.spec ++++++ --- /var/tmp/diff_new_pack.04JWgL/_old 2023-04-04 21:26:55.127406388 +0200 +++ /var/tmp/diff_new_pack.04JWgL/_new 2023-04-04 21:26:55.131406411 +0200 @@ -25,7 +25,7 @@ %endif Name: pdns-recursor -Version: 4.8.3 +Version: 4.8.4 Release: 0 BuildRequires: autoconf BuildRequires: automake ++++++ pdns-recursor-4.8.3.tar.bz2 -> pdns-recursor-4.8.4.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/configure new/pdns-recursor-4.8.4/configure --- old/pdns-recursor-4.8.3/configure 2023-03-06 15:15:22.000000000 +0100 +++ new/pdns-recursor-4.8.4/configure 2023-03-27 17:09:30.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-recursor 4.8.3. +# Generated by GNU Autoconf 2.69 for pdns-recursor 4.8.4. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='pdns-recursor' PACKAGE_TARNAME='pdns-recursor' -PACKAGE_VERSION='4.8.3' -PACKAGE_STRING='pdns-recursor 4.8.3' +PACKAGE_VERSION='4.8.4' +PACKAGE_STRING='pdns-recursor 4.8.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1552,7 +1552,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-recursor 4.8.3 to adapt to many kinds of systems. +\`configure' configures pdns-recursor 4.8.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1623,7 +1623,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pdns-recursor 4.8.3:";; + short | recursive ) echo "Configuration of pdns-recursor 4.8.4:";; esac cat <<\_ACEOF @@ -1810,7 +1810,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pdns-recursor configure 4.8.3 +pdns-recursor configure 4.8.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2569,7 +2569,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-recursor $as_me 4.8.3, which was +It was created by pdns-recursor $as_me 4.8.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3437,7 +3437,7 @@ # Define the identity of the package. PACKAGE='pdns-recursor' - VERSION='4.8.3' + VERSION='4.8.4' cat >>confdefs.h <<_ACEOF @@ -28247,7 +28247,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pdns-recursor $as_me 4.8.3, which was +This file was extended by pdns-recursor $as_me 4.8.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -28313,7 +28313,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-recursor config.status 4.8.3 +pdns-recursor config.status 4.8.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-recursor-4.8.3/configure.ac new/pdns-recursor-4.8.4/configure.ac --- old/pdns-recursor-4.8.3/configure.ac 2023-03-06 15:15:12.000000000 +0100 +++ new/pdns-recursor-4.8.4/configure.ac 2023-03-27 17:09:19.000000000 +0200 @@ -1,6 +1,6 @@ AC_PREREQ([2.69]) -AC_INIT([pdns-recursor], [4.8.3]) +AC_INIT([pdns-recursor], [4.8.4]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip tar-ustar -Wno-portability subdir-objects parallel-tests 1.11]) AM_SILENT_RULES([yes]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/effective_tld_names.dat new/pdns-recursor-4.8.4/effective_tld_names.dat --- old/pdns-recursor-4.8.3/effective_tld_names.dat 2023-03-06 15:16:22.000000000 +0100 +++ new/pdns-recursor-4.8.4/effective_tld_names.dat 2023-03-27 17:10:37.000000000 +0200 @@ -7189,7 +7189,7 @@ // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2023-02-22T15:15:03Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2023-03-18T15:13:13Z // This list is auto-generated, don't edit it manually. // aaa : 2015-02-26 American Automobile Association, Inc. aaa @@ -8898,9 +8898,6 @@ // lincoln : 2014-11-13 Ford Motor Company lincoln -// linde : 2014-12-04 Linde Aktiengesellschaft -linde - // link : 2013-11-14 Nova Registry Ltd link @@ -8967,9 +8964,6 @@ // luxury : 2013-10-17 Luxury Partners, LLC luxury -// macys : 2015-07-31 Macys, Inc. -macys - // madrid : 2014-05-01 Comunidad de Madrid madrid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/pdns_recursor.1 new/pdns-recursor-4.8.4/pdns_recursor.1 --- old/pdns-recursor-4.8.3/pdns_recursor.1 2023-03-06 15:16:22.000000000 +0100 +++ new/pdns-recursor-4.8.4/pdns_recursor.1 2023-03-27 17:10:37.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "PDNS_RECURSOR" "1" "Mar 06, 2023" "" "PowerDNS Recursor" +.TH "PDNS_RECURSOR" "1" "Mar 27, 2023" "" "PowerDNS Recursor" .SH NAME pdns_recursor \- The PowerDNS Recursor binary .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/pdns_recursor.cc new/pdns-recursor-4.8.4/pdns_recursor.cc --- old/pdns-recursor-4.8.3/pdns_recursor.cc 2023-03-06 15:14:33.000000000 +0100 +++ new/pdns-recursor-4.8.4/pdns_recursor.cc 2023-03-27 17:08:37.000000000 +0200 @@ -2688,35 +2688,40 @@ static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t& var) { std::shared_ptr<PacketID> pid = boost::any_cast<std::shared_ptr<PacketID>>(var); - ssize_t len; PacketBuffer packet; packet.resize(g_outgoingEDNSBufsize); ComboAddress fromaddr; socklen_t addrlen = sizeof(fromaddr); - len = recvfrom(fd, &packet.at(0), packet.size(), 0, (sockaddr*)&fromaddr, &addrlen); + ssize_t len = recvfrom(fd, &packet.at(0), packet.size(), 0, reinterpret_cast<sockaddr*>(&fromaddr), &addrlen); - if (len < (ssize_t)sizeof(dnsheader)) { - if (len < 0) - ; // cerr<<"Error on fd "<<fd<<": "<<stringerror()<<"\n"; - else { - g_stats.serverParseError++; - if (g_logCommonErrors) - SLOG(g_log << Logger::Error << "Unable to parse packet from remote UDP server " << fromaddr.toString() << ": packet smaller than DNS header" << endl, - g_slogout->info(Logr::Error, "Unable to parse packet from remote UDP server", "from", Logging::Loggable(fromaddr))); - } + const ssize_t signed_sizeof_sdnsheader = sizeof(dnsheader); + if (len < 0) { + // len < 0: error on socket t_udpclientsocks->returnSocket(fd); - PacketBuffer empty; + PacketBuffer empty; MT_t::waiters_t::iterator iter = MT->d_waiters.find(pid); - if (iter != MT->d_waiters.end()) + if (iter != MT->d_waiters.end()) { doResends(iter, pid, empty); + } + MT->sendEvent(pid, &empty); // this denotes error (does retry lookup using other NS) + return; + } - MT->sendEvent(pid, &empty); // this denotes error (does lookup again.. at least L1 will be hot) + if (len < signed_sizeof_sdnsheader) { + // We have received a packet that cannot be a valid DNS packet, as it has no complete header + // Drop it, but continue to wait for other packets + g_stats.serverParseError++; + if (g_logCommonErrors) { + SLOG(g_log << Logger::Error << "Unable to parse too short packet from remote UDP server " << fromaddr.toString() << ": packet smaller than DNS header" << endl, + g_slogout->info(Logr::Error, "Unable to parse too short packet from remote UDP server", "from", Logging::Loggable(fromaddr))); + } return; } + // We have at least a full header packet.resize(len); dnsheader dh; memcpy(&dh, &packet.at(0), sizeof(dh)); @@ -2738,10 +2743,18 @@ } else { try { - if (len > 12) - pident->domain = DNSName(reinterpret_cast<const char*>(packet.data()), len, 12, false, &pident->type); // don't copy this from above - we need to do the actual read + if (len > signed_sizeof_sdnsheader) { + pident->domain = DNSName(reinterpret_cast<const char*>(packet.data()), len, static_cast<int>(sizeof(dnsheader)), false, &pident->type); // don't copy this from above - we need to do the actual read + } + else { + // len == sizeof(dnsheader), only header case + // We will do a full scan search later to see if we can match this reply even without a domain + pident->domain.clear(); + pident->type = 0; + } } catch (std::exception& e) { + // Parse error, continue waiting for other packets g_stats.serverParseError++; // won't be fed to lwres.cc, so we have to increment SLOG(g_log << Logger::Warning << "Error in packet from remote nameserver " << fromaddr.toStringWithPort() << ": " << e.what() << endl, g_slogudpin->error(Logr::Warning, e.what(), "Error in packet from remote nameserver", "from", Logging::Loggable(fromaddr))); @@ -2749,14 +2762,16 @@ } } - MT_t::waiters_t::iterator iter = MT->d_waiters.find(pident); - if (iter != MT->d_waiters.end()) { - doResends(iter, pident, packet); + if (!pident->domain.empty()) { + MT_t::waiters_t::iterator iter = MT->d_waiters.find(pident); + if (iter != MT->d_waiters.end()) { + doResends(iter, pident, packet); + } } retryWithName: - if (!MT->sendEvent(pident, &packet)) { + if (pident->domain.empty() || MT->sendEvent(pident, &packet) == 0) { /* we did not find a match for this response, something is wrong */ // we do a full scan for outstanding queries on unexpected answers. not too bad since we only accept them on the right port number, which is hard enough to guess diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/rec_control.1 new/pdns-recursor-4.8.4/rec_control.1 --- old/pdns-recursor-4.8.3/rec_control.1 2023-03-06 15:16:22.000000000 +0100 +++ new/pdns-recursor-4.8.4/rec_control.1 2023-03-27 17:10:37.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "REC_CONTROL" "1" "Mar 06, 2023" "" "PowerDNS Recursor" +.TH "REC_CONTROL" "1" "Mar 27, 2023" "" "PowerDNS Recursor" .SH NAME rec_control \- Command line tool to control a running Recursor .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdns-recursor-4.8.3/syncres.cc new/pdns-recursor-4.8.4/syncres.cc --- old/pdns-recursor-4.8.3/syncres.cc 2023-03-06 15:14:33.000000000 +0100 +++ new/pdns-recursor-4.8.4/syncres.cc 2023-03-27 17:08:37.000000000 +0200 @@ -5193,6 +5193,12 @@ } d_totUsec += lwr.d_usec; + + if (resolveret == LWResult::Result::Spoofed) { + spoofed = true; + return false; + } + accountAuthLatency(lwr.d_usec, remoteIP.sin4.sin_family); ++g_stats.authRCode.at(lwr.d_rcode); @@ -5224,9 +5230,6 @@ LOG(prefix<<qname<<": hit a local resource limit resolving"<< (doTCP ? " over TCP" : "")<<", probable error: "<<stringerror()<<endl); g_stats.resourceLimits++; } - else if (resolveret == LWResult::Result::Spoofed) { - spoofed = true; - } else { /* LWResult::Result::PermanentError */ s_unreachables++;