#!/usr/bin/perl # really quick and dirty # Copyright (c) 2006 Peter Palfrader # # 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. # my %ERRORS = ( OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => -1 ); use English; use strict; my %CODE = ( 'UNDEF' => -1, 'OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 3 ); sub usage($$) { my ($fh, $exit) = @_; print $fh "Usage: $PROGRAM_NAME -H -p \n"; exit $exit; } my $host; my $printer; while (@ARGV) { my $a = shift @ARGV; if ($a eq '-h') { usage(*STDOUT,0); }; if ($a eq '-H') { usage(*STDERR,1) unless @ARGV; $host = shift; next; }; if ($a eq '-p') { usage(*STDERR,1) unless @ARGV; $printer = shift; next; }; usage(*STDERR,1); } usage(*STDERR,1) unless $host; usage(*STDERR,1) unless $printer; if ($host =~ /[^A-Za-z0-9-.]/) { die "Evil chars in hostname '$host'\n"; } if ($printer =~ /[^A-Za-z0-9-.]/) { die "Evil chars in printername '$printer'\n"; } my $exit = 'OK'; my @msg; open(LP, "/usr/bin/lpstat -h $host -p $printer |") or die ("Cannot exec/open lpstat: $!\n"); while () { chomp; if (/disabled/) { $exit = 'CRITICAL'; } push @msg, $_; }; close (LP); print "$exit: ".(join "; ", @msg)."\n"; exit $CODE{$exit};