]> git.ipfire.org Git - people/meitelwein/ipfire-2.x.git/commitdiff
collectd: added 22 patches from Michael
authorAlexander Marx <amarx@ipfire.org>
Fri, 26 Sep 2014 10:45:47 +0000 (12:45 +0200)
committerAlexander Marx <amarx@ipfire.org>
Fri, 26 Sep 2014 10:45:47 +0000 (12:45 +0200)
22 files changed:
src/patches/collectd/0001-src-utils_mount.h-Add-stdio.h.patch [new file with mode: 0644]
src/patches/collectd/0002-Don-t-notify-continuously-when-MySQL-slave-SQL-threa.patch [new file with mode: 0644]
src/patches/collectd/0003-curl_xml.c-avoid-using-uninitalized-variable-in-erro.patch [new file with mode: 0644]
src/patches/collectd/0004-interface.c-FreeBSD-10-support.patch [new file with mode: 0644]
src/patches/collectd/0005-Revert-curl_xml.c-avoid-using-uninitalized-variable-.patch [new file with mode: 0644]
src/patches/collectd/0006-network-set_thread_cbs-so-we-initialize-the-right-th.patch [new file with mode: 0644]
src/patches/collectd/0007-apache-plugin-Call-curl_global_init-from-the-init-fu.patch [new file with mode: 0644]
src/patches/collectd/0008-network-comment-libgcrypt-initalization-process.patch [new file with mode: 0644]
src/patches/collectd/0009-Call-curl_global_init-in-_init-of-plugins-using-curl.patch [new file with mode: 0644]
src/patches/collectd/0010-indent-wh_init-to-be-consistent-with-the-rest-of-the.patch [new file with mode: 0644]
src/patches/collectd/0011-Configparser-when-we-alocate-an-empty-list-we-also-n.patch [new file with mode: 0644]
src/patches/collectd/0012-don-t-assume-pkg-config-is-in-PATH.patch [new file with mode: 0644]
src/patches/collectd/0013-add-missing-backticks-which-broke-the-build.patch [new file with mode: 0644]
src/patches/collectd/0014-snmp-free-snmp_pdu-struct-allocated-by-snmp_pdu_crea.patch [new file with mode: 0644]
src/patches/collectd/0015-curl_xml-plugin-Fixed-tautological-pointer-compariso.patch [new file with mode: 0644]
src/patches/collectd/0016-Add-support-for-OpenVPN-2.3.0-status-files.patch [new file with mode: 0644]
src/patches/collectd/0017-openvpn-plugin-Don-t-signal-an-error-when-no-clients.patch [new file with mode: 0644]
src/patches/collectd/0018-openvpn-Remove-boguous-file-handler-check.patch [new file with mode: 0644]
src/patches/collectd/0019-openvpn-Ignore-not-fully-established-connections.patch [new file with mode: 0644]
src/patches/collectd/0020-openvpn-Make-read-functions-robust-like-in-8516f9abb.patch [new file with mode: 0644]
src/patches/collectd/0021-openvpn-Fix-copy-and-paste-error.patch [new file with mode: 0644]
src/patches/collectd/0022-openvpn-Change-data-type-from-COUNTER-to-DERIVE.patch [new file with mode: 0644]

diff --git a/src/patches/collectd/0001-src-utils_mount.h-Add-stdio.h.patch b/src/patches/collectd/0001-src-utils_mount.h-Add-stdio.h.patch
new file mode 100644 (file)
index 0000000..7391fbf
--- /dev/null
@@ -0,0 +1,28 @@
+From 4bbfb2b9f391f273744163cfda7bec96671e9d9c Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Thu, 18 Apr 2013 06:25:58 +0200
+Subject: [PATCH 01/22] src/utils_mount.h: Add <stdio.h>.
+
+This is required on Solaris 10. Thanks to dannypoo@ for reporting this
+problem.
+
+Github: #306
+---
+ src/utils_mount.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/utils_mount.h b/src/utils_mount.h
+index 1f2403c..83f789b 100644
+--- a/src/utils_mount.h
++++ b/src/utils_mount.h
+@@ -26,6 +26,7 @@
+ #ifndef COLLECTD_UTILS_MOUNT_H
+ #define COLLECTD_UTILS_MOUNT_H 1
++#include <stdio.h>
+ #if HAVE_FS_INFO_H
+ # include <fs_info.h>
+ #endif
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0002-Don-t-notify-continuously-when-MySQL-slave-SQL-threa.patch b/src/patches/collectd/0002-Don-t-notify-continuously-when-MySQL-slave-SQL-threa.patch
new file mode 100644 (file)
index 0000000..f0beb39
--- /dev/null
@@ -0,0 +1,27 @@
+From f2391b9da6127e4acd5b54b7ae6c2d585df0e2a0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joaqu=C3=ADn=20Cuenca=20Abela?= <e98cuenc@gmail.com>
+Date: Wed, 29 May 2013 16:22:09 +0200
+Subject: [PATCH 02/22] Don't notify continuously when MySQL slave SQL thread
+ is running
+
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/mysql.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mysql.c b/src/mysql.c
+index 8b3cd21..f93a442 100644
+--- a/src/mysql.c
++++ b/src/mysql.c
+@@ -689,7 +689,7 @@ static int mysql_read_slave_stats (mysql_database_t *db, MYSQL *con)
+                       ssnprintf (n.message, sizeof (n.message),
+                                       "slave SQL thread started");
+                       plugin_dispatch_notification (&n);
+-                      db->slave_sql_running = 0;
++                      db->slave_sql_running = 1;
+               }
+       }
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0003-curl_xml.c-avoid-using-uninitalized-variable-in-erro.patch b/src/patches/collectd/0003-curl_xml.c-avoid-using-uninitalized-variable-in-erro.patch
new file mode 100644 (file)
index 0000000..4011dd8
--- /dev/null
@@ -0,0 +1,34 @@
+From bbbf37d55a3959951604c4be482e9a705a0f86d9 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Tue, 7 Jan 2014 11:30:59 +0100
+Subject: [PATCH 03/22] curl_xml.c: avoid using uninitalized variable in error
+ message
+
+Thanks to @trtrmitya for reporting this. Fixes GH#507
+---
+ src/curl_xml.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index 75f5cc3..77aee60 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -551,12 +551,12 @@ static int cx_curl_perform (cx_t *db, CURL *curl) /* {{{ */
+   char *ptr;
+   char *url;
+-  db->buffer_fill = 0; 
++  db->buffer_fill = 0;
+   status = curl_easy_perform (curl);
+   if (status != CURLE_OK)
+   {
+-    ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)",
+-           status, db->curl_errbuf, url);
++    ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s",
++           status, db->curl_errbuf);
+     return (-1);
+   }
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0004-interface.c-FreeBSD-10-support.patch b/src/patches/collectd/0004-interface.c-FreeBSD-10-support.patch
new file mode 100644 (file)
index 0000000..cc7067d
--- /dev/null
@@ -0,0 +1,52 @@
+From 645dadb3fcc466e8880fda4eb23b21ad433631fc Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Tue, 7 Jan 2014 16:06:10 +0100
+Subject: [PATCH 04/22] interface.c: FreeBSD-10 support
+
+Quoting @trtrmitya in github issue #506 : "[...] it is broken on
+FreeBSD-10, in which getifaddrs() returns not only link level stats for
+a particular interface, but also entries for each IP configured on that
+interface. As a result if_submit() is called several times for each
+interface, which results in incorrect data being logged.
+
+I am attaching a patch which fixes a problem on FreeBSD (9/10), but it
+should work for every *BSD because [...] the getifaddrs implementation
+first appeared in BSDi BSD/OS."
+
+Many thanks to @trtrmitya for providing the patch !
+---
+ src/interface.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/interface.c b/src/interface.c
+index db998a3..9b566ea 100644
+--- a/src/interface.c
++++ b/src/interface.c
+@@ -213,18 +213,19 @@ static int interface_read (void)
+       for (if_ptr = if_list; if_ptr != NULL; if_ptr = if_ptr->ifa_next)
+       {
+-              if ((if_data = (struct IFA_DATA *) if_ptr->ifa_data) == NULL)
+-                      continue;
++              if (if_ptr->ifa_addr != NULL && if_ptr->ifa_addr->sa_family == AF_LINK) {
++                      if_data = (struct IFA_DATA *) if_ptr->ifa_data;
+-              if_submit (if_ptr->ifa_name, "if_octets",
++                      if_submit (if_ptr->ifa_name, "if_octets",
+                               if_data->IFA_RX_BYTES,
+                               if_data->IFA_TX_BYTES);
+-              if_submit (if_ptr->ifa_name, "if_packets",
++                      if_submit (if_ptr->ifa_name, "if_packets",
+                               if_data->IFA_RX_PACKT,
+                               if_data->IFA_TX_PACKT);
+-              if_submit (if_ptr->ifa_name, "if_errors",
++                      if_submit (if_ptr->ifa_name, "if_errors",
+                               if_data->IFA_RX_ERROR,
+                               if_data->IFA_TX_ERROR);
++              }
+       }
+       freeifaddrs (if_list);
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0005-Revert-curl_xml.c-avoid-using-uninitalized-variable-.patch b/src/patches/collectd/0005-Revert-curl_xml.c-avoid-using-uninitalized-variable-.patch
new file mode 100644 (file)
index 0000000..3534cde
--- /dev/null
@@ -0,0 +1,40 @@
+From cde09b547abbeb7595d91259fcc628504d0f55a9 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Wed, 8 Jan 2014 18:05:40 +0100
+Subject: [PATCH 05/22] Revert "curl_xml.c: avoid using uninitalized variable
+ in error message"
+
+This reverts commit bbbf37d55a3959951604c4be482e9a705a0f86d9.
+
+A different fix for this problem was commited to the collectd-5.4 branch
+(8327ee64) and conflicts with this patch. Also, initializing url the
+same way as 8327ee64 does it, to avoid a merge conflict.
+---
+ src/curl_xml.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index 77aee60..b941f02 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -550,13 +550,14 @@ static int cx_curl_perform (cx_t *db, CURL *curl) /* {{{ */
+   long rc;
+   char *ptr;
+   char *url;
++  url = db->url;
+-  db->buffer_fill = 0;
++  db->buffer_fill = 0; 
+   status = curl_easy_perform (curl);
+   if (status != CURLE_OK)
+   {
+-    ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s",
+-           status, db->curl_errbuf);
++    ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)",
++           status, db->curl_errbuf, url);
+     return (-1);
+   }
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0006-network-set_thread_cbs-so-we-initialize-the-right-th.patch b/src/patches/collectd/0006-network-set_thread_cbs-so-we-initialize-the-right-th.patch
new file mode 100644 (file)
index 0000000..460f4b5
--- /dev/null
@@ -0,0 +1,28 @@
+From ddffda7a150cd3abdb6ec392b514a250e91e0c19 Mon Sep 17 00:00:00 2001
+From: Chris Lundquist <chris.lundquist@github.com>
+Date: Tue, 14 Jan 2014 18:33:13 -0800
+Subject: [PATCH 06/22] [network] set_thread_cbs so we initialize the right
+ threading mode in gcry_check_version
+
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/network.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/network.c b/src/network.c
+index d0ff6bc..be82c6f 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -500,8 +500,8 @@ static void network_init_gcrypt (void) /* {{{ */
+   if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
+     return;
+-  gcry_check_version (NULL); /* before calling any other functions */
+   gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
++  gcry_check_version (NULL); /* before calling *almost* any other functions */
+   gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+   gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
+ } /* }}} void network_init_gcrypt */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0007-apache-plugin-Call-curl_global_init-from-the-init-fu.patch b/src/patches/collectd/0007-apache-plugin-Call-curl_global_init-from-the-init-fu.patch
new file mode 100644 (file)
index 0000000..8408337
--- /dev/null
@@ -0,0 +1,40 @@
+From 5f2f969335757f31f42cd8bb7e38eb8c5fe5e56e Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Wed, 15 Jan 2014 23:47:33 +0100
+Subject: [PATCH 07/22] apache plugin: Call curl_global_init() from the init
+ function.
+
+This is a shot in the dark in trying to address #513. By calling this
+from an init() callback, I hope to be initializing the curl and gcrypt
+libraries before collectd becomes multi-threaded, avoiding the problems
+described in the issue.
+---
+ src/apache.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/apache.c b/src/apache.c
+index 899c21e..23bba3e 100644
+--- a/src/apache.c
++++ b/src/apache.c
+@@ -702,9 +702,18 @@ static int apache_read_host (user_data_t *user_data) /* {{{ */
+       return (0);
+ } /* }}} int apache_read_host */
++static int apache_init (void) /* {{{ */
++{
++      /* Call this while collectd is still single-threaded to avoid
++       * initialization issues in libgcrypt. */
++      curl_global_init (CURL_GLOBAL_SSL);
++      return (0);
++} /* }}} int apache_init */
++
+ void module_register (void)
+ {
+       plugin_register_complex_config ("apache", config);
++      plugin_register_init ("apache", apache_init);
+ } /* void module_register */
+ /* vim: set sw=8 noet fdm=marker : */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0008-network-comment-libgcrypt-initalization-process.patch b/src/patches/collectd/0008-network-comment-libgcrypt-initalization-process.patch
new file mode 100644 (file)
index 0000000..9499328
--- /dev/null
@@ -0,0 +1,33 @@
+From 793c2046de1ac04689d541a5e83513fe8e62578c Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Thu, 16 Jan 2014 00:30:42 +0100
+Subject: [PATCH 08/22] network: comment libgcrypt initalization process
+
+---
+ src/network.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/network.c b/src/network.c
+index be82c6f..f379a5c 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -500,8 +500,15 @@ static void network_init_gcrypt (void) /* {{{ */
+   if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
+     return;
++ /* http://www.gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
++  * To ensure thread-safety, it's important to set GCRYCTL_SET_THREAD_CBS
++  * *before* initalizing Libgcrypt with gcry_check_version(), which itself must
++  * be called before any other gcry_* function. GCRYCTL_ANY_INITIALIZATION_P
++  * above doesn't count, as it doesn't implicitly initalize Libgcrypt.
++  *
++  * tl;dr: keep all these gry_* statements in this exact order please. */
+   gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+-  gcry_check_version (NULL); /* before calling *almost* any other functions */
++  gcry_check_version (NULL);
+   gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+   gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
+ } /* }}} void network_init_gcrypt */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0009-Call-curl_global_init-in-_init-of-plugins-using-curl.patch b/src/patches/collectd/0009-Call-curl_global_init-in-_init-of-plugins-using-curl.patch
new file mode 100644 (file)
index 0000000..a2c3ef5
--- /dev/null
@@ -0,0 +1,99 @@
+From 66b400ab01b8133e450bb002e175117a1ab6f9ae Mon Sep 17 00:00:00 2001
+From: Jeremy Katz <jeremy@katzbox.net>
+Date: Sun, 26 Jan 2014 20:43:19 -0500
+Subject: [PATCH 09/22] Call curl_global_init() in _init of plugins using curl
+
+Need to call curl_global_init() or curl_easy_init() during init
+for plugins when we're still running single threaded.  This
+updates the remaining ones
+---
+ src/curl.c       | 1 +
+ src/curl_json.c  | 9 +++++++++
+ src/curl_xml.c   | 9 +++++++++
+ src/write_http.c | 9 +++++++++
+ 4 files changed, 28 insertions(+)
+
+diff --git a/src/curl.c b/src/curl.c
+index 3899aaa..8d2893f 100644
+--- a/src/curl.c
++++ b/src/curl.c
+@@ -566,6 +566,7 @@ static int cc_init (void) /* {{{ */
+     INFO ("curl plugin: No pages have been defined.");
+     return (-1);
+   }
++  curl_global_init (CURL_GLOBAL_SSL);
+   return (0);
+ } /* }}} int cc_init */
+diff --git a/src/curl_json.c b/src/curl_json.c
+index 24e1df1..0948962 100644
+--- a/src/curl_json.c
++++ b/src/curl_json.c
+@@ -882,9 +882,18 @@ static int cj_read (user_data_t *ud) /* {{{ */
+   return cj_curl_perform (db, db->curl);
+ } /* }}} int cj_read */
++static int cj_init (void) /* {{{ */
++{
++  /* Call this while collectd is still single-threaded to avoid
++   * initialization issues in libgcrypt. */
++  curl_global_init (CURL_GLOBAL_SSL);
++  return (0);
++} /* }}} int cj_init */
++
+ void module_register (void)
+ {
+   plugin_register_complex_config ("curl_json", cj_config);
++  plugin_register_init ("curl_json", cj_init);
+ } /* void module_register */
+ /* vim: set sw=2 sts=2 et fdm=marker : */
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index b941f02..e31e73d 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -926,9 +926,18 @@ static int cx_config (oconfig_item_t *ci) /* {{{ */
+   return (0);
+ } /* }}} int cx_config */
++static int cx_init (void) /* {{{ */
++{
++  /* Call this while collectd is still single-threaded to avoid
++   * initialization issues in libgcrypt. */
++  curl_global_init (CURL_GLOBAL_SSL);
++  return (0);
++} /* }}} int cx_init */
++
+ void module_register (void)
+ {
+   plugin_register_complex_config ("curl_xml", cx_config);
++  plugin_register_init ("curl_xml", cx_init);
+ } /* void module_register */
+ /* vim: set sw=2 sts=2 et fdm=marker : */
+diff --git a/src/write_http.c b/src/write_http.c
+index 62c73b0..04c637b 100644
+--- a/src/write_http.c
++++ b/src/write_http.c
+@@ -656,9 +656,18 @@ static int wh_config (oconfig_item_t *ci) /* {{{ */
+         return (0);
+ } /* }}} int wh_config */
++static int wh_init (void) /* {{{ */
++{
++  /* Call this while collectd is still single-threaded to avoid
++   * initialization issues in libgcrypt. */
++  curl_global_init (CURL_GLOBAL_SSL);
++  return (0);
++} /* }}} int wh_init */
++
+ void module_register (void) /* {{{ */
+ {
+         plugin_register_complex_config ("write_http", wh_config);
++        plugin_register_init ("write_http", wh_init);
+ } /* }}} void module_register */
+ /* vim: set fdm=marker sw=8 ts=8 tw=78 et : */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0010-indent-wh_init-to-be-consistent-with-the-rest-of-the.patch b/src/patches/collectd/0010-indent-wh_init-to-be-consistent-with-the-rest-of-the.patch
new file mode 100644 (file)
index 0000000..81f2d84
--- /dev/null
@@ -0,0 +1,32 @@
+From 6bd48f2346c5072dc22da58c7b7cd8e8ceb83fc5 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Sat, 29 Mar 2014 13:37:36 +0100
+Subject: [PATCH 10/22] indent wh_init() to be consistent with the rest of the
+ file
+
+---
+ src/write_http.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/write_http.c b/src/write_http.c
+index 04c637b..0a13444 100644
+--- a/src/write_http.c
++++ b/src/write_http.c
+@@ -658,10 +658,10 @@ static int wh_config (oconfig_item_t *ci) /* {{{ */
+ static int wh_init (void) /* {{{ */
+ {
+-  /* Call this while collectd is still single-threaded to avoid
+-   * initialization issues in libgcrypt. */
+-  curl_global_init (CURL_GLOBAL_SSL);
+-  return (0);
++        /* Call this while collectd is still single-threaded to avoid
++         * initialization issues in libgcrypt. */
++        curl_global_init (CURL_GLOBAL_SSL);
++        return (0);
+ } /* }}} int wh_init */
+ void module_register (void) /* {{{ */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0011-Configparser-when-we-alocate-an-empty-list-we-also-n.patch b/src/patches/collectd/0011-Configparser-when-we-alocate-an-empty-list-we-also-n.patch
new file mode 100644 (file)
index 0000000..b3e6f78
--- /dev/null
@@ -0,0 +1,41 @@
+From 6207fce91a0933e852ec76fc31ca81ec00ffa04b Mon Sep 17 00:00:00 2001
+From: Wilfried Goesgens <dothebart@citadel.org>
+Date: Thu, 5 Jun 2014 20:04:13 +0200
+Subject: [PATCH 11/22] Configparser: when we alocate an empty list, we also
+ need to reset the counter; else we will trip over this later. This fixes
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=750440
+
+---
+ src/configfile.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/configfile.c b/src/configfile.c
+index 0b7786f..983d995 100644
+--- a/src/configfile.c
++++ b/src/configfile.c
+@@ -414,6 +414,12 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
+       /* Resize the memory containing the children to be big enough to hold
+        * all children. */
++      if (dst->children_num + src->children_num - 1 == 0)
++      {
++              dst->children_num = 0;
++              return (0);
++      }
++
+       temp = (oconfig_item_t *) realloc (dst->children,
+                       sizeof (oconfig_item_t)
+                       * (dst->children_num + src->children_num - 1));
+@@ -514,7 +520,8 @@ static int cf_include_all (oconfig_item_t *root, int depth)
+                       continue;
+               /* Now replace the i'th child in `root' with `new'. */
+-              cf_ci_replace_child (root, new, i);
++              if (cf_ci_replace_child (root, new, i) < 0)
++                      return (-1);
+               /* ... and go back to the new i'th child. */
+               --i;
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0012-don-t-assume-pkg-config-is-in-PATH.patch b/src/patches/collectd/0012-don-t-assume-pkg-config-is-in-PATH.patch
new file mode 100644 (file)
index 0000000..5bb5c85
--- /dev/null
@@ -0,0 +1,86 @@
+From c2ca2a46e617878dcff69de0b8940ea91d3401cc Mon Sep 17 00:00:00 2001
+From: Lauri Tirkkonen <lotheac@iki.fi>
+Date: Thu, 22 May 2014 14:05:40 +0300
+Subject: [PATCH 12/22] don't assume pkg-config is in PATH
+
+---
+ configure.in | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 0b12630..7086800 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1136,8 +1136,8 @@ AC_CHECK_LIB(hal,libhal_device_property_exists,
+            [with_libhal="no"])
+ if test "x$with_libhal" = "xyes"; then
+       if test "x$PKG_CONFIG" != "x"; then
+-              BUILD_WITH_LIBHAL_CFLAGS="`pkg-config --cflags hal`"
+-              BUILD_WITH_LIBHAL_LIBS="`pkg-config --libs hal`"
++              BUILD_WITH_LIBHAL_CFLAGS="`$PKG_CONFIG --cflags hal`"
++              BUILD_WITH_LIBHAL_LIBS="`$PKG_CONFIG --libs hal`"
+               AC_SUBST(BUILD_WITH_LIBHAL_CFLAGS)
+               AC_SUBST(BUILD_WITH_LIBHAL_LIBS)
+       fi
+@@ -3434,8 +3434,8 @@ then
+   if $PKG_CONFIG --exists tokyotyrant
+   then
+     with_libtokyotyrant_cppflags="$with_libtokyotyrant_cppflags `$PKG_CONFIG --cflags tokyotyrant`"
+-    with_libtokyotyrant_ldflags="$with_libtokyotyrant_ldflags `pkg-config --libs-only-L tokyotyrant`"
+-    with_libtokyotyrant_libs="$with_libtokyotyrant_libs `pkg-config --libs-only-l tokyotyrant`"
++    with_libtokyotyrant_ldflags="$with_libtokyotyrant_ldflags `$PKG_CONFIG --libs-only-L tokyotyrant`"
++    with_libtokyotyrant_libs="$with_libtokyotyrant_libs `$PKG_CONFIG --libs-only-l tokyotyrant`"
+   fi
+ fi
+@@ -3743,7 +3743,7 @@ with_libvirt_cflags=""
+ with_libvirt_ldflags=""
+ if test "x$PKG_CONFIG" != "x"
+ then
+-      pkg-config --exists 'libxml-2.0' 2>/dev/null
++      $PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null
+       if test "$?" = "0"
+       then
+               with_libxml2="yes"
+@@ -3751,7 +3751,7 @@ then
+               with_libxml2="no (pkg-config doesn't know library)"
+       fi
+-      pkg-config --exists libvirt 2>/dev/null
++      $PKG_CONFIG --exists libvirt 2>/dev/null
+       if test "$?" = "0"
+       then
+               with_libvirt="yes"
+@@ -3761,12 +3761,12 @@ then
+ fi
+ if test "x$with_libxml2" = "xyes"
+ then
+-      with_libxml2_cflags="`pkg-config --cflags libxml-2.0`"
++      with_libxml2_cflags="`$PKG_CONFIG --cflags libxml-2.0`"
+       if test $? -ne 0
+       then
+               with_libxml2="no"
+       fi
+-      with_libxml2_ldflags="`pkg-config --libs libxml-2.0`"
++      with_libxml2_ldflags="$PKG_CONFIG --libs libxml-2.0`"
+       if test $? -ne 0
+       then
+               with_libxml2="no"
+@@ -3806,12 +3806,12 @@ if test "x$with_libxml2" = "xyes"; then
+ fi
+ if test "x$with_libvirt" = "xyes"
+ then
+-      with_libvirt_cflags="`pkg-config --cflags libvirt`"
++      with_libvirt_cflags="$PKG_CONFIG --cflags libvirt`"
+       if test $? -ne 0
+       then
+               with_libvirt="no"
+       fi
+-      with_libvirt_ldflags="`pkg-config --libs libvirt`"
++      with_libvirt_ldflags="$PKG_CONFIG --libs libvirt`"
+       if test $? -ne 0
+       then
+               with_libvirt="no"
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0013-add-missing-backticks-which-broke-the-build.patch b/src/patches/collectd/0013-add-missing-backticks-which-broke-the-build.patch
new file mode 100644 (file)
index 0000000..d7f2264
--- /dev/null
@@ -0,0 +1,40 @@
+From 497f5785e8b385f03b5fb5b15bdff8ba39e4699e Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Mon, 23 Jun 2014 18:00:01 +0200
+Subject: [PATCH 13/22] add missing backticks which broke the build
+
+---
+ configure.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 7086800..5dac543 100644
+--- a/configure.in
++++ b/configure.in
+@@ -3766,7 +3766,7 @@ then
+       then
+               with_libxml2="no"
+       fi
+-      with_libxml2_ldflags="$PKG_CONFIG --libs libxml-2.0`"
++      with_libxml2_ldflags="`$PKG_CONFIG --libs libxml-2.0`"
+       if test $? -ne 0
+       then
+               with_libxml2="no"
+@@ -3806,12 +3806,12 @@ if test "x$with_libxml2" = "xyes"; then
+ fi
+ if test "x$with_libvirt" = "xyes"
+ then
+-      with_libvirt_cflags="$PKG_CONFIG --cflags libvirt`"
++      with_libvirt_cflags="`$PKG_CONFIG --cflags libvirt`"
+       if test $? -ne 0
+       then
+               with_libvirt="no"
+       fi
+-      with_libvirt_ldflags="$PKG_CONFIG --libs libvirt`"
++      with_libvirt_ldflags="`$PKG_CONFIG --libs libvirt`"
+       if test $? -ne 0
+       then
+               with_libvirt="no"
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0014-snmp-free-snmp_pdu-struct-allocated-by-snmp_pdu_crea.patch b/src/patches/collectd/0014-snmp-free-snmp_pdu-struct-allocated-by-snmp_pdu_crea.patch
new file mode 100644 (file)
index 0000000..945c28b
--- /dev/null
@@ -0,0 +1,29 @@
+From 0da910fb1bf2bd4982ca6541458c795ec296f398 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Fri, 8 Aug 2014 15:55:10 +0200
+Subject: [PATCH 14/22] snmp: free snmp_pdu struct allocated by
+ snmp_pdu_create()
+
+This should fix the leak reported in issue #610.
+---
+ src/snmp.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/snmp.c b/src/snmp.c
+index d440f7f..dacdede 100644
+--- a/src/snmp.c
++++ b/src/snmp.c
+@@ -1503,6 +1503,10 @@ static int csnmp_read_table (host_definition_t *host, data_definition_t *data)
+     snmp_free_pdu (res);
+   res = NULL;
++  if (req != NULL)
++    snmp_free_pdu (req);
++  req = NULL;
++
+   if (status == 0)
+     csnmp_dispatch_table (host, data, instance_list_head, value_list_head);
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0015-curl_xml-plugin-Fixed-tautological-pointer-compariso.patch b/src/patches/collectd/0015-curl_xml-plugin-Fixed-tautological-pointer-compariso.patch
new file mode 100644 (file)
index 0000000..30e1a08
--- /dev/null
@@ -0,0 +1,28 @@
+From 0afea60611f115a28b8ec331aba610e3038c1ef2 Mon Sep 17 00:00:00 2001
+From: Arthur Marble <arthur@info9.net>
+Date: Sun, 17 Aug 2014 17:34:04 -0500
+Subject: [PATCH 15/22] curl_xml plugin: Fixed tautological pointer comparison
+ error.
+
+Fixes: http://bugs.debian.org/758481
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/curl_xml.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index e31e73d..28b2ded 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -344,7 +344,7 @@ static int cx_handle_instance_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
+   /* If the base xpath returns more than one block, the result is assumed to be
+    * a table. The `Instnce' option is not optional in this case. Check for the
+    * condition and inform the user. */
+-  if (is_table && (vl->type_instance == NULL))
++  if (is_table)
+   {
+     WARNING ("curl_xml plugin: "
+         "Base-XPath %s is a table (more than one result was returned), "
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0016-Add-support-for-OpenVPN-2.3.0-status-files.patch b/src/patches/collectd/0016-Add-support-for-OpenVPN-2.3.0-status-files.patch
new file mode 100644 (file)
index 0000000..ca5b407
--- /dev/null
@@ -0,0 +1,160 @@
+From 9d065b401c2c393bef5a6e58b5deeda7d59d4f39 Mon Sep 17 00:00:00 2001
+From: Ed Okerson <ed@okerson.com>
+Date: Mon, 11 Feb 2013 15:46:10 -0600
+Subject: [PATCH 16/22] Add support for OpenVPN 2.3.0 status files.
+
+Fix a bug that breaks this module if a server is running multiple instances of OpenVPN and one instance does not have any clients connected.
+---
+ src/openvpn.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 84 insertions(+), 6 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 2aca414..d2b6f17 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -32,6 +32,7 @@
+ #define V1STRING "Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since\n"
+ #define V2STRING "HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t)\n"
+ #define V3STRING "HEADER CLIENT_LIST Common Name Real Address Virtual Address Bytes Received Bytes Sent Connected Since Connected Since (time_t)\n"
++#define V4STRING "HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t),Username\n"
+ #define VSSTRING "OpenVPN STATISTICS\n"
+@@ -43,6 +44,7 @@ struct vpn_status_s
+               MULTI1 = 1, /* status-version 1 */
+               MULTI2,     /* status-version 2 */
+               MULTI3,     /* status-version 3 */
++              MULTI4,     /* status-version 4 */
+               SINGLE = 10 /* currently no versions for single mode, maybe in the future */
+       } version;
+       char *name;
+@@ -452,13 +454,77 @@ static int multi3_read (char *name, FILE *fh)
+       return (read);
+ } /* int multi3_read */
++/* for reading status version 4 */
++static int multi4_read (char *name, FILE *fh)
++{
++      char buffer[1024];
++      char *fields[11];
++      const int max_fields = STATIC_ARRAY_SIZE (fields);
++      int  fields_num, read = 0;
++      long long sum_users    = 0;
++
++      while (fgets (buffer, sizeof (buffer), fh) != NULL)
++      {
++              fields_num = openvpn_strsplit (buffer, fields, max_fields);
++
++              /* status file is generated by openvpn/multi.c:multi_print_status()
++               * http://svn.openvpn.net/projects/openvpn/trunk/openvpn/multi.c
++               *
++               * The line we're expecting has 9 fields. We ignore all lines
++               *  with more or less fields.
++               */
++              if (fields_num != 9)
++                      continue;
++
++
++              if (strcmp (fields[0], "CLIENT_LIST") != 0)
++                      continue;
++
++
++              if (collect_user_count)
++                      /* If so, sum all users, ignore the individuals*/
++              {
++                      sum_users += 1;
++              }
++              if (collect_individual_users)
++              {
++                      if (new_naming_schema)
++                      {
++                              /* plugin inst = file name, type inst = fields[1] */
++                              iostats_submit (name,               /* vpn instance */
++                                              fields[1],          /* "Common Name" */
++                                              atoll (fields[4]),  /* "Bytes Received" */
++                                              atoll (fields[5])); /* "Bytes Sent" */
++                      }
++                      else
++                      {
++                              /* plugin inst = fields[1], type inst = "" */
++                              iostats_submit (fields[1],          /* "Common Name" */
++                                              NULL,               /* unused when in multimode */
++                                              atoll (fields[4]),  /* "Bytes Received" */
++                                              atoll (fields[5])); /* "Bytes Sent" */
++                      }
++              }
++
++              read = 1;
++      }
++
++      if (collect_user_count)
++      {
++              numusers_submit(name, name, sum_users);
++              read = 1;
++      }
++
++      return (read);
++} /* int multi4_read */
++
+ /* read callback */
+ static int openvpn_read (void)
+ {
+       FILE *fh;
+-      int  i, read;
++      int  i, vpn_read, read;
+-      read = 0;
++      vpn_read = read = 0;
+       /* call the right read function for every status entry in the list */
+       for (i = 0; i < vpn_num; i++)
+@@ -476,23 +542,28 @@ static int openvpn_read (void)
+               switch (vpn_list[i]->version)
+               {
+                       case SINGLE:
+-                              read = single_read(vpn_list[i]->name, fh);
++                              vpn_read = single_read(vpn_list[i]->name, fh);
+                               break;
+                       case MULTI1:
+-                              read = multi1_read(vpn_list[i]->name, fh);
++                              vpn_read = multi1_read(vpn_list[i]->name, fh);
+                               break;
+                       case MULTI2:
+-                              read = multi2_read(vpn_list[i]->name, fh);
++                              vpn_read = multi2_read(vpn_list[i]->name, fh);
+                               break;
+                       case MULTI3:
+-                              read = multi3_read(vpn_list[i]->name, fh);
++                              vpn_read = multi3_read(vpn_list[i]->name, fh);
++                              break;
++
++                      case MULTI4:
++                              vpn_read = multi4_read(vpn_list[i]->name, fh);
+                               break;
+               }
+               fclose (fh);
++              read += vpn_read;
+       }
+       return (read ? 0 : -1);
+@@ -549,6 +620,13 @@ static int version_detect (const char *filename)
+                       version = MULTI3;
+                       break;
+               }
++              /* searching for multi version 4 */
++              else if (strcmp (buffer, V4STRING) == 0)
++              {
++                      DEBUG ("openvpn plugin: found status file version MULTI4");
++                      version = MULTI4;
++                      break;
++              }
+       }
+       if (version == 0)
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0017-openvpn-plugin-Don-t-signal-an-error-when-no-clients.patch b/src/patches/collectd/0017-openvpn-plugin-Don-t-signal-an-error-when-no-clients.patch
new file mode 100644 (file)
index 0000000..0d5b319
--- /dev/null
@@ -0,0 +1,56 @@
+From 8516f9abb625fa7b9321e62307305aa6499be4e8 Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Sun, 14 Sep 2014 19:28:05 +0200
+Subject: [PATCH 17/22] openvpn plugin: Don't signal an error when no clients
+ are connected.
+
+In the multi1_read() function, an error (zero) was returned when no
+clients were currently connected to the OpenVPN server, because the
+"read" variable was initialized to zero and the while loop exited before
+it was set to one. This is not the intended behavior.
+
+Thanks to @srix for reporting this issue!
+
+Fixes: #731
+---
+ src/openvpn.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index d2b6f17..7d4e4a0 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -267,7 +267,7 @@ static int multi1_read (char *name, FILE *fh)
+ {
+       char buffer[1024];
+       char *fields[10];
+-      int  fields_num, read = 0, found_header = 0;
++      int  fields_num, found_header = 0;
+       long long sum_users = 0;
+       /* read the file until the "ROUTING TABLE" line is found (no more info after) */
+@@ -314,17 +314,15 @@ static int multi1_read (char *name, FILE *fh)
+                                               atoll (fields[3])); /* "Bytes Sent" */
+                       }
+               }
+-
+-              read = 1;
+       }
++      if (ferror (fh))
++              return (0);
++
+       if (collect_user_count)
+-      {
+               numusers_submit(name, name, sum_users);
+-              read = 1;
+-      }
+-      return (read);
++      return (1);
+ } /* int multi1_read */
+ /* for reading status version 2 */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0018-openvpn-Remove-boguous-file-handler-check.patch b/src/patches/collectd/0018-openvpn-Remove-boguous-file-handler-check.patch
new file mode 100644 (file)
index 0000000..850e4fb
--- /dev/null
@@ -0,0 +1,26 @@
+From 5dbc1cfb4baff831f950b3c9de8c332bc9aa2b6e Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 17 Sep 2014 11:25:17 +0200
+Subject: [PATCH 18/22] openvpn: Remove boguous file handler check
+
+---
+ src/openvpn.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 7d4e4a0..9598abc 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -316,9 +316,6 @@ static int multi1_read (char *name, FILE *fh)
+               }
+       }
+-      if (ferror (fh))
+-              return (0);
+-
+       if (collect_user_count)
+               numusers_submit(name, name, sum_users);
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0019-openvpn-Ignore-not-fully-established-connections.patch b/src/patches/collectd/0019-openvpn-Ignore-not-fully-established-connections.patch
new file mode 100644 (file)
index 0000000..4dde610
--- /dev/null
@@ -0,0 +1,59 @@
+From a45710a5a887d25ab0e04ce1553bb268013ef780 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Tue, 16 Sep 2014 14:44:42 +0200
+Subject: [PATCH 19/22] openvpn: Ignore not fully established connections
+
+---
+ src/openvpn.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 9598abc..6a0ffbd 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -292,6 +292,10 @@ static int multi1_read (char *name, FILE *fh)
+               if (fields_num < 4)
+                       continue;
++              // Ignore not yet fully established connections
++              if (strcmp(fields[1], "UNDEF") == 0)
++                      continue;
++
+               if (collect_user_count)
+                       /* If so, sum all users, ignore the individuals*/
+               {
+@@ -347,6 +351,10 @@ static int multi2_read (char *name, FILE *fh)
+               if (strcmp (fields[0], "CLIENT_LIST") != 0)
+                       continue;
++              // Ignore not yet fully established connections
++              if (strcmp(fields[0], "UNDEF") == 0)
++                      continue;
++
+               if (collect_user_count)
+                       /* If so, sum all users, ignore the individuals*/
+               {
+@@ -412,6 +420,10 @@ static int multi3_read (char *name, FILE *fh)
+                       if (strcmp (fields[0], "CLIENT_LIST") != 0)
+                               continue;
++                      // Ignore not yet fully established connections
++                      if (strcmp(fields[0], "UNDEF") == 0)
++                              continue;
++
+                       if (collect_user_count)
+                               /* If so, sum all users, ignore the individuals*/
+                       {
+@@ -475,6 +487,9 @@ static int multi4_read (char *name, FILE *fh)
+               if (strcmp (fields[0], "CLIENT_LIST") != 0)
+                       continue;
++              // Ignore not yet fully established connections
++              if (strcmp(fields[0], "UNDEF") == 0)
++                      continue;
+               if (collect_user_count)
+                       /* If so, sum all users, ignore the individuals*/
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0020-openvpn-Make-read-functions-robust-like-in-8516f9abb.patch b/src/patches/collectd/0020-openvpn-Make-read-functions-robust-like-in-8516f9abb.patch
new file mode 100644 (file)
index 0000000..79f6742
--- /dev/null
@@ -0,0 +1,102 @@
+From 46e716ee8d4208924d10f57f9ed97c99674a6ef4 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 17 Sep 2014 11:31:13 +0200
+Subject: [PATCH 20/22] openvpn: Make read functions robust like in
+ 8516f9abb625fa7b9321e62307305aa6499be4e8
+
+---
+ src/openvpn.c | 21 ++++++---------------
+ 1 file changed, 6 insertions(+), 15 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 6a0ffbd..f686721 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -332,7 +332,7 @@ static int multi2_read (char *name, FILE *fh)
+       char buffer[1024];
+       char *fields[10];
+       const int max_fields = STATIC_ARRAY_SIZE (fields);
+-      int  fields_num, read = 0;
++      int  fields_num;
+       long long sum_users    = 0;
+       while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -379,17 +379,14 @@ static int multi2_read (char *name, FILE *fh)
+                                               atoll (fields[5])); /* "Bytes Sent" */
+                       }
+               }
+-
+-              read = 1;
+       }
+       if (collect_user_count)
+       {
+               numusers_submit(name, name, sum_users);
+-              read = 1;
+       }
+-      return (read);
++      return (1);
+ } /* int multi2_read */
+ /* for reading status version 3 */
+@@ -398,7 +395,7 @@ static int multi3_read (char *name, FILE *fh)
+       char buffer[1024];
+       char *fields[15];
+       const int max_fields = STATIC_ARRAY_SIZE (fields);
+-      int  fields_num, read = 0;
++      int  fields_num;
+       long long sum_users    = 0;
+       while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -447,18 +444,15 @@ static int multi3_read (char *name, FILE *fh)
+                                                       atoll (fields[5])); /* "Bytes Sent" */
+                               }
+                       }
+-
+-                      read = 1;
+               }
+       }
+       if (collect_user_count)
+       {
+               numusers_submit(name, name, sum_users);
+-              read = 1;
+       }
+-      return (read);
++      return (1);
+ } /* int multi3_read */
+ /* for reading status version 4 */
+@@ -467,7 +461,7 @@ static int multi4_read (char *name, FILE *fh)
+       char buffer[1024];
+       char *fields[11];
+       const int max_fields = STATIC_ARRAY_SIZE (fields);
+-      int  fields_num, read = 0;
++      int  fields_num;
+       long long sum_users    = 0;
+       while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -515,17 +509,14 @@ static int multi4_read (char *name, FILE *fh)
+                                               atoll (fields[5])); /* "Bytes Sent" */
+                       }
+               }
+-
+-              read = 1;
+       }
+       if (collect_user_count)
+       {
+               numusers_submit(name, name, sum_users);
+-              read = 1;
+       }
+-      return (read);
++      return (1);
+ } /* int multi4_read */
+ /* read callback */
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0021-openvpn-Fix-copy-and-paste-error.patch b/src/patches/collectd/0021-openvpn-Fix-copy-and-paste-error.patch
new file mode 100644 (file)
index 0000000..65c293d
--- /dev/null
@@ -0,0 +1,25 @@
+From 41253b68808deade2a1866f0c24f4bbc029a92c2 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 24 Sep 2014 14:38:04 +0200
+Subject: [PATCH 21/22] openvpn: Fix copy-and-paste error
+
+---
+ src/openvpn.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index f686721..2db3677 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -293,7 +293,7 @@ static int multi1_read (char *name, FILE *fh)
+                       continue;
+               // Ignore not yet fully established connections
+-              if (strcmp(fields[1], "UNDEF") == 0)
++              if (strcmp(fields[0], "UNDEF") == 0)
+                       continue;
+               if (collect_user_count)
+-- 
+1.9.3
+
diff --git a/src/patches/collectd/0022-openvpn-Change-data-type-from-COUNTER-to-DERIVE.patch b/src/patches/collectd/0022-openvpn-Change-data-type-from-COUNTER-to-DERIVE.patch
new file mode 100644 (file)
index 0000000..ec6819c
--- /dev/null
@@ -0,0 +1,107 @@
+From 3458d610e8b99eb88c2f06ad576b4f46e0169877 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Fri, 26 Sep 2014 12:02:27 +0200
+Subject: [PATCH 22/22] openvpn: Change data type from COUNTER to DERIVE
+
+COUNTER is not what we want here, so we will use DERIVE.
+---
+ src/openvpn.c | 26 +++++++++++++-------------
+ src/types.db  |  2 ++
+ 2 files changed, 15 insertions(+), 13 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 2db3677..d446e99 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -116,13 +116,13 @@ static void numusers_submit (char *pinst, char *tinst, gauge_t value)
+ } /* void numusers_submit */
+ /* dispatches stats about traffic (TCP or UDP) generated by the tunnel per single endpoint */
+-static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx)
++static void iostats_submit (char *pinst, char *tinst, derive_t rx, derive_t tx)
+ {
+       value_t values[2];
+       value_list_t vl = VALUE_LIST_INIT;
+-      values[0].counter = rx;
+-      values[1].counter = tx;
++      values[0].derive = rx;
++      values[1].derive = tx;
+       /* NOTE ON THE NEW NAMING SCHEMA:
+        *       using plugin_instance to identify each vpn config (and
+@@ -137,7 +137,7 @@ static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx
+       if (pinst != NULL)
+               sstrncpy (vl.plugin_instance, pinst,
+                               sizeof (vl.plugin_instance));
+-      sstrncpy (vl.type, "if_octets", sizeof (vl.type));
++      sstrncpy (vl.type, "if_octets_derive", sizeof (vl.type));
+       if (tinst != NULL)
+               sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
+@@ -146,13 +146,13 @@ static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx
+ /* dispatches stats about data compression shown when in single mode */
+ static void compression_submit (char *pinst, char *tinst,
+-              counter_t uncompressed, counter_t compressed)
++              derive_t uncompressed, derive_t compressed)
+ {
+       value_t values[2];
+       value_list_t vl = VALUE_LIST_INIT;
+-      values[0].counter = uncompressed;
+-      values[1].counter = compressed;
++      values[0].derive = uncompressed;
++      values[1].derive = compressed;
+       vl.values = values;
+       vl.values_len = STATIC_ARRAY_SIZE (values);
+@@ -161,7 +161,7 @@ static void compression_submit (char *pinst, char *tinst,
+       if (pinst != NULL)
+               sstrncpy (vl.plugin_instance, pinst,
+                               sizeof (vl.plugin_instance));
+-      sstrncpy (vl.type, "compression", sizeof (vl.type));
++      sstrncpy (vl.type, "compression_dervice", sizeof (vl.type));
+       if (tinst != NULL)
+               sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
+@@ -175,11 +175,11 @@ static int single_read (char *name, FILE *fh)
+       const int max_fields = STATIC_ARRAY_SIZE (fields);
+       int  fields_num, read = 0;
+-      counter_t link_rx, link_tx;
+-      counter_t tun_rx, tun_tx;
+-      counter_t pre_compress, post_compress;
+-      counter_t pre_decompress, post_decompress;
+-      counter_t overhead_rx, overhead_tx;
++      derive_t link_rx, link_tx;
++      derive_t tun_rx, tun_tx;
++      derive_t pre_compress, post_compress;
++      derive_t pre_decompress, post_decompress;
++      derive_t overhead_rx, overhead_tx;
+       link_rx = 0;
+       link_tx = 0;
+diff --git a/src/types.db b/src/types.db
+index ad54240..03ec75b 100644
+--- a/src/types.db
++++ b/src/types.db
+@@ -18,6 +18,7 @@ cache_result         value:COUNTER:0:4294967295
+ cache_size            value:GAUGE:0:4294967295
+ charge                        value:GAUGE:0:U
+ compression           uncompressed:COUNTER:0:U, compressed:COUNTER:0:U
++compression_derive    uncompressed:DERIVE:0:U, compressed:DERIVE:0:U
+ compression_ratio     value:GAUGE:0:2
+ connections           value:COUNTER:0:U
+ conntrack             entropy:GAUGE:0:4294967295
+@@ -74,6 +75,7 @@ if_dropped           rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_errors             rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_multicast          value:COUNTER:0:4294967295
+ if_octets             rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
++if_octets_derive      rx:DERIVE:0:U, tx:DERIVE:0:U
+ if_packets            rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_rx_errors          value:COUNTER:0:4294967295
+ if_tx_errors          value:COUNTER:0:4294967295
+-- 
+1.9.3
+