Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Hi team,

Please unblock package gdnsd, 2.4.2-1. It includes an important fix that
reverts the rejection of post-2018 GeoIP databases and restores an
important part of the package's functionality (auto_dc_coords), as well
as a printf formatting error fix.

Unfortunately, the upload includes a few other small but unrelated
changes (both upstream, behind an #ifdef __FreeBSD__, and in Debian
packaging). My intention was to upload this well before the freeze, but
unfortunately did not manage to until a couple days before :(

Hopefully they're small and easy to review and won't be a huge waste of
your precious time. Apologies on my end for this! I'd appreciate to not
have to go through s-p-u just to revert these tiny changes...

unblock gdnsd/2.4.2-1

Regards,
Faidon
diff --git a/NEWS b/NEWS
index 76e108f..152edad 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,17 @@
+2.4.2 - 2019-02-11
+    * FreeBSD: Fix EADDRNOTAVAIL issue for IPv6 sockets when the listening IP
+      is bound to the loopback and traffic is routed indirectly, by resetting
+      ifindex to zero for non-link-local IPv6 IPs in the cmsg structure passed
+      between recvmsg() and sendmsg().
+
+2.4.1 - 2019-01-10
+    * These two fixes are backports from master branch work towards 3.x:
+    * Reverted the detection and rejection of post-2018 GeoLite2-City databases
+      with auto_dc_coords that was added in 2.3.1, as MaxMind later reversed
+      course and decided to keep the coordinates in the databases.
+    * Bugfix for a bad printf() format specifier in the case that strerror()
+      failed on non-GNU platforms.
+
 2.4.0 - 2018-02-15
     * plugin_multifo: added "ignore_health" parameter. If "ignore_health" is
       true, all addresses are added to the result set regardless of health, but
diff --git a/configure.ac b/configure.ac
index 48e01f9..3ce9ee8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.63])
-AC_INIT([gdnsd],[2.4.0],[https://github.com/gdnsd/gdnsd/issues])
+AC_INIT([gdnsd],[2.4.2],[https://github.com/gdnsd/gdnsd/issues])
 AC_CONFIG_SRCDIR([src/main.c])
 AC_CONFIG_AUX_DIR([acaux])
 AM_INIT_AUTOMAKE([1.11.1 dist-xz no-dist-gzip foreign tar-ustar subdir-objects -Wall])
diff --git a/debian/changelog b/debian/changelog
index f18427c..e4ec3c9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,18 @@
+gdnsd (2.4.2-1) unstable; urgency=medium
+
+  * New upstream point release.
+  * Bump Standards-Version to 4.3.0, no changes needed.
+  * Build-Depend on debhelper 11~ to ease backports.
+  * Drop [linux-any] from liburcu-dev Build-Depends, as it's now available on
+    kFreeBSD.
+  * Add 2019 to debian/copyright years.
+  * Misc source package changes:
+    - Drop overlay/tarballs/build-area from gbp.conf.
+    - Remove custom compression setting from source/options.
+    - Sort Build-Depends.
+
+ -- Faidon Liambotis <parav...@debian.org>  Tue, 05 Mar 2019 16:37:21 +0200
+
 gdnsd (2.4.0-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/control b/debian/control
index ffce03f..a54578d 100644
--- a/debian/control
+++ b/debian/control
@@ -2,15 +2,20 @@ Source: gdnsd
 Section: net
 Priority: optional
 Maintainer: Faidon Liambotis <parav...@debian.org>
-Build-Depends: debhelper (>= 11),
- libltdl-dev, perl,
- ragel, libev-dev,
- liburcu-dev [linux-any],
+Build-Depends:
+ debhelper (>= 11~),
+ ragel,
+ libev-dev,
+ libltdl-dev,
  libmaxminddb-dev (>= 1.2.0),
  libunwind-dev [i386 amd64 ppc64 ppc64el powerpc powerpcspe armel armhf arm64 mips mipsel mips64el],
- libsocket6-perl, libio-socket-inet6-perl,
- libwww-perl, libhttp-daemon-perl
-Standards-Version: 4.1.4
+ liburcu-dev,
+ perl,
+ libhttp-daemon-perl,
+ libio-socket-inet6-perl,
+ libsocket6-perl,
+ libwww-perl
+Standards-Version: 4.3.0
 Homepage: http://gdnsd.org/
 Vcs-Browser: https://github.com/paravoid/gdnsd
 Vcs-Git: https://github.com/paravoid/gdnsd.git
diff --git a/debian/copyright b/debian/copyright
index 70f02cd..b2f9385 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -3,7 +3,7 @@ Upstream-Name: gdnsd
 Source: https://github.com/gdnsd/gdnsd
 
 Files: *
-Copyright: 2012-2013, Brandon L Black <blbl...@gmail.com>
+Copyright: 2012-2019, Brandon L Black <blbl...@gmail.com>
 License: GPL-3+
 
 Files: t/Net/*
@@ -23,7 +23,7 @@ License: Artistic or GPL-1+
  "/usr/share/common-licenses/Artistic".
 
 Files: debian/*
-Copyright: 2012-2018, Faidon Liambotis <parav...@debian.org>
+Copyright: 2012-2019, Faidon Liambotis <parav...@debian.org>
 License: GPL-3+
 
 License: GPL-3+
diff --git a/debian/gbp.conf b/debian/gbp.conf
index bedf34d..81b6d6d 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -2,9 +2,6 @@
 upstream-tree=tag
 debian-branch=debian
 upstream-tag = v%(version)s
-overlay = True
 no-create-orig = True
 compression = xz
-tarball-dir = ../tarballs
-export-dir = ../build-area
 prebuild = rm -f .travis.yml
diff --git a/debian/source/options b/debian/source/options
deleted file mode 100644
index b7bc1f2..0000000
--- a/debian/source/options
+++ /dev/null
@@ -1 +0,0 @@
-compression = "xz"
diff --git a/docs/gdnsd-plugin-geoip.podin b/docs/gdnsd-plugin-geoip.podin
index a35837e..a3e5592 100644
--- a/docs/gdnsd-plugin-geoip.podin
+++ b/docs/gdnsd-plugin-geoip.podin
@@ -428,19 +428,6 @@ C<auto_dc_coords>, those datacenters will not be used in automatic results,
 but will still be available for manual use via C<map> and/or C<nets>
 entries.
 
-Note that MaxMind will stop including coordinate data in their free
-GeoLite2-City databases in 2019, which makes them incompatible with this
-mode of operation.  The code will attempt to detect such a condition and
-refuse to configure the map in this case.  The commercial GeoIP2-City
-databases still contain coordinate information and can be used.  MaxMind
-links on this topic:
-
-L<https://dev.maxmind.com/geoip/geoip2/geolite2/>
-
-L<https://support.maxmind.com/geolite-legacy-discontinuation-notice/>
-
-L<https://blog.maxmind.com/2018/01/02/discontinuation-of-the-geolite-legacy-databases/>
-
 =item C<auto_dc_limit = N>
 
 Unsigned integer, optional, default 3.  When city-auto-mode is in effect,
diff --git a/libgdmaps/gdgeoip2.c b/libgdmaps/gdgeoip2.c
index 9d76bd3..c4af4a0 100644
--- a/libgdmaps/gdgeoip2.c
+++ b/libgdmaps/gdgeoip2.c
@@ -171,14 +171,7 @@ static geoip2_t* geoip2_new(const char* pathname, const char* map_name, dclists_
     //   Country defaulting if the database_type does not match /Country/.
     db->is_city = !!strstr(meta->database_type, "City");
 
-    if(db->is_city) {
-        // 1546300799 == 2018-12-31T23:59:59
-        if(city_auto_mode && strstr(meta->database_type, "GeoLite2") && meta->build_epoch > (uint64_t)1546300799LLU) {
-            dmn_log_err("plugin_geoip: map '%s': GeoIP2 DB '%s' appears to be a post-2018 GeoLite2-City database, which will not work with auto_dc_coords as configured because these databases lack the latitude and longitude data present in the commercial version.  See the auto_dc_coords section of the gdnsd-plugin-geoip documentation for more details.", map_name, pathname);
-            geoip2_destroy(db);
-            return NULL;
-        }
-    } else {
+    if(!db->is_city) {
         if(city_auto_mode) {
             dmn_log_err("plugin_geoip: map '%s': GeoIP2 DB '%s' is not a City-level"
                 " database and this map uses auto_dc_coords",
diff --git a/libgdnsd/dmn.c b/libgdnsd/dmn.c
index e3bf04d..a533cd7 100644
--- a/libgdnsd/dmn.c
+++ b/libgdnsd/dmn.c
@@ -293,7 +293,7 @@ const char* dmn_logf_strerror(const int errnum) {
         if(rv == EINVAL || (rv < 0 && errno == EINVAL))
             snprintf(tmpbuf, DMN_ERRNO_MAXLEN, "Invalid errno: %i", errnum);
         else
-            dmn_log_fatal("strerror_r(,,%zu) failed", DMN_ERRNO_MAXLEN);
+            dmn_log_fatal("strerror_r(,,%u) failed", DMN_ERRNO_MAXLEN);
     }
     tmpbuf_ptr = tmpbuf;
 #endif
diff --git a/src/dnsio_udp.c b/src/dnsio_udp.c
index 933ca0b..e1431d7 100644
--- a/src/dnsio_udp.c
+++ b/src/dnsio_udp.c
@@ -296,13 +296,16 @@ static void mainloop(const int fd, void* dnsp_ctx, dnspacket_stats_t* stats, con
         .iov_len  = 0
     };
     struct msghdr msg_hdr;
-    char cmsg_buf[cmsg_size];
-    memset(cmsg_buf, 0, sizeof(cmsg_buf));
+    union {
+	char cbuf[CMSG_BUFSIZE];
+	struct cmsghdr align;
+    } cmsg_buf;
+    memset(cmsg_buf.cbuf, 0, sizeof(cmsg_buf.cbuf));
     memset(&msg_hdr, 0, sizeof(struct msghdr));
     msg_hdr.msg_name       = &asin.sa;
     msg_hdr.msg_iov        = &iov;
     msg_hdr.msg_iovlen     = 1;
-    msg_hdr.msg_control    = use_cmsg ? cmsg_buf : NULL;
+    msg_hdr.msg_control    = use_cmsg ? cmsg_buf.cbuf : NULL;
 
 #if GDNSD_B_QSBR
     const struct timeval tmout_short = { .tv_sec = 0, .tv_usec = PRCU_DELAY_US };
@@ -341,6 +344,21 @@ static void mainloop(const int fd, void* dnsp_ctx, dnspacket_stats_t* stats, con
         recvmsg_rv = recvmsg(fd, &msg_hdr, 0);
 #endif
 
+#if defined __FreeBSD__ && defined IPV6_PKTINFO
+        if(asin.sa.sa_family == AF_INET6) {
+            struct cmsghdr* cmsg;
+            for(cmsg = (struct cmsghdr *)CMSG_FIRSTHDR(&msg_hdr); cmsg;
+                cmsg = (struct cmsghdr *)CMSG_NXTHDR(&msg_hdr, cmsg)) {
+                if((cmsg->cmsg_level == IPPROTO_IPV6) && (cmsg->cmsg_type == IPV6_PKTINFO)) {
+                    struct in6_pktinfo* pi = (void*)CMSG_DATA(cmsg);
+                    if(!IN6_IS_ADDR_LINKLOCAL(&pi->ipi6_addr))
+                        pi->ipi6_ifindex = 0;
+                    continue;
+                }
+            }
+        }
+#endif
+
         if(unlikely(
                (asin.sa.sa_family == AF_INET && !asin.sin.sin_port)
             || (asin.sa.sa_family == AF_INET6 && !asin.sin6.sin6_port)

Reply via email to