Your message dated Wed, 29 May 2019 17:46:00 +0000
with message-id <05ce3b6f-7cf4-08a2-8341-7d4c6bac5...@thykier.net>
and subject line Re: Bug#929635: unblock: munin/2.0.49-1
has caused the Debian Bug report #929635,
regarding unblock: munin/2.0.49-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
929635: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=929635
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package munin, it fixes three important bugs (and a bunch
of normal bugs). munin is a leaf package and 2.0.49 is just another bugfix
release and has been in sid since 11 days without any new issues reported.

munin (2.0.49-1) unstable; urgency=medium

  [ Lars Kruse ]
  * New upstream version 2.0.49, fixing the upstream issue #1187
    (https://github.com/munin-monitoring/munin/issues/1187) which breaks the
    visualization of comparison pages and the "problems" overview for munin's
    default settings ("html_strategy" and "graph_strategy" being "cron").
  * New upstream version 2.0.48, fixing various issues, including bugs in:
    - Accept DNS names in "allow" (Closes: #483617)
    - Natural sort output on cpuspeed plugin (Closes: #924366)
    - postgres_connections_ "Query failed!" (Closes: #924424)
    - diskstat_ plugin fails with 4.19 kernels (Closes: #926146)
    - open_files max is 18 quintillion, obscuring graph (Closes: #928211)
    - upstream issues:
      * https://github.com/munin-monitoring/munin/issues/579:
        A connection issue with a node leads to the premature removal of all
        its graphs from the master visualization, if any plugin (from any
        node) returned an invalid output.
      * https://github.com/munin-monitoring/munin/issues/951:
        munin-async failed to handle plugins with names containing special
        characters. Such valid plugins worked only locally, but not via
        munin-async.
      * https://github.com/munin-monitoring/munin/issues/460:
        In an fcgid-based setup (recommended when using nginx) every but the
        first request for a "comparison" page returned invalid graphs due to
        a mistaken permanent internal state change. This long-standing issue
        plagued munin since wheezy.
  * Re-export upstream signing key without extra signatures.
  * Ensure that /var/cache/munin/www exists.
    Thanks to Marvin Gülker (Closes: #927692)
  * Keep permission of /run/munin in sync for systemd and sysvinit

 -- Holger Levsen <hol...@debian.org>  Thu, 16 May 2019 01:21:08 +0200

$ debdiff munin_2.0.47-1.dsc  munin_2.0.49-1.dsc | diffstat
 ChangeLog                                           |   56 ++++++++++++
 RELEASE                                             |    2 
 debian/changelog                                    |   57 ++++++++++--
 debian/examples/systemd-fastcgi/munin-graph.service |   11 ++
 debian/examples/systemd-fastcgi/munin-graph.socket  |    8 +
 debian/examples/systemd-fastcgi/munin-html.service  |   11 ++
 debian/examples/systemd-fastcgi/munin-html.socket   |    8 +
 debian/munin-common.tmpfile                         |    2 
 debian/munin-node.tmpfile                           |    2 
 debian/munin.examples                               |    1 
 debian/munin.init                                   |   10 +-
 debian/tests/munin-node/02.plugins.t                |    4 
 debian/upstream/signing-key.asc                     |   39 --------
 master/lib/Munin/Master/Config.pm                   |   21 +++-
 master/lib/Munin/Master/HTMLOld.pm                  |   92 ++++++++++++++++++--
 master/lib/Munin/Master/Node.pm                     |   32 ++++--
 master/lib/Munin/Master/Update.pm                   |    3 
 master/lib/Munin/Master/UpdateWorker.pm             |   26 ++++-
 node/_bin/munin-asyncd.in                           |    5 -
 node/lib/Munin/Node/Config.pm                       |    1 
 node/lib/Munin/Node/SpoolWriter.pm                  |    9 +
 node/t/munin_node_spoolreader.t                     |   40 ++++----
 node/t/munin_node_spoolwriter.t                     |    4 
 plugins/node.d.linux/acpi.in                        |    2 
 plugins/node.d.linux/cpuspeed.in                    |    2 
 plugins/node.d.linux/diskstat_.in                   |    4 
 plugins/node.d.linux/open_files.in                  |    6 -
 plugins/node.d/nutups_.in                           |   16 ++-
 plugins/node.d/postgres_connections_.in             |    2 
 plugins/node.d/snmp__if_.in                         |    4 
 30 files changed, 348 insertions(+), 132 deletions(-)

The full debdiff is attached.

unblock munin/2.0.49-1


-- 
tschau,
        Holger

-------------------------------------------------------------------------------
               holger@(debian|reproducible-builds|layer-acht).org
       PGP fingerprint: B8BF 5413 7B09 D35C F026 FE9D 091A B856 069A AA1C

Dance like no one's watching. Encrypt like everyone is.
diff -Nru munin-2.0.47/ChangeLog munin-2.0.49/ChangeLog
--- munin-2.0.47/ChangeLog	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/ChangeLog	2019-05-09 05:45:43.000000000 +0200
@@ -1,5 +1,60 @@
 -*- text -*-
 
+munin-2.0.49, 2019-05-09
+
+-------
+Summary
+-------
+
+Bugfix release.
+
+------------------
+Detailed Changelog
+------------------
+
+Lars Kruse (2):
+      Fix the reversal of path manipulation
+      Add image path manipulation for "problems" graphs
+
+
+munin-2.0.48, 2019-05-03
+
+-------
+Summary
+-------
+
+Bugfix release.
+
+------------------
+Detailed Changelog
+------------------
+
+Lars Kruse (10):
+      munin-cgi-html: avoid accidental permanent path manipulation
+      Plugins: use natural order for numbered items with multiple digits
+      Ignore malformed lines when parsing "datafile"
+      Plugin snmp__if: handle broken "zero" speed announcements
+      Plugin diskstat_: accept block device information of newer kernel
+      tests: verify name munging of remote plugins via async
+      Plugin open_files: remove "max" field from graph
+      Allow node-specific TLS settings on the master
+      Add support for the Net::Server option "reverse_lookups"
+
+Matthew Gabeler-Lee (1):
+      fix(nutups): make frequency chart aware of input, output, not polling
+
+Valentin Lorentz (1):
+      Sanitise plugin names in munin-asyncd.
+
+Vincas Dargis (1):
+      Remove stray comment in postgresql_connections_
+
+Zenon Mousmoulas (3):
+      Let the server use max timestamp rather than now for non-timestamped
+      Do not fall back to current timestamp for spoolfetch
+      Use a named constant rather than hardcoding -1
+
+
 munin-2.0.47, 2019-02-28
 
 -------
@@ -16,6 +71,7 @@
       fix t/munin_master_update.t warning
       t: remove munin_master_processmanager.t
 
+
 munin-2.0.46, 2019-02-28
 
 -------
diff -Nru munin-2.0.47/debian/changelog munin-2.0.49/debian/changelog
--- munin-2.0.47/debian/changelog	2019-02-28 16:06:07.000000000 +0100
+++ munin-2.0.49/debian/changelog	2019-05-16 01:21:08.000000000 +0200
@@ -1,3 +1,37 @@
+munin (2.0.49-1) unstable; urgency=medium
+
+  [ Lars Kruse ]
+  * New upstream version 2.0.49, fixing the upstream issue #1187
+    (https://github.com/munin-monitoring/munin/issues/1187) which breaks the
+    visualization of comparison pages and the "problems" overview for munin's
+    default settings ("html_strategy" and "graph_strategy" being "cron").
+  * New upstream version 2.0.48, fixing various issues, including bugs in:
+    - Accept DNS names in "allow" (Closes: #483617)
+    - Natural sort output on cpuspeed plugin (Closes: #924366)
+    - postgres_connections_ "Query failed!" (Closes: #924424)
+    - diskstat_ plugin fails with 4.19 kernels (Closes: #926146)
+    - open_files max is 18 quintillion, obscuring graph (Closes: #928211)
+    - upstream issues:
+      * https://github.com/munin-monitoring/munin/issues/579:
+        A connection issue with a node leads to the premature removal of all
+        its graphs from the master visualization, if any plugin (from any
+        node) returned an invalid output.
+      * https://github.com/munin-monitoring/munin/issues/951:
+        munin-async failed to handle plugins with names containing special
+        characters. Such valid plugins worked only locally, but not via
+        munin-async.
+      * https://github.com/munin-monitoring/munin/issues/460:
+        In an fcgid-based setup (recommended when using nginx) every but the
+        first request for a "comparison" page returned invalid graphs due to
+        a mistaken permanent internal state change. This long-standing issue
+        plagued munin since wheezy.
+  * Re-export upstream signing key without extra signatures.
+  * Ensure that /var/cache/munin/www exists.
+    Thanks to Marvin Gülker (Closes: #927692)
+  * Keep permission of /run/munin in sync for systemd and sysvinit
+
+ -- Holger Levsen <hol...@debian.org>  Thu, 16 May 2019 01:21:08 +0200
+
 munin (2.0.47-1) unstable; urgency=medium
 
   [ Holger Levsen ]
@@ -8,14 +42,14 @@
   * Add 'Webservice' field to upstream metadata.
   * munin-node.README.Debian: update plugin customization hints
   * munin-node.README.Debian: mention behavioural changes due to systemd
-    (Closes: #921985)
+    (Closes: #918851, #921985)
   * Remove references to "munin-sched" (removed by upstream)
 
  -- Holger Levsen <hol...@debian.org>  Thu, 28 Feb 2019 16:06:07 +0100
 
 munin (2.0.45-1) unstable; urgency=medium
 
-  * New upstream release.
+  * New upstream release. (Closes: #918105)
 
  -- Holger Levsen <hol...@debian.org>  Thu, 07 Feb 2019 00:10:46 +0100
 
@@ -32,7 +66,7 @@
 
 munin (2.0.44-1) unstable; urgency=medium
 
-  * New upstream bugfix release.
+  * New upstream bugfix release. (Closes: #914138, #914156)
 
   [ Lars Kruse ]
   * Move plugin-related "Suggests" from "munin-node" to plugin packages.
@@ -63,7 +97,7 @@
 munin (2.0.43-1) unstable; urgency=medium
 
   [ Lars Kruse ]
-  * New upstream version 2.0.43, Closes: #913661
+  * New upstream version 2.0.43, Closes: #913661, #914157
   * Remove duplicate systemd-tmpfiles line for /run/munin from munin-node.
     Thanks to Vincas Dargis (Closes: #913784)
   * Add autopktest for default user context of plugins.
@@ -239,7 +273,7 @@
 munin (2.0.37-1) unstable; urgency=medium
 
   * New upstream version 2.0.37.
-  * New upstream version 2.0.36, Closes: #894017.
+  * New upstream version 2.0.36, Closes: #806172, #862240, #894017
   * New upstream version 2.0.35, fixing various issues, including bugs in:
     - plugin http_loadtime: Closes: #798258, #862794, #886517
     - plugin netstat: Closes: #861851
@@ -352,15 +386,16 @@
 
 munin (2.0.28-1) unstable; urgency=medium
 
-  * New upstream version. (Closes: #846391, #598554), see upstream ChangeLog
-    for details.
+  * New upstream version. (Closes: #846391, #598554, #682782), see
+    upstream ChangeLog for details.
 
  -- Holger Levsen <hol...@debian.org>  Tue, 06 Dec 2016 13:15:50 +0100
 
 munin (2.0.27-1) unstable; urgency=medium
 
-  * New upstream version, (Closes: #767032, #768553, #825136, #834194), see
-    upstream ChangeLog for details.
+  * New upstream version,
+    (Closes: #640168, #698302, #767032, #768553, #825136, #834194),
+    see upstream ChangeLog for details.
 
  -- Holger Levsen <hol...@debian.org>  Mon, 31 Oct 2016 21:59:54 +0100
 
@@ -607,7 +642,7 @@
     your work, Tom and Steve!
 
   [ Stig Sandbeck Mathisen ]
-  * New upstream version (Closes: #710527, #710529)
+  * New upstream version (Closes: #710527, #710528, #710529)
   * Add dep8 autopkg tests
   * Remove /var/lib/munin-node/ when purging munin-node
 
@@ -657,7 +692,7 @@
 
 munin (2.0.10-1) experimental; urgency=low
 
-  * New upstream release (Closes: #615957, #671448)
+  * New upstream release (Closes: #615957, #671448, #703149)
 
  -- Stig Sandbeck Mathisen <s...@debian.org>  Thu, 10 Jan 2013 11:07:33 +0100
 
diff -Nru munin-2.0.47/debian/examples/systemd-fastcgi/munin-graph.service munin-2.0.49/debian/examples/systemd-fastcgi/munin-graph.service
--- munin-2.0.47/debian/examples/systemd-fastcgi/munin-graph.service	1970-01-01 01:00:00.000000000 +0100
+++ munin-2.0.49/debian/examples/systemd-fastcgi/munin-graph.service	2019-05-06 14:57:26.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=Munin FastCGI Graph
+Requires=munin-graph.socket
+
+[Service]
+User=munin
+Group=munin
+ExecStart=/usr/lib/munin/cgi/munin-cgi-graph
+StandardInput=socket
+StandardOutput=inherit
+StandardError=journal
diff -Nru munin-2.0.47/debian/examples/systemd-fastcgi/munin-graph.socket munin-2.0.49/debian/examples/systemd-fastcgi/munin-graph.socket
--- munin-2.0.47/debian/examples/systemd-fastcgi/munin-graph.socket	1970-01-01 01:00:00.000000000 +0100
+++ munin-2.0.49/debian/examples/systemd-fastcgi/munin-graph.socket	2019-05-06 14:57:26.000000000 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=Munin FastCGI Graph Socket
+
+[Socket]
+ListenStream=/run/munin/fcgi-graph.sock
+
+[Install]
+WantedBy=sockets.target
diff -Nru munin-2.0.47/debian/examples/systemd-fastcgi/munin-html.service munin-2.0.49/debian/examples/systemd-fastcgi/munin-html.service
--- munin-2.0.47/debian/examples/systemd-fastcgi/munin-html.service	1970-01-01 01:00:00.000000000 +0100
+++ munin-2.0.49/debian/examples/systemd-fastcgi/munin-html.service	2019-05-06 14:57:26.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=Munin FastCGI HTML
+Requires=munin-html.socket
+
+[Service]
+User=munin
+Group=munin
+ExecStart=/usr/lib/munin/cgi/munin-cgi-html
+StandardInput=socket
+StandardOutput=inherit
+StandardError=journal
diff -Nru munin-2.0.47/debian/examples/systemd-fastcgi/munin-html.socket munin-2.0.49/debian/examples/systemd-fastcgi/munin-html.socket
--- munin-2.0.47/debian/examples/systemd-fastcgi/munin-html.socket	1970-01-01 01:00:00.000000000 +0100
+++ munin-2.0.49/debian/examples/systemd-fastcgi/munin-html.socket	2019-05-06 14:57:26.000000000 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=Munin FastCGI HTML Socket
+
+[Socket]
+ListenStream=/run/munin/fcgi-html.sock
+
+[Install]
+WantedBy=sockets.target
diff -Nru munin-2.0.47/debian/munin-common.tmpfile munin-2.0.49/debian/munin-common.tmpfile
--- munin-2.0.47/debian/munin-common.tmpfile	2019-02-28 15:50:42.000000000 +0100
+++ munin-2.0.49/debian/munin-common.tmpfile	2019-05-09 15:20:41.000000000 +0200
@@ -5,4 +5,6 @@
 # See tmpfiles.d(5) for details
 #
 
+# keep in sync with debian/munin.init (non-systemd)
 d /run/munin 0755 munin root
+d /var/cache/munin/www 0755 munin munin
diff -Nru munin-2.0.47/debian/munin.examples munin-2.0.49/debian/munin.examples
--- munin-2.0.47/debian/munin.examples	2019-02-28 15:50:43.000000000 +0100
+++ munin-2.0.49/debian/munin.examples	2019-05-06 14:57:26.000000000 +0200
@@ -1 +1,2 @@
 debian/examples/nginx
+debian/examples/systemd-fastcgi
diff -Nru munin-2.0.47/debian/munin.init munin-2.0.49/debian/munin.init
--- munin-2.0.47/debian/munin.init	2019-02-28 15:50:43.000000000 +0100
+++ munin-2.0.49/debian/munin.init	2019-05-09 15:20:41.000000000 +0200
@@ -6,8 +6,8 @@
 # Required-Stop:     $network $named $local_fs $remote_fs
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
-# Short-Description: Create /run/munin on boot
-# Description:       Create /run/munin on boot. Munin itself runs as CGI and has no extra startscript...
+# Short-Description: Create munin master directories on boot
+# Description:       Create munin master directories on boot. Munin itself runs as CGI or via cron and does not run a separate daemon.
 ### END INIT INFO
 
 
@@ -19,8 +19,10 @@
 
 case "$1" in
   start|restart|force-reload)
-	# Create various dirs
-	mkdir -p /run/munin && chown munin /run/munin
+	# Create various directories
+	# keep in sync with debian/munin-common.tmpfile (systemd-only)
+	mkdir -p /run/munin && chown munin /run/munin && chmod 755 /run/munin
+	mkdir -p /var/cache/munin/www && chown munin. /var/cache/munin/www && chmod 755 /var/cache/munin/www
 	exit $?
 	;;
   stop)
diff -Nru munin-2.0.47/debian/munin-node.tmpfile munin-2.0.49/debian/munin-node.tmpfile
--- munin-2.0.47/debian/munin-node.tmpfile	2019-02-28 15:50:42.000000000 +0100
+++ munin-2.0.49/debian/munin-node.tmpfile	2019-05-09 15:20:41.000000000 +0200
@@ -1,3 +1,3 @@
-# keep in sync with debian/munin.munin-node.init (non-systemd)
+# keep in sync with debian/munin-node.init (non-systemd)
 # /run/munin is handled by the dependent package "munin-common" (see debian/munin-common.tmpfile)
 d /var/log/munin 0755 munin adm
diff -Nru munin-2.0.47/debian/tests/munin-node/02.plugins.t munin-2.0.49/debian/tests/munin-node/02.plugins.t
--- munin-2.0.47/debian/tests/munin-node/02.plugins.t	2019-02-28 15:50:43.000000000 +0100
+++ munin-2.0.49/debian/tests/munin-node/02.plugins.t	2019-05-09 15:19:30.000000000 +0200
@@ -27,7 +27,6 @@
 irqstats
 load
 memory
-netstat
 open_files
 open_inodes
 proc_pri
@@ -51,6 +50,9 @@
       echo fw_conntrack
       echo fw_forwarded_local
     fi
+    if [ -x /bin/netstat ]; then
+      echo netstat
+    fi
   } | sort >expected_plugins
   test_cmp expected_plugins all_without_network_interfaces
 '
diff -Nru munin-2.0.47/debian/upstream/signing-key.asc munin-2.0.49/debian/upstream/signing-key.asc
--- munin-2.0.47/debian/upstream/signing-key.asc	2019-02-28 15:50:43.000000000 +0100
+++ munin-2.0.49/debian/upstream/signing-key.asc	2019-05-09 15:20:41.000000000 +0200
@@ -1,5 +1,4 @@
 -----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1
 
 mQINBE9Z0UYBEAChD/KVfJFENj65GLjiVEnrLwPqN6wF2EPsu3hnacKmXBJIUVOh
 ER6XC9hFmR2ZIXd8vkaHIIJ/3QmeUQsJWtd4JjHKV7vpTwStFbxtsexU0HVGpO10
@@ -73,40 +72,6 @@
 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
-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
-KKdSbY0AFQ==
-=qrF0
+L7FW3jHudm/cMmq68DXxQA==
+=WQyk
 -----END PGP PUBLIC KEY BLOCK-----
diff -Nru munin-2.0.47/master/lib/Munin/Master/Config.pm munin-2.0.49/master/lib/Munin/Master/Config.pm
--- munin-2.0.47/master/lib/Munin/Master/Config.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/master/lib/Munin/Master/Config.pm	2019-05-09 05:45:43.000000000 +0200
@@ -470,17 +470,26 @@
 
 sub _parse_config_line {
     # Parse and save contents of random user configuration.
-    my ($self, $prefix, $key, $value) = @_;
-    
-    my $longkey = $self->_concat_config_line_ok($prefix,$key,$value);
+    my ($self, $prefix, $key, $value, $skip_on_error) = @_;
+    my $longkey;
 
+    if ($skip_on_error) {
+        eval { $longkey = $self->_concat_config_line_ok($prefix, $key, $value); };
+        # Skip single malformed lines (error messages were emitted before).
+        # This is suitable for fault tolerant parsing of "datafile".
+        return if $EVAL_ERROR;
+    } else {
+        # A problem with a malformed line is allowed to rise to the file level.
+        # This is suitable for configuration files.
+        $longkey = $self->_concat_config_line_ok($prefix, $key, $value);
+    }
     $self->set_value($longkey,$value);
 }
 
 
 sub parse_config {
-    my ($self, $io) = @_;
-        
+    my ($self, $io, $skip_line_on_error) = @_;
+
     my $section = undef;
 
     my $continuation = '';
@@ -513,7 +522,7 @@
 	    $prefix = $1;
 	} else {
 	    my($key,$value) = split(/\s+/,$line,2);
-	    $self->_parse_config_line($prefix,$key,$value);
+	    $self->_parse_config_line($prefix, $key, $value, $skip_line_on_error);
         }
     }
 }
diff -Nru munin-2.0.47/master/lib/Munin/Master/HTMLOld.pm munin-2.0.49/master/lib/Munin/Master/HTMLOld.pm
--- munin-2.0.47/master/lib/Munin/Master/HTMLOld.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/master/lib/Munin/Master/HTMLOld.pm	2019-05-09 05:45:43.000000000 +0200
@@ -285,6 +285,9 @@
     # or even worse within a category inside it. We strip out the
     # extra '../' that is used to generate a relative path which is no
     # longer valid.
+    # Sadly this change is permanent and will influence successive
+    # responses in a permanent execution environment like fcgid or
+    # as a systemd socket service.  Thus we need to revert it later.
     foreach my $cat(@{$key->{'comparecategories'}}) {
         foreach my $service(@{$cat->{'services'}}) {
             foreach my $node(@{$service->{'nodes'}}) {
@@ -292,6 +295,8 @@
                               cimgday cimgweek cimgmonth cimgyear
                               zoomday zoomweek zoommonth zoomyear)) {
                     next unless defined($node->{$imgsrc});
+                    # keep a copy of the original value (to be restored below)
+                    $node->{"orig_$imgsrc"} = $node->{$imgsrc};
                     $node->{$imgsrc} =~ s|^\.\./\.\./(?:\.\./)?|../|;
                 }
             }
@@ -322,13 +327,32 @@
 									NWARNING => scalar(@{$htmlconfig->{"problems"}->{"warnings"}}),
 									NUNKNOWN => scalar(@{$htmlconfig->{"problems"}->{"unknowns"}}),
     );
+
+    # store template output before reverting links
+    my $template_output = $comparisontemplates{$t}->output;
+
+    # restore the paths to their original value
+    foreach my $cat(@{$key->{'comparecategories'}}) {
+        foreach my $service(@{$cat->{'services'}}) {
+            foreach my $node(@{$service->{'nodes'}}) {
+                foreach my $imgsrc(qw(imgday imgweek imgmonth imgyear
+                              cimgday cimgweek cimgmonth cimgyear
+                              zoomday zoomweek zoommonth zoomyear)) {
+                    next unless defined($node->{$imgsrc});
+                    $node->{$imgsrc} = $node->{"orig_$imgsrc"};
+                    delete($node->{"orig_$imgsrc"});
+                }
+            }
+        }
+    }
+
     if($emit_to_stdout){
-		print $comparisontemplates{$t}->output;
+        print $template_output;
 	} else {
 		ensure_dir_exists($file);
 	    open(my $FILE, '>', $file)
     	    or die "Cannot open $file for writing: $!";
-	    print $FILE $comparisontemplates{$t}->output;
+        print $FILE $template_output;
     	close $FILE;
 	}
 }
@@ -402,12 +426,18 @@
 
     DEBUG "[DEBUG] Creating global category page ".$filename;
 
+    # Manipulate the relative paths for the requested root-level context.
+    # Sadly this change is permanent and will influence successive
+    # responses in a permanent execution environment like fcgid or
+    # as a systemd socket service.  Thus we need to revert it later.
     foreach my $graphs(@{$key->{'graphs'}}) {
         foreach my $graph(@{$graphs->{'graphs'}}) {
             foreach my $imgsrc(qw(imgday imgweek imgmonth imgyear
                               cimgday cimgweek cimgmonth cimgyear
                               zoomday zoomweek zoommonth zoomyear)) {
-                $graph->{$imgsrc} =~ s|^(?:\.\./)+||
+                # keep a copy of the original value (to be restored below)
+                $graph->{"orig_$imgsrc"} = $graph->{$imgsrc};
+                $graph->{$imgsrc} =~ s|^(?:\.\./)+||;
             }
         }
     }
@@ -432,13 +462,28 @@
 						  NUNKNOWN => scalar(@{$htmlconfig->{"problems"}->{"unknowns"}}),
                          );
 
+    # store template output before reverting links
+    my $template_output = $graphtemplate->output;
+
+    # restore the paths to their original value
+    foreach my $graphs(@{$key->{'graphs'}}) {
+        foreach my $graph(@{$graphs->{'graphs'}}) {
+            foreach my $imgsrc(qw(imgday imgweek imgmonth imgyear
+                              cimgday cimgweek cimgmonth cimgyear
+                              zoomday zoomweek zoommonth zoomyear)) {
+                $graph->{$imgsrc} = $graph->{"orig_$imgsrc"};
+                delete($graph->{"orig_$imgsrc"});
+            }
+        }
+    }
+
     if($emit_to_stdout){
-		print $graphtemplate->output;
+        print $template_output;
 	} else {
 		ensure_dir_exists($filename);
 	    open(my $FILE, '>', $filename)
 			or die "Cannot open $filename for writing: $!";
-    	print $FILE $graphtemplate->output;
+        print $FILE $template_output;
 	    close $FILE;
 	}
 }
@@ -465,6 +510,23 @@
 
     INFO "[INFO] Creating problem page ".$filename;
 
+    # Manipulate the relative paths for the requested root-level context.
+    # Sadly this change is permanent and will influence successive
+    # responses in a permanent execution environment like fcgid or
+    # as a systemd socket service.  Thus we need to revert it later.
+    foreach my $problem_graphs (values %{$htmlconfig->{"problems"}}) {
+        foreach my $graph(@$problem_graphs) {
+            foreach my $imgsrc(qw(imgday imgweek imgmonth imgyear
+                                  cimgday cimgweek cimgmonth cimgyear
+                                  zoomday zoomweek zoommonth zoomyear)) {
+                next unless defined($graph->{$imgsrc});
+                # keep a copy of the original value (to be restored below)
+                $graph->{"orig_$imgsrc"} = $graph->{$imgsrc};
+                $graph->{$imgsrc} =~ s|^(?:\.\./)+||;
+            }
+        }
+    }
+
     $graphtemplate->param(
                           CSS_NAME    => get_css_name(),
                           R_PATH      => ".",
@@ -483,13 +545,29 @@
 						  NUNKNOWN => scalar(@{$htmlconfig->{"problems"}->{"unknowns"}}),
                          );
 
+    # store template output before reverting links
+    my $template_output = $graphtemplate->output;
+
+    # restore the paths to their original value
+    foreach my $problem_graphs (values %{$htmlconfig->{"problems"}}) {
+        foreach my $graph(@$problem_graphs) {
+            foreach my $imgsrc(qw(imgday imgweek imgmonth imgyear
+                                  cimgday cimgweek cimgmonth cimgyear
+                                  zoomday zoomweek zoommonth zoomyear)) {
+                next unless defined($graph->{$imgsrc});
+                $graph->{$imgsrc} = $graph->{"orig_$imgsrc"};
+                delete($graph->{"orig_$imgsrc"});
+            }
+        }
+    }
+
     if($emit_to_stdout){
-		print $graphtemplate->output;
+        print $template_output;
 	} else {
 		ensure_dir_exists($filename);
 	    open(my $FILE, '>', $filename)
 			or die "Cannot open $filename for writing: $!";
-    	print $FILE $graphtemplate->output;
+        print $FILE $template_output;
 	    close $FILE;
 	}
 }
diff -Nru munin-2.0.47/master/lib/Munin/Master/Node.pm munin-2.0.49/master/lib/Munin/Master/Node.pm
--- munin-2.0.47/master/lib/Munin/Master/Node.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/master/lib/Munin/Master/Node.pm	2019-05-09 05:45:43.000000000 +0200
@@ -17,6 +17,9 @@
 use Time::HiRes qw( gettimeofday tv_interval );
 use IO::Socket::INET6;
 
+# Used as a timestamp value, this declares none was found
+use constant NO_TIMESTAMP => -1;
+
 my $config = Munin::Master::Config->instance()->{config};
 
 # Quick version, to enable "DEBUG ... if $debug" constructs
@@ -151,13 +154,19 @@
     return 1;
 }
 
+
+sub _get_node_or_global_setting {
+    my ($self, $key) = @_;
+    return exists $self->{configref}->{$key} ? $self->{configref}->{$key} : $config->{$key};
+}
+
+
 sub _run_starttls_if_required {
     my ($self) = @_;
 
     # TLS should only be attempted if explicitly enabled. The default
     # value is therefore "disabled" (and not "auto" as before).
-    my $tls_requirement = exists $self->{configref}->{tls} ?
-                                   $self->{configref}->{tls} : $config->{tls};
+    my $tls_requirement = $self->_get_node_or_global_setting("tls");
     DEBUG "TLS set to \"$tls_requirement\".";
     return if $tls_requirement eq 'disabled';
     my $logger = Log::Log4perl->get_logger("Munin::Master");
@@ -166,13 +175,13 @@
         logger       => sub { $logger->warn(@_) },
         read_fd      => fileno($self->{reader}),
         read_func    => sub { _node_read_single($self) },
-        tls_ca_cert  => $config->{tls_ca_certificate},
-        tls_cert     => $config->{tls_certificate},
-        tls_paranoia => $tls_requirement, 
-        tls_priv     => $config->{tls_private_key},
-        tls_vdepth   => $config->{tls_verify_depth},
-        tls_verify   => $config->{tls_verify_certificate},
-        tls_match    => $config->{tls_match},
+        tls_ca_cert  => $self->_get_node_or_global_setting("tls_ca_certificate"),
+        tls_cert     => $self->_get_node_or_global_setting("tls_certificate"),
+        tls_paranoia => $tls_requirement,
+        tls_priv     => $self->_get_node_or_global_setting("tls_private_key"),
+        tls_vdepth   => $self->_get_node_or_global_setting("tls_verify_depth"),
+        tls_verify   => $self->_get_node_or_global_setting("tls_verify_certificate"),
+        tls_match    => $self->_get_node_or_global_setting("tls_match"),
         write_fd     => fileno($self->{writer}),
         write_func   => sub { _node_write_single($self, @_) },
     });
@@ -312,9 +321,6 @@
 
     new_service($service);
 
-    # every 'N' has the same value. Should not take parsing time into the equation
-    my $now = time;
-
     for my $line (@$lines) {
 
 	DEBUG "[CONFIG from $plugin] $line" if $debug;
@@ -362,7 +368,7 @@
         } elsif ($line =~ m{\A ([^\.]+)\.value \s+ (.+?) \s* $}xms) {
 	    $correct++;
 	    # Special case for dirtyconfig
-            my ($ds_name, $value, $when) = ($1, $2, $now);
+            my ($ds_name, $value, $when) = ($1, $2, NO_TIMESTAMP);
             
 	    $ds_name = $self->_sanitise_fieldname($ds_name);
 	    if ($value =~ /^(\d+):(.+)$/) {
diff -Nru munin-2.0.47/master/lib/Munin/Master/Update.pm munin-2.0.49/master/lib/Munin/Master/Update.pm
--- munin-2.0.47/master/lib/Munin/Master/Update.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/master/lib/Munin/Master/Update.pm	2019-05-09 05:45:43.000000000 +0200
@@ -81,7 +81,8 @@
 	    return {};
 	}
 	eval {
-	    $oldconfig->parse_config($file);
+            # parse file but skip malformed lines
+            $oldconfig->parse_config($file, 1);
 	};
 	if ($EVAL_ERROR) {
 	    WARN "[Warning] Could not parse datafile $datafile: $EVAL_ERROR";
diff -Nru munin-2.0.47/master/lib/Munin/Master/UpdateWorker.pm munin-2.0.49/master/lib/Munin/Master/UpdateWorker.pm
--- munin-2.0.47/master/lib/Munin/Master/UpdateWorker.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/master/lib/Munin/Master/UpdateWorker.pm	2019-05-09 05:45:43.000000000 +0200
@@ -224,7 +224,9 @@
 		    %{$service_config{global}});
 
 		my $last_updated_timestamp = $self->_update_rrd_files(\%service_config, \%service_data);
-          	$self->set_spoolfetch_timestamp($last_updated_timestamp);
+		if ($last_updated_timestamp) {
+		    $self->set_spoolfetch_timestamp($last_updated_timestamp);
+		}
 	    } # for @plugins
 
 	    # Send "quit" to node
@@ -574,7 +576,17 @@
     my $nodedesignation = $self->{host}{host_name}."/".
 	$self->{host}{address}.":".$self->{host}{port};
 
-    my $last_timestamp = 0;
+    my $last_timestamp =
+    	max(0,
+    	    map {
+    		my $svc = $_;
+    		map {
+    		    my $ds = $_;
+    		    @{$nested_service_data->{$svc}->{$ds}->{when} || []};
+    		} keys %{$nested_service_config->{data_source}{$svc}};
+    	    } keys %{$nested_service_config->{data_source}}
+    	);
+    my $last_timestamp_or_now = ($last_timestamp > 0) ? $last_timestamp : time;
 
     for my $service (keys %{$nested_service_config->{data_source}}) {
 
@@ -608,7 +620,7 @@
 	    my $rrd_file = $self->_create_rrd_file_if_needed($service, $ds_name, $ds_config, $first_epoch);
 
 	    if (defined($service_data) and defined($service_data->{$ds_name})) {
-		$last_timestamp = max($last_timestamp, $self->_update_rrd_file($rrd_file, $ds_name, $service_data->{$ds_name}));
+		$self->_update_rrd_file($rrd_file, $ds_name, $service_data->{$ds_name}, $last_timestamp_or_now);
 	    }
 	    else {
 		WARN "[WARNING] Service $service on $nodedesignation returned no data for label $ds_name";
@@ -848,7 +860,7 @@
 }
 
 sub _update_rrd_file {
-    my ($self, $rrd_file, $ds_name, $ds_values) = @_;
+    my ($self, $rrd_file, $ds_name, $ds_values, $max_timestamp) = @_;
 
     my $values = $ds_values->{value};
 
@@ -874,6 +886,10 @@
         my $value = $values->[$i];
         my $when = $ds_values->{when}[$i];
 
+	if ($when == $self->{node}->NO_TIMESTAMP) {
+	    $when = $max_timestamp;
+	}
+
 	# Ignore values that is not in monotonic increasing timestamp for the RRD.
 	# Otherwise it will reject the whole update
 	next if ($current_updated_timestamp && $when <= $current_updated_timestamp);
@@ -926,7 +942,7 @@
     $self->{state}{value}{"$rrd_file:42"}{current} = [ $current_updated_timestamp, $current_updated_value ]; 
     $self->{state}{value}{"$rrd_file:42"}{previous} = [ $previous_updated_timestamp, $previous_updated_value ]; 
 
-    return $current_updated_timestamp;
+    return scalar @update_rrd_data;
 }
 
 sub dump_to_file
diff -Nru munin-2.0.47/node/_bin/munin-asyncd.in munin-2.0.49/node/_bin/munin-asyncd.in
--- munin-2.0.47/node/_bin/munin-asyncd.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/node/_bin/munin-asyncd.in	2019-05-09 05:45:43.000000000 +0200
@@ -125,7 +125,10 @@
 			"w",
 		);
 
-		print $fh_list $plugins_line;
+		my $sanitised_plugins_line = $plugins_line;
+		$sanitised_plugins_line =~ s/[^_A-Za-z0-9 ]/_/g;
+
+		print $fh_list $sanitised_plugins_line;
 		print $fh_list "\n";
 	}
 
diff -Nru munin-2.0.47/node/lib/Munin/Node/Config.pm munin-2.0.49/node/lib/Munin/Node/Config.pm
--- munin-2.0.47/node/lib/Munin/Node/Config.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/node/lib/Munin/Node/Config.pm	2019-05-09 05:45:43.000000000 +0200
@@ -138,6 +138,7 @@
           deny
           cidr_allow
           cidr_deny
+          reverse_lookups
      );
 
     sub _handled_by_net_server {
diff -Nru munin-2.0.47/node/lib/Munin/Node/SpoolWriter.pm munin-2.0.49/node/lib/Munin/Node/SpoolWriter.pm
--- munin-2.0.47/node/lib/Munin/Node/SpoolWriter.pm	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/node/lib/Munin/Node/SpoolWriter.pm	2019-05-09 05:45:43.000000000 +0200
@@ -102,6 +102,10 @@
 {
     my ($self, $timestamp, $service, $data) = @_;
 
+    # squash the $service name with the same rules as the munin-update when using plain TCP
+    # Closes D:710529
+    $service =~ s/[^_A-Za-z0-9]/_/g;
+
     my $fmtTimestamp = $self->_snap_to_epoch_boundary($timestamp);
 
     open my $fh , '>>', "$self->{spooldir}/munin-daemon.$service.$fmtTimestamp." . $self->{interval_size}
@@ -110,10 +114,7 @@
 
     print {$fh} "timestamp $timestamp\n";
 
-    # squash the $service name with the same rules as the munin-update when using plain TCP
-    # Closes D:710529
-    my $service_squashed = $service; $service_squashed =~ tr/.:/__/;
-    print {$fh} "multigraph $service_squashed\n" unless $data->[0] =~ m{^multigraph};
+    print {$fh} "multigraph $service\n" unless $data->[0] =~ m{^multigraph};
 
     foreach my $line (@$data) {
         # Ignore blank lines and "."-ones.
diff -Nru munin-2.0.47/node/t/munin_node_spoolreader.t munin-2.0.49/node/t/munin_node_spoolreader.t
--- munin-2.0.47/node/t/munin_node_spoolreader.t	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/node/t/munin_node_spoolreader.t	2019-05-09 05:45:43.000000000 +0200
@@ -38,52 +38,52 @@
     my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
     # write some data
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 1',
     ]);
 
-    $writer->write(1234567900, 'fnord', [
+    $writer->write(1234567900, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 2',
     ]);
 
-    $writer->write(1234567910, 'fnord', [
+    $writer->write(1234567910, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 3',
     ]);
 
     is_string($reader->fetch(1234567899), <<EOS, 'Fetched data since the write');
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567900:2
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567910:3
 EOS
 
     is_string($reader->fetch(1234567900), <<EOS, 'Start timestamp is not inclusive');
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567910:3
 EOS
 
     is_string($reader->fetch(1), <<EOS, 'Timestamp predates all result: all results are returned');
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567890:1
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567900:2
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567910:3
@@ -97,7 +97,7 @@
     my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
     # write some data
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         '',
@@ -106,7 +106,7 @@
     ]);
 
     is_string($reader->fetch(1), <<EOS, 'Blank lines are ignored');
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567890:1
@@ -119,7 +119,7 @@
     my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
     # write results for two different plugins
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 3',
@@ -134,7 +134,7 @@
     ok(my $fetched = $reader->fetch(1234567800), 'Several services to fetch');
 
     my $f1 = <<EOT;
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567890:3
@@ -162,13 +162,13 @@
     my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
     # write two sets of results, with a slightly different config
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 3',
     ]);
 
-    $writer->write(1234567990, 'fnord', [
+    $writer->write(1234567990, 'fnord-foo', [
         'graph_title CPU usage!',  # this line has changed
         'system.label system',
         'system.value 4',
@@ -177,13 +177,13 @@
     ok(my $fetched = $reader->fetch(1234567800), 'Several sets of results to fetch');
 
     my $f1 = <<EOT;
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage
 system.label system
 system.value 1234567890:3
 EOT
     my $f2 = <<EOT;
-multigraph fnord
+multigraph fnord_foo
 graph_title CPU usage!
 system.label system
 system.value 1234567990:4
@@ -203,7 +203,7 @@
     is($reader->list, "\n", 'No spooled plugins to list');
 
     # write "results" for several plugins
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'graph_title CPU usage',
         'system.label system',
         'system.value 1',
@@ -228,7 +228,7 @@
     print $cruft "rubbish\n";
     close $cruft;
 
-    is_deeply([ sort $reader->_get_spooled_plugins ], [ sort qw( fnord floop blort ) ], 'Retrieved list of spooled plugins');
-    is($reader->list, "blort floop fnord\n", 'Retrieved stringified list of spooled plugins');
+    is_deeply([ sort $reader->_get_spooled_plugins ], [ sort qw( fnord_foo floop blort ) ], 'Retrieved list of spooled plugins');
+    is($reader->list, "blort floop fnord_foo\n", 'Retrieved stringified list of spooled plugins');
 }
 
diff -Nru munin-2.0.47/node/t/munin_node_spoolwriter.t munin-2.0.49/node/t/munin_node_spoolwriter.t
--- munin-2.0.47/node/t/munin_node_spoolwriter.t	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/node/t/munin_node_spoolwriter.t	2019-05-09 05:45:43.000000000 +0200
@@ -144,7 +144,7 @@
     my $dir = tempdir( CLEANUP => 1 );
     my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
-    $writer->write(1234567890, 'fnord', [
+    $writer->write(1234567890, 'fnord-foo', [
         'multigraph fnord',
         'graph_title CPU usage',
         'system.label system',
@@ -155,7 +155,7 @@
         'subsystem.value 123',
     ]);
 
-    my $data_file = "$dir/munin-daemon.fnord.1234483200" . "." . Munin::Node::SpoolWriter::DEFAULT_TIME;
+    my $data_file = "$dir/munin-daemon.fnord_foo.1234483200" . "." . Munin::Node::SpoolWriter::DEFAULT_TIME;
     ok( -r $data_file, 'spool file is readable') or last;
 
     my $data = read_file($data_file);
diff -Nru munin-2.0.47/plugins/node.d/nutups_.in munin-2.0.49/plugins/node.d/nutups_.in
--- munin-2.0.47/plugins/node.d/nutups_.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d/nutups_.in	2019-05-09 05:45:43.000000000 +0200
@@ -80,15 +80,19 @@
 frequency() {
 	if [ "$1" = "config" ]; then
 
-		echo "graph_title $UPS input AC frequency"
+		echo "graph_title $UPS AC frequency"
 		echo "graph_args --base 1000 -l 0"
 		echo "graph_vlabel frequency 1/s"
-		echo "acfreq.label AC frequency"
-		echo "acfreq.type GAUGE"
-		echo "acfreq.max 100"
-		echo "acfreq.min 5"
+		echo "inputfreq.label Input AC frequency"
+		echo "inputfreq.type GAUGE"
+		echo "inputfreq.max 100"
+		echo "inputfreq.min 5"
+		echo "outputfreq.label Output AC frequency"
+		echo "outputfreq.type GAUGE"
+		echo "outputfreq.max 100"
+		echo "outputfreq.min 5"
 	else
-		"$UPSC" "$UPS" | sed -n '/^[^:]*freq/{s/.*:/acfreq.value/;p}'
+		"$UPSC" "$UPS" | sed -n '/^[^:]*\(input\|output\)\.frequency:/{s/.*\(input\|output\).*:/\1freq.value/;p}'
 	fi
 }
 
diff -Nru munin-2.0.47/plugins/node.d/postgres_connections_.in munin-2.0.49/plugins/node.d/postgres_connections_.in
--- munin-2.0.47/plugins/node.d/postgres_connections_.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d/postgres_connections_.in	2019-05-09 05:45:43.000000000 +0200
@@ -78,7 +78,7 @@
                  count(*) AS count
                  FROM (SELECT act.state, act.wait_event_type, EXISTS (SELECT FROM pg_locks AS l WHERE l.pid = act.pid) AS locked, act.query
                        FROM pg_stat_activity AS act
-                       WHERE act.pid != pg_backend_pid() AND act.backend_type = 'client backend' /*%%FILTER%%*/)
+                       WHERE act.pid != pg_backend_pid() AND act.backend_type = 'client backend' %%FILTER%%)
                  AS a GROUP BY 1
                  ) AS tmp2
                 ON tmp.mstate=tmp2.mstate
diff -Nru munin-2.0.47/plugins/node.d/snmp__if_.in munin-2.0.49/plugins/node.d/snmp__if_.in
--- munin-2.0.47/plugins/node.d/snmp__if_.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d/snmp__if_.in	2019-05-09 05:45:43.000000000 +0200
@@ -238,14 +238,14 @@
     print "recv.cdef recv,8,*\n";
     print "recv.max $speed\n";
     print "recv.min 0\n";
-    print "recv.warning ", ($warn), "\n" if defined $warn;
+    print "recv.warning ", ($warn), "\n" if defined $warn && ($warn != 0);
     print "send.label bps\n";
     print "send.type DERIVE\n";
     print "send.negative recv\n";
     print "send.cdef send,8,*\n";
     print "send.max $speed\n";
     print "send.min 0\n";
-    print "send.warning $warn\n" if defined $warn;
+    print "send.warning $warn\n" if defined $warn && ($warn != 0);
     exit 0;
 }
 
diff -Nru munin-2.0.47/plugins/node.d.linux/acpi.in munin-2.0.49/plugins/node.d.linux/acpi.in
--- munin-2.0.47/plugins/node.d.linux/acpi.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d.linux/acpi.in	2019-05-09 05:45:43.000000000 +0200
@@ -50,7 +50,7 @@
 
 # directories containing thermal zone information
 if [ -d /sys/class/thermal/ ]; then
-    ATZ=$(find /sys/class/thermal/ -maxdepth 1 -name "thermal_zone*")
+    ATZ=$(find /sys/class/thermal/ -maxdepth 1 -name "thermal_zone*" | sort -V)
 else
     ATZ=
 fi
diff -Nru munin-2.0.47/plugins/node.d.linux/cpuspeed.in munin-2.0.49/plugins/node.d.linux/cpuspeed.in
--- munin-2.0.47/plugins/node.d.linux/cpuspeed.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d.linux/cpuspeed.in	2019-05-09 05:45:43.000000000 +0200
@@ -141,7 +141,7 @@
         print_warning "cpu$N"
         print_critical "cpu$N"
 
-    done
+    done | sort -V
     if [ "${MUNIN_CAP_DIRTYCONFIG:-0}" != 1 ]; then exit 0; fi
 fi
 
diff -Nru munin-2.0.47/plugins/node.d.linux/diskstat_.in munin-2.0.49/plugins/node.d.linux/diskstat_.in
--- munin-2.0.47/plugins/node.d.linux/diskstat_.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d.linux/diskstat_.in	2019-05-09 05:45:43.000000000 +0200
@@ -502,8 +502,8 @@
 
         my @elems = split /\s+/, $line;
 
-        croak "'$stats_file' doesn't contain exactly 11 values. Aborting"
-            if ( @elems != 11 );
+        croak "'$stats_file' contains less than 11 values. Aborting"
+            if ( @elems < 11 );
 
         # Translate the devicename back before storing the information
         $cur_device =~ tr#!#/#;
diff -Nru munin-2.0.47/plugins/node.d.linux/open_files.in munin-2.0.49/plugins/node.d.linux/open_files.in
--- munin-2.0.47/plugins/node.d.linux/open_files.in	2019-02-28 15:43:36.000000000 +0100
+++ munin-2.0.49/plugins/node.d.linux/open_files.in	2019-05-09 05:45:43.000000000 +0200
@@ -53,11 +53,7 @@
 	p_critical=$(print_critical used)
 	[ -z "$p_warning" ] && echo "used.warning $computed_warning" || echo "$p_warning"
 	[ -z "$p_critical" ] && echo "used.critical $computed_critical" || echo "$p_critical"
-	echo 'max.label max open files'
-	echo 'max.info The maximum supported number of open files. Tune by modifying /proc/sys/fs/file-max.'
-	print_warning max
-	print_critical max
 	exit 0
 fi
 
-awk '{print "used.value " $1-$2 "\nmax.value " $3}' < /proc/sys/fs/file-nr
+awk '{print "used.value " $1-$2}' < /proc/sys/fs/file-nr
diff -Nru munin-2.0.47/RELEASE munin-2.0.49/RELEASE
--- munin-2.0.47/RELEASE	2019-02-28 15:45:50.000000000 +0100
+++ munin-2.0.49/RELEASE	2019-05-09 09:26:27.000000000 +0200
@@ -1 +1 @@
-2.0.47
+2.0.49

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
Holger Levsen:
> Package: release.debian.org
> Severity: normal
> User: release.debian....@packages.debian.org
> Usertags: unblock
> 
> Please unblock package munin, it fixes three important bugs (and a bunch
> of normal bugs). munin is a leaf package and 2.0.49 is just another bugfix
> release and has been in sid since 11 days without any new issues reported.
> 
> [...]
> 
> The full debdiff is attached.
> 
> unblock munin/2.0.49-1
> 
> 

Unblocked, thanks.
~Niels

--- End Message ---

Reply via email to