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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 -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
signature.asc
Description: PGP signature