Version 2.2.0 Released2014-12-30

Source tarball available at:

2.2.0 - 2014-12-30
  *** Bugfixes:
    * fix for zero-length configuration strings causing assertion failure
      in developer-debug builds
    * fix for crash/assertfail if admin_state file contents are
      defined by the user as an array instead of a hash
    * restored the logging of monitored state transitions, which was
      omitted in earlier 2.x releases but present in 1.x.

  *** Features:
    * If the admin_state file exists but doesn't parse correctly, that will
      now be a fatal error for startup or checkconf.  Previously the error was
      logged but startup/checkconf was successful.
    * plugin_geoip: Support for MaxMind GeoIP2 databases.  Requires
      libmaxminddb at build time to enable, which is a new optional build
    * plugin_geoip: Added v6->v4 translations for 64:ff9b::/96, the 'Well
      Known Prefix' from RFC6052 used for e.g. NAT64.
    * The http stats server now supports atomic flush-after-fetch behavior if
      given the query argument '?f=1', so that the stat counts are 'since last
      flush' instead of 'since startup'.  The flushed state is shared between
      all clients using the argument.  Does not affect stats for clients not
      using the argument.
    * New optional compile-time dependency on libunwind.  If available,
      dmn_assert() in developer builds and certain fatal errors in production
      builds will produce stack backtraces before terminating the process.
    * Security is a little tighter by default now on Linux due to prctl()
      PR_SET_NO_NEW_PRIVS, which may interfere with existing plugin_extmon
      configurations if they're running privileged binaries (set[ug]id,
      capabilities).  If this interferes with your configuration, it can be
      disabled via the global option 'weaker_security => true'.
    * The shipped gdnsd.service systemd unit file now defaults to more secure
      settings (e.g. private tmp, no homedir access, readonly system fs, no
      device access, etc).  These can be overridden by the user without
      editing the defaults in e.g. /etc/systemd/system/gdnsd.d/custom.conf.

  *** Other:
    * The range, default, and effects of the zones_rfc1035_quiesce option
      have changed.  The zones_rfc1035_min_quiesce option is now deprecated
      and useless and will generate a harmless warning on startup.  This
      shouldn't be a pragmatic issue for most users.
    * Related to the above: the code no longer makes heuristic attempts to
      determine the effective filesystem timestamp accuracy of the zones
      directory on startup by writing temporary test files to it.
    * A warning is now generated if the 'zones_rfc1035_auto' option is not set
      explicitly, because the default value is likely to change from 'true' to
      'false' in a future version.
    * The 'listen => scan' feature is now deprecated, but continues to
      function and issues a deprecation warning when used.  Please either
      migrate to 'listen => any' (the current default) or file a bug
      indicating why that doesn't work for your platform/use-case!
    * Ragel 6.x is now a hard build dependency for all builds.  Previously it
      was required for building from git, but not from tarballs.
    * Perl version dependency has been raised from 5.8.1 to 5.10.1
    * Testsuite now also requires JSON::PP (which comes with Perl 5.13.9+, but
      may need to be installed for older ones).
    * sysd/gdnsd.service is now always generated in the build tree from the
      template, even if --without-systemdsystemunitdir and/or no systemd
      detected at all, to give more options for how packagers handle things.
    * Minor plugin API updates (most would just need a recompile).
    * A number of less-visible refactorings for quality and/or performance.