From 1e2387474a449452b78520b9ad96a8b4b5e99722 Mon Sep 17 00:00:00 2001 From: Harald Pfeiffer Date: Wed, 17 Apr 2019 19:07:19 +0200 Subject: initial commit of source fetch --- .../check_libs/Makefile | 16 ++ .../check_libs/control | 7 + .../check_libs/copyright | 52 ++++++ .../check_libs/nagios-check-libs | 199 +++++++++++++++++++++ .../check_libs/nagios-check-libs.conf | 21 +++ .../check_libs/tests | 2 + .../check_libs/update-check_libs-status | 90 ++++++++++ .../check_libs/update_files.sh | 10 ++ 8 files changed, 397 insertions(+) create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/Makefile create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/control create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/copyright create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs.conf create mode 100644 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/tests create mode 100755 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update-check_libs-status create mode 100755 nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update_files.sh (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_libs') diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/Makefile b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/Makefile new file mode 100644 index 0000000..da38d4b --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/Makefile @@ -0,0 +1,16 @@ +#!/usr/bin/make -f + +INIFILES = check-libs.conf +PLUGIN = check_libs +CLEANFILES = $(INIFILES) $(PLUGIN) +CRONJOBS:= update-check_libs-status + +include ../common.mk + +check_libs: + cp nagios-check-libs $@ + chmod 755 $@ + +check-libs.conf: + cp nagios-check-libs.conf $@ + diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/control b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/control new file mode 100644 index 0000000..96b590e --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/control @@ -0,0 +1,7 @@ +Homepage: https://gitweb.noreply.org/tools/monitoring.git/ +Watch: https://gitweb.noreply.org/tools/monitoring.git/plain/nagios-checks/nagios-check-libs VERSION = '([0-9.]+)'; +Uploaders: Bernd Zeimetz +Description: plugin to report the usage of no longer existing + libraries by running processes +Recommends: lsof, libyaml-syck-perl +Version: 0.2015012901 diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/copyright b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/copyright new file mode 100644 index 0000000..d2777fd --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/copyright @@ -0,0 +1,52 @@ + +check_libs: + +Copyright (C) 2005, 2006, 2007, 2008, 2012 Peter Palfrader + 2012 Uli Martens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +update-check_libs-status: + +Based on update-apt-status +Copyright 2009 Peter Palfrader + +Copyright 2014 conova communications GmbH + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs new file mode 100644 index 0000000..89d7f3a --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs @@ -0,0 +1,199 @@ +#!/usr/bin/perl -w + +# Copyright (C) 2005, 2006, 2007, 2008, 2012, 2015 Peter Palfrader +# 2012 Uli Martens +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +use strict; +use English; +use Getopt::Long; + +$ENV{'PATH'} = '/bin:/sbin:/usr/bin:/usr/sbin'; +delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; + +my $LSOF = '/usr/bin/lsof -F0'; +my $VERSION = '0.2015012901'; + +# nagios exit codes +my $OK = 0; +my $WARNING = 1; +my $CRITICAL = 2; +my $UNKNOWN = 3; + +my $params; +my $config; + +Getopt::Long::config('bundling'); + +sub dief { + print STDERR @_; + exit $UNKNOWN; +} + +if (!GetOptions ( + '--help' => \$params->{'help'}, + '--version' => \$params->{'version'}, + '--quiet' => \$params->{'quiet'}, + '--verbose' => \$params->{'verbose'}, + '--config=s' => \$params->{'config'}, + )) { + dief ("$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose] [--quiet] [--config=]\n"); +}; +if ($params->{'help'}) { + print "$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose] [--quiet] [--config=]\n"; + print "Reports processes that are linked against libraries that no longer exist.\n"; + print "The optional config file can specify ignore rules - see the sample config file.\n"; + exit (0); +}; +if ($params->{'version'}) { + print "nagios-check-libs $VERSION\n"; + print "nagios check for availability of debian (security) updates\n"; + print "Copyright (c) 2005, 2006, 2007, 2008, 2012 Peter Palfrader \n"; + exit (0); +}; + +if (! defined $params->{'config'}) { + $params->{'config'} = '/etc/nagios/check-libs.conf'; +} elsif (! -e $params->{'config'}) { + dief("Config file $params->{'config'} does not exist.\n"); +} + +if (-e $params->{'config'}) { + eval "use YAML::Syck; 1" or dief "you need YAML::Syck (libyaml-syck-perl) to load a config file"; + open(my $fh, '<', $params->{'config'}) or dief "Cannot open config file $params->{'config'}: $!"; + $config = LoadFile($fh); + close($fh); + if (!(ref($config) eq "HASH")) { + dief("Loaded config is not a hash!\n"); + } +} else { + $config = { + 'ignorelist' => [ + '$path =~ m#^/proc/#', + '$path =~ m#^/var/tmp/#', + '$path =~ m#^/SYS#', + '$path =~ m#^/drm$# # xserver stuff', + '$path =~ m#^/dev/zero#', + '$path =~ m#^/dev/shm/#', + ] + }; +} + +if (! exists $config->{'ignorelist'}) { + $config->{'ignorelist'} = []; +} elsif (! (ref($config->{'ignorelist'}) eq 'ARRAY')) { + dief("Config->ignorelist is not an array!\n"); +} + + +my %processes; + +sub getPIDs($$) { + my ($user, $process) = @_; + return join(', ', sort keys %{ $processes{$user}->{$process} }); +}; +sub getProcs($) { + my ($user) = @_; + + return join(', ', map { $_.' ('.getPIDs($user, $_).')' } (sort {$a cmp $b} keys %{ $processes{$user} })); +}; +sub getUsers() { + return join('; ', (map { $_.': '.getProcs($_) } (sort {$a cmp $b} keys %processes))); +}; +sub inVserver() { + my ($f, $key); + if (-e "/proc/self/vinfo" ) { + $f = "/proc/self/vinfo"; + $key = "XID"; + } else { + $f = "/proc/self/status"; + $key = "s_context"; + }; + open(F, "< $f") or return 0; + while () { + my ($k, $v) = split(/: */, $_, 2); + if ($k eq $key) { + close F; + return ($v > 0); + }; + }; + close F; + return 0; +} + +my $INVSERVER = inVserver(); + +print STDERR "Running $LSOF -n\n" if $params->{'verbose'}; +open (LSOF, "$LSOF -n|") or dief ("Cannot run $LSOF -n: $!\n"); +my @lsof=; +close LSOF; +if ($CHILD_ERROR) { # program failed + dief("$LSOF -n returned with non-zero exit code: ".($CHILD_ERROR / 256)."\n"); +}; + +my ($process, $pid, $user); +LINE: for my $line (@lsof) { + if ( $line =~ /^p/ ) { + my %fields = map { m/^(.)(.*)$/ ; $1 => $2 } grep { defined $_ and length $_ >1} split /\0/, $line; + $process = $fields{c}; + $pid = $fields{p}; + $user = $fields{L}; + next; + } + + unless ( $line =~ /^f/ ) { + dief("UNKNOWN strange line read from lsof\n"); + # don't print it because it contains NULL characters... + } + + my %fields = map { m/^(.)(.*)$/ ; $1 => $2 } grep { defined $_ and length $_ >1} split /\0/, $line; + + my $fd = $fields{f}; + my $inode = $fields{i}; + my $path = $fields{n}; + if ($path =~ m/\.dpkg-/ || $path =~ m/\(deleted\)/ || $path =~ /path inode=/ || $path =~ m#/\.nfs# || $fd eq 'DEL') { + $path =~ s/^\(deleted\)//; # in some cases "(deleted)" is at the beginning of the string + for my $i (@{$config->{'ignorelist'}}) { + my $ignore = eval($i); + next LINE if $ignore; + } + next if ($INVSERVER && ($process eq 'init') && ($pid == 1) && ($user eq 'root')); + if ( $params->{'verbose'} ) { + print STDERR "adding $process($pid) because of [$path]:\n"; + print STDERR $line; + } + $processes{$user}->{$process}->{$pid} = 1; + }; +}; + + + +my $message=''; +my $exit = $OK; +if (keys %processes) { + $exit = $WARNING; + $message = 'The following processes have libs linked that were upgraded: '. getUsers()."\n"; +} else { + $message = "No upgraded libs linked in running processes\n" unless $params->{'quiet'}; +}; + +print $message; +exit $exit; diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs.conf b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs.conf new file mode 100644 index 0000000..de4e025 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/nagios-check-libs.conf @@ -0,0 +1,21 @@ +--- + ignorelist: + - '$path =~ m#^/proc/#' + - '$path =~ m#^/var/tmp/#' + - '$path =~ m#^/tmp/#' + - '$path =~ m#^/var/run/#' + - '$path =~ m#^/run/#' + - '$path =~ m#^/dev/pts/#' + - '$path =~ m#^/SYS#' + - '$path =~ m#^/sys/#' + - '$path =~ m#^/drm$# # xserver stuff' + - '$path =~ m#^/dev/zero#' + - '$path =~ m#^/dev/shm/#' + - '$path =~ m#^/var/lib/postgresql/#' + - '$path =~ m#^/var/log/#' + - '$path =~ m#^/var/spool/#' + - '$path =~ m#^/var/lib/ganeti/#' + - '$path =~ m#^/usr/lib/locale/locale-archive#' + - '$path =~ m#^/var/lib/nginx/#' + - '$path =~ m#^/\[aio\]$#' +# vim:syn=yaml diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/tests b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/tests new file mode 100644 index 0000000..ca87e45 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/tests @@ -0,0 +1,2 @@ +Depends: lsof, libyaml-syck-perl +Test-Command: /usr/lib/nagios/plugins/check_libs diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update-check_libs-status b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update-check_libs-status new file mode 100755 index 0000000..78de51b --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update-check_libs-status @@ -0,0 +1,90 @@ +#!/bin/bash + +# Based on update-apt-status +# Copyright 2009 Peter Palfrader +# +# Copyright 2014 conova communications GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +UPDATE_RUNS=3 +STATUSDIR=/var/cache/nagios_status +STATUS=${STATUSDIR}/check_libs +SLEEP_MAX=$(( 15 * 60 )) +MAX_AGE=$(( 23 * 60 * 60 )) + +# we want to run if any of the following things is true +# - we have never run before +# - var/lib/dpkg/status has been touched since the last run +# - var/cache/apt/pkgcache.bin has been touched since the last run +# - our last run ended with 'apt-get update failed' +# - our last run has been more than MAX_AGE (23hrs) ago +run_required() { + local run=0 + local norun=1 + + [ -e "$STATUS" ] || return $run + [ /var/lib/dpkg/status -nt "$STATUS" ] && return $run + [ /var/cache/apt/pkgcache.bin -nt "$STATUS" ] && return $run + grep "apt-get update failed" "$STATUS" > /dev/null && return $run + + local last_mod + last_mod=`stat -c "%Y" "$STATUS"` + now=`date +%s` + age=$(( $now - $last_mod )) + [ "$age" -gt "$MAX_AGE" ] && return $run + + return $norun +} + +if [ ! -d ${STATUSDIR} ]; then + mkdir -p ${STATUSDIR} +fi + +# do stuff only when required, or when asked to +if [ "${1:-""}" != "-f" ] ; then + run_required || exit 0 +fi + +# sleep if called non-interactively +if [ -z "$TERM" -o "$TERM" = "dumb" ]; then + sleep $(( $RANDOM % $SLEEP_MAX )) +fi + +# run the apt check itself +tmp=`tempfile` +trap "rm -f '$tmp'" exit +/usr/lib/nagios/plugins/check_libs > "$tmp" +result="$?" +case "$result" in + 0) + st="OK" + ;; + 1) + st="WARNING" + ;; + 2) + st="CRITICAL" + ;; + *) + st="UNKNOWN" + ;; +esac +(echo "$st"; cat "$tmp") > "$STATUS" diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update_files.sh b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update_files.sh new file mode 100755 index 0000000..6b45c17 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_libs/update_files.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +for i in nagios-check-libs nagios-check-libs.conf; do + tmp=`mktemp` + if wget -O ${tmp} "http://svn.noreply.org/svn/weaselutils/trunk/${i}"; then + mv ${tmp} ${i} + else + rm -f ${tmp} + fi +done -- cgit v1.2.3