| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #!/usr/bin/perl
- # ------------------------------------------------------------------------------
- # File Name: check_pop3.pl
- # Author: Richard Mayhew - South Africa
- # Date: 2000/01/21
- # Version: 1.0
- # Description: This script will check to see if an POP3 is running
- # and whether authentication can take place.
- # Email: netsaint@splash.co.za
- # ------------------------------------------------------------------------------
- # Copyright 1999 (c) Richard Mayhew
- # Credits go to Ethan Galstad for coding Nagios
- # If any changes are made to this script, please mail me a copy of the
- # changes :)
- # License GPL
- # ------------------------------------------------------------------------------
- # Date Author Reason
- # ---- ------ ------
- # 1999/09/20 RM Creation
- # 1999/09/20 TP Changed script to use strict, more secure by
- # specifying $ENV variables. The bind command is
- # still insecure through. Did most of my work
- # with perl -wT and 'use strict'
- # 2000/01/20 RM Corrected POP3 Exit State.
- # 2000/01/21 RM Fix Exit Codes Again!!
- # ------------------------------------------------------------------------------
- # -----------------------------------------------------------------[ Require ]--
- require 5.004;
- # --------------------------------------------------------------------[ Uses ]--
- use Socket;
- use strict;
- # --------------------------------------------------------------[ Enviroment ]--
- $ENV{PATH} = "/bin";
- $ENV{BASH_ENV} = "";
- $|=1;
- # ------------------------------------------------------------------[ Global ]--
- my $TIMEOUT = 60;
-
- # -------------------------------------------------------------------[ usage ]--
- sub usage
- {
- print "Minimum arguments not supplied!\n";
- print "\n";
- print "Perl Check POP3 plugin for Nagios\n";
- print "Copyright (c) 2000 Richard Mayhew\n";
- print "\n";
- print "Usage: check_pop3.pl <host> <username> <password> [port]\n";
- print "\n";
- print "<port> = Port that the pop3 daemon is running on <host>. Defaults to 110.\n";
- exit -1;
- }
- # --------------------------------------------------------------[ bindRemote ]--
- sub bindRemote
- {
- my ($in_remotehost, $in_remoteport, $in_hostname) = @_;
- my $proto;
- my $sockaddr;
- my $this;
- my $thisaddr;
- my $that;
- my ($name, $aliases,$type,$len,$thataddr) = gethostbyname($in_remotehost);
- if (!socket(ClientSocket,AF_INET, SOCK_STREAM, $proto)) { die $!; }
- $sockaddr = 'S n a4 x8';
- $this = pack($sockaddr, AF_INET, 0, $thisaddr);
- $that = pack($sockaddr, AF_INET, $in_remoteport, $thataddr);
- if (!bind(ClientSocket, $this)) { print "Connection Refused"; exit 2; }
- if (!connect(ClientSocket, $that)) { print "Connection Refused"; exit 2; }
- select(ClientSocket); $| = 1; select(STDOUT);
- return \*ClientSocket;
- }
- # ====================================================================[ MAIN ]==
- MAIN:
- {
- my $hostname;
- my $remotehost = shift || &usage;
- my $username = shift || &usage;
- my $password = shift || &usage;
- my $remoteport = shift || 110;
- # Just in case of problems, let's not hang Nagios
- $SIG{'ALRM'} = sub {
- print "Something is Taking a Long Time, Increase Your TIMEOUT (Currently Set At $TIMEOUT Seconds)\n";
- exit -1;
- };
-
- alarm($TIMEOUT);
- chop($hostname = `hostname`);
- my ($name, $alias, $proto) = getprotobyname('tcp');
- my $ClientSocket = &bindRemote($remotehost,$remoteport,$hostname);
-
- print ClientSocket "user $username\n";
- #Debug Server
- #print "user $username\n";
- #Sleep or 3 secs, incase server is slow.
- sleep 3;
- print ClientSocket "pass $password\n";
- #Debug Server
- #print "pass $password\n";
- while (<ClientSocket>) {
- print ClientSocket "pass $password\n";
- #Debug Server
- #print $_;
- err($_) if (m/\-ERR\s+(.*)\s+.*/);
- message($_) if (m/\+OK Mailbox open,\s+(.*\d)\s+messages.*/);
- }
- }
- sub message
- {
- my $answer = "UNKNOWN";
- $answer = "Pop3 OK - Total Messages On Server :- $1";
- alarm(0);
- print ClientSocket "quit\n";
- print "$answer";
- exit 0;
- }
- sub err
- {
- my $answer = "UNKNOWN";
- $answer = "Pop3 Error :- $1";
- alarm(0);
- print ClientSocket "quit\n";
- print "$answer";
- exit 2;
- }
|