summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8203b27)
raw | patch | inline | side by side (parent: 8203b27)
author | Sebastian Harl <sh@tokkee.org> | |
Fri, 25 Dec 2009 08:57:41 +0000 (09:57 +0100) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Fri, 25 Dec 2009 08:59:00 +0000 (09:59 +0100) |
This patch fixes communication to pdns versions 2.9.22 and above.
Thanks to <tm@iprog.com> for reporting this and Luke Heberling for providing
the patch!
Closes: #557599
This patch was provided in #535787 as well, but did not get applied to 4.8.1.
Thanks to <tm@iprog.com> for reporting this and Luke Heberling for providing
the patch!
Closes: #557599
This patch was provided in #535787 as well, but did not get applied to 4.8.1.
debian/changelog | patch | blob | history | |
debian/patches/00list | patch | blob | history | |
debian/patches/bts557599_powerdns_fix.dpatch | [new file with mode: 0644] | patch | blob |
diff --git a/debian/changelog b/debian/changelog
index 2d09b17c94fa79f38e27fa042a8f132ae1101bf1..06ea04b45af7a8912dd35832de121c715bafedc9 100644 (file)
--- a/debian/changelog
+++ b/debian/changelog
- Added bts561577_collectd2html_recursive_fix.dpatch -- fixed
collectd2html.pl's recursive mode and improved some defaults; thanks to
Yuri D'Elia for reporting this and providing a patch (Closes: #561577).
+ - Added bts557599_powerdns_fix.dpatch -- fixed communication to pdns
+ versions 2.9.22 and above; thanks to <tm@iprog.com> for reporting this
+ and Luke Heberling for providing the patch (Closes: #557599).
* debian/rules:
- Pass --without-included-ltdl to configure to tell libtool 2 to not use
the shipped libltdl but rather the one available in the system.
* debian/README.Debian:
- Added a short explanation of the package split.
- -- Sebastian Harl <tokkee@debian.org> Fri, 25 Dec 2009 09:42:42 +0100
+ -- Sebastian Harl <tokkee@debian.org> Fri, 25 Dec 2009 09:55:21 +0100
collectd (4.8.1-2) unstable; urgency=low
diff --git a/debian/patches/00list b/debian/patches/00list
index 0c322da82ae11d935bc9fc4f6ea02e65232a60aa..25c8ff14b660211bc77f7a2e05d6175ee2c32188 100644 (file)
--- a/debian/patches/00list
+++ b/debian/patches/00list
rrd_filter_path.dpatch
collection_conf_path.dpatch
bts561577_collectd2html_recursive_fix.dpatch
+bts557599_powerdns_fix.dpatch
diff --git a/debian/patches/bts557599_powerdns_fix.dpatch b/debian/patches/bts557599_powerdns_fix.dpatch
--- /dev/null
@@ -0,0 +1,73 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## bts557599_powerdns_fix.dpatch by Luke Heberling <collectd@c-ware.com>
+##
+## DP: powerdns plugin: Fixed communication when talking to pdns 2.9.22.
+## DP:
+## DP: powerdns version 2.9.22 (and above) require a newline at the end of
+## DP: commands sent to the server.
+
+@DPATCH@
+
+diff a/src/powerdns.c b/src/powerdns.c
+--- a/src/powerdns.c
++++ b/src/powerdns.c
+@@ -46,12 +46,12 @@
+ #define FUNC_ERROR(func) do { char errbuf[1024]; ERROR ("powerdns plugin: %s failed: %s", func, sstrerror (errno, errbuf, sizeof (errbuf))); } while (0)
+
+ #define SERVER_SOCKET LOCALSTATEDIR"/run/pdns.controlsocket"
+-#define SERVER_COMMAND "SHOW *"
++#define SERVER_COMMAND "SHOW * \n"
+
+ #define RECURSOR_SOCKET LOCALSTATEDIR"/run/pdns_recursor.controlsocket"
+ #define RECURSOR_COMMAND "get noerror-answers nxdomain-answers " \
+ "servfail-answers sys-msec user-msec qa-latency cache-entries cache-hits " \
+- "cache-misses questions"
++ "cache-misses questions\n"
+
+ struct list_item_s;
+ typedef struct list_item_s list_item_t;
+@@ -437,6 +437,11 @@ static int powerdns_get_data_stream (lis
+ return (-1);
+ }
+
++ struct timeval timeout;
++ timeout.tv_sec=5;
++ timeout.tv_usec=0;
++ status = setsockopt (sd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof (timeout));
++
+ status = connect (sd, (struct sockaddr *) &item->sockaddr,
+ sizeof (item->sockaddr));
+ if (status != 0)
+@@ -529,7 +534,7 @@ static int powerdns_read_server (list_it
+ int fields_num;
+
+ if (item->command == NULL)
+- item->command = strdup ("SHOW *");
++ item->command = strdup (SERVER_COMMAND);
+ if (item->command == NULL)
+ {
+ ERROR ("powerdns plugin: strdup failed.");
+@@ -610,7 +615,7 @@ static int powerdns_update_recursor_comm
+ else
+ {
+ sstrncpy (buffer, "get ", sizeof (buffer));
+- status = strjoin (&buffer[4], sizeof (buffer) - strlen ("get "),
++ status = strjoin (&buffer[strlen("get ")], sizeof (buffer) - strlen ("get "),
+ li->fields, li->fields_num,
+ /* seperator = */ " ");
+ if (status < 0)
+@@ -618,6 +623,14 @@ static int powerdns_update_recursor_comm
+ ERROR ("powerdns plugin: strjoin failed.");
+ return (-1);
+ }
++ buffer[sizeof (buffer) - 1] = 0;
++ int i = strlen (buffer);
++ if (i < sizeof (buffer) - 2)
++ {
++ buffer[i++] = ' ';
++ buffer[i++] = '\n';
++ buffer[i++] = '\0';
++ }
+ }
+
+ buffer[sizeof (buffer) - 1] = 0;