Do not insist on being started as root, but use sudo to call megarc
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-packages
index 29e7e4d..901c885 100755 (executable)
@@ -38,6 +38,7 @@ use warnings;
 use English;
 
 my $IGNORE = "/etc/nagios/obsolete-packages-ignore";
+my $IGNORED = "/etc/nagios/obsolete-packages-ignore.d";
 
 my %CODE = (
        'OK'            => 0,
@@ -132,16 +133,33 @@ sub get_packages {
 }
 
 sub load_ignores {
-       my ($ignorefile, $require_file) = @_;
+       my ($ignorefiles, $require_file) = @_;
 
        my @ignores;
-       if (!$require_file and ! -e $ignorefile) {
-               return \@ignores;
-       }
 
-       open (F, "< $ignorefile") or die ("Cannot open $ignorefile: $!\n");
-       @ignores = <F>;
-       close F;
+       for my $ignoreitem (@$ignorefiles) {
+               next if (!$require_file and ! -e $ignoreitem);
+
+               my @filestoopen;
+               if (-d $ignoreitem) {
+                       opendir(DIR, $ignoreitem) or die ("Cannot open dir $ignoreitem: $!\n");
+                       @filestoopen = readdir(DIR);
+                       closedir(DIR);
+
+                       @filestoopen = grep { -f ($ignoreitem.'/'.$_) } @filestoopen;
+                       @filestoopen = grep { /^([a-z0-9_.-]+)+[a-z0-9]+$/i } @filestoopen;
+                       @filestoopen = grep { !/dpkg-(old|dist|new|tmp)$/ } @filestoopen;
+                       @filestoopen = map { ($ignoreitem.'/'.$_) } @filestoopen;
+               } else {
+                       push @filestoopen, $ignoreitem;
+               }
+
+               for my $f (@filestoopen) {
+                       open (F, "< $f") or die ("Cannot open $f: $!\n");
+                       push @ignores, <F>;
+                       close F;
+               }
+       }
        chomp(@ignores);
        return \@ignores;
 }
@@ -182,21 +200,20 @@ sub filter_ignored {
 
 sub usage {
        my ($fd, $exit) = @_;
-       print $fd "Usage: $PROGRAM_NAME [<ignorefile>]\n";
+       print $fd "Usage: $PROGRAM_NAME [<ignorefile|dir> [<ignorefile|dir> ...]]\n";
        exit $exit;
 }
 
-my $ignorefile = $IGNORE;
+my $ignorefiles = [$IGNORE, $IGNORED];
 my $ignorefile_userset = 0;
-usage(\*STDERR, 1) if (@ARGV > 1);
-if (@ARGV == 1) {
+if (@ARGV >= 1) {
        usage(\*STDOUT, 0) if ($ARGV[0] eq "-h");
        usage(\*STDOUT, 0) if ($ARGV[0] eq "--help");
-       $ignorefile = $ARGV[0];
        $ignorefile_userset = 1;
+       $ignorefiles = \@ARGV;
 };
 
-my $ignores = load_ignores($ignorefile, $ignorefile_userset);
+my $ignores = load_ignores($ignorefiles, $ignorefile_userset);
 my $packages = get_packages();
 
 filter_ignored($packages, $ignores);
@@ -207,7 +224,7 @@ my @reportform = (
        { 'key' => 'obsolete',
          'listpackages' => 1,
          'long' => "%d local or obsolete packages: %s",
-         'short' => "%d obs",
+         'short' => "%d obs/loc",
          'status' => 'WARNING' },
        { 'key' => 'outofdate',
          'listpackages' => 1,
@@ -222,7 +239,7 @@ my @reportform = (
        { 'key' => 'obsolete-ignored',
          'listpackages' => 1,
          'long' => "%d whitelisted local or obsolete packages: %s",
-         'short' => "%d obs(ignored)",
+         'short' => "%d obs/loc(ignored)",
          'status' => 'OK' },
        { 'key' => 'rc',
          'listpackages' => 1,