Sindbad~EG File Manager

Current Path : /usr/src/
Upload File :
Current File : //usr/src/check_mailq

#! usrbinperl -w

# check_mailq - check to see how many messages are in the smtp queue awating
#   transmittal.
#
# Initial version support sendmail's mailq command
#  Support for mutiple sendmail queues (Carlos Canau)
#  Support for qmail (Benjamin Schmid)

# License Information
# This program is free software; you can redistribute it andor modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA
#
############################################################################

use POSIX;
use strict;
use GetoptLong;
use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c $opt_t
                                        $opt_M $mailq $status $state $msg $msg_q $msg_p $opt_W $opt_C $mailq @lines
                                        %srcdomains %dstdomains);
use lib  usrlocalnagioslibexec ;
use utils qw(%ERRORS &print_revision &support &usage );


sub print_help ();
sub print_usage ();
sub process_arguments ();

$ENV{'PATH'}='';
$ENV{'BASH_ENV'}='';
$ENV{'ENV'}='';
$PROGNAME = check_mailq;
$mailq = 'sendmail';    # default
$msg_q = 0 ;
$msg_p = 0 ;
$state = $ERRORS{'UNKNOWN'};

GetoptLongConfigure('bundling');
$status = process_arguments();
if ($status){
        print ERROR processing argumentsn;
        exit $ERRORS{UNKNOWN};
}

$SIG{'ALRM'} = sub {
        print (ERROR timed out waiting for $utilsPATH_TO_MAILQ n);
        exit $ERRORS{WARNING};
};
alarm($opt_t);

# switch based on MTA

if ($mailq eq sendmail) {

        ## open mailq
        if ( defined $utilsPATH_TO_MAILQ && -x $utilsPATH_TO_MAILQ ) {
                if (! open (MAILQ, $utilsPATH_TO_MAILQ   ) ) {
                        print ERROR could not open $utilsPATH_TO_MAILQ n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }elsif( defined $utilsPATH_TO_MAILQ){
                unless (-x $utilsPATH_TO_MAILQ) {
                        print ERROR $utilsPATH_TO_MAILQ is not executable by (uid $gid($)))n;
                        exit $ERRORS{'UNKNOWN'};
                }
        } else {
                print ERROR $utilsPATH_TO_MAILQ is not definedn;
                exit $ERRORS{'UNKNOWN'};
        }
#  single queue empty
##varspoolmqueue is empty
#  single queue 1
##                varspoolmqueue (1 request)
##----Q-ID---- --Size-- -----Q-Time----- ------------SenderRecipient------------
##h32E30p01763     2782 Wed Apr  2 1503 silvaATkpnqwest.pt
##      8BITMIME
##                                       silvaATeunet.pt

#  multi queue empty
##varspoolmqueueq0df is empty
##varspoolmqueueq1df is empty
##varspoolmqueueq2df is empty
##varspoolmqueueq3df is empty
##varspoolmqueueq4df is empty
##varspoolmqueueq5df is empty
##varspoolmqueueq6df is empty
##varspoolmqueueq7df is empty
##varspoolmqueueq8df is empty
##varspoolmqueueq9df is empty
##varspoolmqueueqAdf is empty
##varspoolmqueueqBdf is empty
##varspoolmqueueqCdf is empty
##varspoolmqueueqDdf is empty
##varspoolmqueueqEdf is empty
##varspoolmqueueqFdf is empty
##                Total Requests 0
#  multi queue 1
##varspoolmqueueq0df is empty
##varspoolmqueueq1df is empty
##varspoolmqueueq2df is empty
##                varspoolmqueueq3df (1 request)
##----Q-ID---- --Size-- -----Q-Time----- ------------SenderRecipient------------
##h32De2f23534      48 Wed Apr  2 1440 nocol
##                                       nouserATEUnet.pt
##                                       canau
##varspoolmqueueq4df is empty
##varspoolmqueueq5df is empty
##varspoolmqueueq6df is empty
##varspoolmqueueq7df is empty
##varspoolmqueueq8df is empty
##varspoolmqueueq9df is empty
##varspoolmqueueqAdf is empty
##varspoolmqueueqBdf is empty
##varspoolmqueueqCdf is empty
##varspoolmqueueqDdf is empty
##varspoolmqueueqEdf is empty
##varspoolmqueueqFdf is empty
##                Total Requests 1


        while (MAILQ) {

                # match email addr on queue listing
                if ( (.@..(w+.w+))  (.@(w+.w+)) ) {
                        my $domain = $1;
                        if (^w+) {
                        print $utilsPATH_TO_MAILQ = srcdomain = $domain n if $verbose ;
                    $srcdomains{$domain} ++;
                        }
                        next;
                }

                #
                # ...
                # sendmail considers a message with more than one destiny, say N, to the same MX
                # to have N messages in queue.
                # we will only consider one in this code
                if (( s(replysreadserrorsfroms..(w+.w+).$ )  ( s(replysreadserrorsfroms(w+.w+).$ ) 
                        ( s(timeoutswritingsmessagestos..(w+.w+). )  ( s(timeoutswritingsmessagestos(w+.w+). ) 
                        ( s(hostsmapslookups(..(w+.w+)) )  ( s(hostsmapslookups((w+.w+)) ) 
                        ( s(Deferreds.s..(w+.w+).) )  ( s(Deferreds.s(w+.w+).) ) ) {

                        print $utilsPATH_TO_MAILQ = dstdomain = $1 n if $verbose ;
                        $dstdomains{$1} ++;
                }

                if (s+(IOserror)) {
                        print $utilsPATH_TO_MAILQ = dstdomain = UNKNOWN n if $verbose ;
                        $dstdomains{'UNKNOWN'} ++;
                }

                # Finally look at the overall queue length
                #
                if (mqueue) {
                        print $utilsPATH_TO_MAILQ = $_ if $verbose ;
                        if ( ((d+) request) {
                #
                    # single queue first line
                    # multi queue one for each queue. overwrite on multi queue below
                  $msg_q = $1 ;
                        }
                } elsif (^s+TotalsRequestss(d+)$i) {
                        print $utilsPATH_TO_MAILQ = $_ n if $verbose ;
                        #
                        # multi queue last line
                        $msg_q = $1 ;
                }

        }


        ## close mailq

        close (MAILQ);

        if ( $ ) {
                print CRITICAL Error code .($8). returned from $utilsPATH_TO_MAILQ,$;
                exit $ERRORS{CRITICAL};
        }

        ## shut off the alarm
        alarm(0);



        ## now check the queue length(s)

        if ($msg_q == 0) {
                $msg = OK $mailq mailq is empty;
                $state = $ERRORS{'OK'};
        } else {
                print msg_q = $msg_q warn=$opt_w crit=$opt_cn if $verbose;

                # overall queue length
                if ($msg_q  $opt_w) {
                        $msg = OK $mailq mailq ($msg_q) is below threshold ($opt_w$opt_c);
                        $state = $ERRORS{'OK'};
                }elsif ($msg_q = $opt_w  && $msg_q  $opt_c) {
                        $msg = WARNING $mailq mailq is $msg_q (threshold w = $opt_w);
                        $state = $ERRORS{'WARNING'};
                }else {
                        $msg = CRITICAL $mailq mailq is $msg_q (threshold c = $opt_c);
                        $state = $ERRORS{'CRITICAL'};
                }

                # check for domain specific queue lengths if requested
                if (defined $opt_W) {

                        # Apply threshold to queue lengths FROM domain
                        my @srckeys = sort { $srcdomains{$b} = $srcdomains{$a} } keys %srcdomains;
          my $srcmaxkey = $srckeys[0];
        print src max is $srcmaxkey with $srcdomains{$srcmaxkey} messagesn if $verbose;

                        if ($srcdomains{$srcmaxkey} = $opt_W && $srcdomains{$srcmaxkey}  $opt_C) {
                                if ($state == $ERRORS{'OK'}) {
                                        $msg = WARNING $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'WARNING'};
                                } elsif (($state == $ERRORS{'WARNING'})  ($state == $ERRORS{'CRITICAL'})){
                        $msg .=  -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W);
                                } else {
                                        $msg = WARNING $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'WARNING'};
                                }
          } elsif ($srcdomains{$srcmaxkey} = $opt_C) {
                                if ($state == $ERRORS{'OK'}) {
                                        $msg = CRITICAL $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C);
                                        $state = $ERRORS{'CRITICAL'};
                                } elsif ($state == $ERRORS{'WARNING'}) {
                                        $msg = CRITICAL $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C) -and-  . $msg;
                                        $msg =~ sWARNING ;
                                } elsif ($state == $ERRORS{'CRITICAL'}) {
                                        $msg .=  -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W);
                                } else {
                                        $msg = CRITICAL $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'CRITICAL'};
                                }
            } else {
                                if ($srcdomains{$srcmaxkey}  0) {
                                        $msg .=  $srcdomains{$srcmaxkey} msgs. FROM $srcmaxkey is below threshold ($opt_W$opt_C);
                                }
                        }

                        # Apply threshold to queue lengths TO domain
                        my @dstkeys = sort { $dstdomains{$b} = $dstdomains{$a} } keys %dstdomains;
            my $dstmaxkey = $dstkeys[0];
          print dst max is $dstmaxkey with $dstdomains{$dstmaxkey} messagesn if $verbose;

                        if ($dstdomains{$dstmaxkey} = $opt_W && $dstdomains{$dstmaxkey}  $opt_C) {
                                if ($state == $ERRORS{'OK'}) {
                                        $msg = WARNING $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'WARNING'};
                                } elsif (($state == $ERRORS{'WARNING'})  ($state == $ERRORS{'CRITICAL'})){
                                        $msg .=  -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W);
                                } else {
                                        $msg = WARNING $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'WARNING'};
                                }
                        } elsif ($dstdomains{$dstmaxkey} = $opt_C) {
                                if ($state == $ERRORS{'OK'}) {
                                        $msg = CRITICAL $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C);
                                        $state = $ERRORS{'CRITICAL'};
                                } elsif ($state == $ERRORS{'WARNING'}) {
                                        $msg = CRITICAL $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C) -and-  . $msg;
                                        $msg =~ sWARNING ;
                                } elsif ($state == $ERRORS{'CRITICAL'}) {
                                        $msg .=  -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W);
                                } else {
                                        $msg = CRITICAL $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W);
                                        $state = $ERRORS{'CRITICAL'};
                                }
                        } else {
                                if ($dstdomains{$dstmaxkey}  0) {
                                        $msg .=  $dstdomains{$dstmaxkey} msgs. TO $dstmaxkey is below threshold ($opt_W$opt_C);
                                }
                        }

                } # End of queue length thresholds

        }

} # end of ($mailq eq sendmail)
elsif ( $mailq eq postfix ) {

     ## open mailq
        if ( defined $utilsPATH_TO_MAILQ && -x $utilsPATH_TO_MAILQ ) {
                if (! open (MAILQ, $utilsPATH_TO_MAILQ   ) ) {
                        print ERROR could not open $utilsPATH_TO_MAILQ n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }elsif( defined $utilsPATH_TO_MAILQ){
                unless (-x $utilsPATH_TO_MAILQ) {
                        print ERROR $utilsPATH_TO_MAILQ is not executable by (uid $gid($)))n;
                        exit $ERRORS{'UNKNOWN'};
                }
        } else {
                print ERROR $utilsPATH_TO_MAILQ is not definedn;
                exit $ERRORS{'UNKNOWN'};
        }


        @lines = reverse MAILQ;

        # close qmail-qstat
        close MAILQ;

        if ( $ ) {
                print CRITICAL Error code .($8). returned from $utilsPATH_TO_MAILQ,$;
                exit $ERRORS{CRITICAL};
        }

        ## shut off the alarm
        alarm(0);

        # check queue length
        if ($lines[0]=~Kbytes in (d+)) {
                $msg_q = $1 ;
        }elsif ($lines[0]=~Mail queue is empty) {
                $msg_q = 0;
        }else{
                print Couldn't match $utilsPATH_TO_QMAIL_QSTAT outputn;
                exit   $ERRORS{'UNKNOWN'};
        }

        # check messages not processed
        #if ($lines[1]=~^messages in queue but not yet preprocessed (d+)) {
        #        my $msg_p = $1;
        #}else{
        #        print Couldn't match $utilsPATH_TO_QMAIL_QSTAT outputn;
        #        exit  $ERRORS{'UNKNOWN'};
        #}

        # check queue length(s)
        if ($msg_q == 0){
                $msg = OK $mailq mailq reports queue is empty;
                $state = $ERRORS{'OK'};
        } else {
                print msg_q = $msg_q warn=$opt_w crit=$opt_cn if $verbose;

                # overall queue length
                if ($msg_q  $opt_w) {
                        $msg = OK $mailq mailq ($msg_q) is below threshold ($opt_w$opt_c);
                        $state = $ERRORS{'OK'};
                }elsif  ($msg_q = $opt_w  && $msg_q  $opt_c) {
                        $msg = WARNING $mailq mailq is $msg_q (threshold w = $opt_w);
                        $state = $ERRORS{'WARNING'};
                }else {
                        $msg = CRITICAL $mailq mailq is $msg_q (threshold c = $opt_c);
                        $state = $ERRORS{'CRITICAL'};
                }

                # check messages not yet preprocessed (only compare is $opt_W and $opt_C
                # are defined)

                #if (defined $opt_W) {
                #        $msg .= [Preprocessed = $msg_p];
                #        if ($msg_p = $opt_W && $msg_p  $opt_C ) {
                #                $state = $state == $ERRORS{CRITICAL}  $ERRORS{CRITICAL}  $ERRORS{WARNING}  ;
                #        }elsif ($msg_p = $opt_C ) {
                #                $state = $ERRORS{CRITICAL} ;
                #        }
                #}
        }
} # end of ($mailq eq postfix)
elsif ( $mailq eq qmail ) {

        # open qmail-qstat
        if ( defined $utilsPATH_TO_QMAIL_QSTAT && -x $utilsPATH_TO_QMAIL_QSTAT ) {
                if (! open (MAILQ, $utilsPATH_TO_QMAIL_QSTAT   ) ) {
                        print ERROR could not open $utilsPATH_TO_QMAIL_QSTAT n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }elsif( defined $utilsPATH_TO_QMAIL_QSTAT){
                unless (-x $utilsPATH_TO_QMAIL_QSTAT) {
                        print ERROR $utilsPATH_TO_QMAIL_QSTAT is not executable by (uid $gid($)))n;
                        exit $ERRORS{'UNKNOWN'};
                }
        } else {
                print ERROR $utilsPATH_TO_QMAIL_QSTAT is not definedn;
                exit $ERRORS{'UNKNOWN'};
        }

        @lines = MAILQ;

        # close qmail-qstat
        close MAILQ;

        if ( $ ) {
                print CRITICAL Error code .($8). returned from $utilsPATH_TO_MAILQ,$;
                exit $ERRORS{CRITICAL};
        }

        ## shut off the alarm
        alarm(0);

        # check queue length
        if ($lines[0]=~^messages in queue (d+)) {
                $msg_q = $1 ;
        }else{
                print Couldn't match $utilsPATH_TO_QMAIL_QSTAT outputn;
                exit   $ERRORS{'UNKNOWN'};
        }

        # check messages not processed
        if ($lines[1]=~^messages in queue but not yet preprocessed (d+)) {
                my $msg_p = $1;
        }else{
                print Couldn't match $utilsPATH_TO_QMAIL_QSTAT outputn;
                exit  $ERRORS{'UNKNOWN'};
        }


        # check queue length(s)
        if ($msg_q == 0){
                $msg = OK qmail-qstat reports queue is empty;
                $state = $ERRORS{'OK'};
        } else {
                print msg_q = $msg_q warn=$opt_w crit=$opt_cn if $verbose;

                # overall queue length
                if ($msg_q  $opt_w) {
                        $msg = OK $mailq mailq ($msg_q) is below threshold ($opt_w$opt_c);
                        $state = $ERRORS{'OK'};
                }elsif ($msg_q = $opt_w  && $msg_q  $opt_c) {
                        $msg = WARNING $mailq mailq is $msg_q (threshold w = $opt_w);
                        $state = $ERRORS{'WARNING'};
                }else {
                        $msg = CRITICAL $mailq mailq is $msg_q (threshold c = $opt_c);
                        $state = $ERRORS{'CRITICAL'};
                }

                # check messages not yet preprocessed (only compare is $opt_W and $opt_C
                # are defined)

                if (defined $opt_W) {
                        $msg .= [Preprocessed = $msg_p];
                        if ($msg_p = $opt_W && $msg_p  $opt_C ) {
                                $state = $state == $ERRORS{CRITICAL}  $ERRORS{CRITICAL}  $ERRORS{WARNING}  ;
                        }elsif ($msg_p = $opt_C ) {
                                $state = $ERRORS{CRITICAL} ;
                        }
                }
        }



} # end of ($mailq eq qmail)
elsif ( $mailq eq exim ) {
        ## open mailq
        if ( defined $utilsPATH_TO_MAILQ && -x $utilsPATH_TO_MAILQ ) {
                if (! open (MAILQ, $utilsPATH_TO_MAILQ   ) ) {
                        print ERROR could not open $utilsPATH_TO_MAILQ n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }elsif( defined $utilsPATH_TO_MAILQ){
                unless (-x $utilsPATH_TO_MAILQ) {
                        print ERROR $utilsPATH_TO_MAILQ is not executable by (uid $gid($)))n;
                        exit $ERRORS{'UNKNOWN'};
                }
        } else {
                print ERROR $utilsPATH_TO_MAILQ is not definedn;
                exit $ERRORS{'UNKNOWN'};
        }

        while (MAILQ) {
            #22m  1.7K 19aEEr-0007hx-Dy   frozen 
            #root@exlixams.glups.fr

            if (s[wd]{6}-[wd]{6}-[wd]{2}s) { # message id 19aEEr-0007hx-Dy
                $msg_q++ ;
            }
        }
        close(MAILQ) ;

        if ( $ ) {
                print CRITICAL Error code .($8). returned from $utilsPATH_TO_MAILQ,$;
                exit $ERRORS{CRITICAL};
        }
        if ($msg_q  $opt_w) {
                $msg = OK $mailq mailq ($msg_q) is below threshold ($opt_w$opt_c);
                $state = $ERRORS{'OK'};
        }elsif ($msg_q = $opt_w  && $msg_q  $opt_c) {
                $msg = WARNING $mailq mailq is $msg_q (threshold w = $opt_w);
                $state = $ERRORS{'WARNING'};
        }else {
                $msg = CRITICAL $mailq mailq is $msg_q (threshold c = $opt_c);
                $state = $ERRORS{'CRITICAL'};
        }
} # end of ($mailq eq exim)

elsif ( $mailq eq nullmailer ) {
        ## open mailq
        if ( defined $utilsPATH_TO_MAILQ && -x $utilsPATH_TO_MAILQ ) {
                if (! open (MAILQ, $utilsPATH_TO_MAILQ   ) ) {
                        print ERROR could not open $utilsPATH_TO_MAILQ n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }elsif( defined $utilsPATH_TO_MAILQ){
                unless (-x $utilsPATH_TO_MAILQ) {
                        print ERROR $utilsPATH_TO_MAILQ is not executable by (uid $gid($)))n;
                        exit $ERRORS{'UNKNOWN'};
                }
        } else {
                print ERROR $utilsPATH_TO_MAILQ is not definedn;
                exit $ERRORS{'UNKNOWN'};
        }

        while (MAILQ) {
            #2006-06-22 160000  282 bytes

            if (^[1-9][0-9]-[01][0-9]-[0-3][0-9]s[0-2][0-9][0-2][0-9][0-2][0-9]s{2}[0-9]+sbytes$) {
                $msg_q++ ;
            }
        }
        close(MAILQ) ;
        if ($msg_q  $opt_w) {
                $msg = OK $mailq mailq ($msg_q) is below threshold ($opt_w$opt_c);
                $state = $ERRORS{'OK'};
        }elsif ($msg_q = $opt_w  && $msg_q  $opt_c) {
                $msg = WARNING $mailq mailq is $msg_q (threshold w = $opt_w);
                $state = $ERRORS{'WARNING'};
        }else {
                $msg = CRITICAL $mailq mailq is $msg_q (threshold c = $opt_c);
                $state = $ERRORS{'CRITICAL'};
        }
} # end of ($mailq eq nullmailer)

# Perfdata support
print $msgunsent=$msg_q;$opt_w;$opt_c;0n;
exit $state;


#####################################
#### subs


sub process_arguments(){
        GetOptions
                (V   = $opt_V, version    = $opt_V,
                 v   = $opt_v, verbose    = $opt_v,
                 h   = $opt_h, help               = $opt_h,
                 Ms = $opt_M, mailservers = $opt_M, # mailserver (default     sendmail)
                 w=i = $opt_w, warning=i  = $opt_w,   # warning if above this number
                 c=i = $opt_c, critical=i = $opt_c,       # critical if above this number
                 t=i = $opt_t, timeout=i  = $opt_t
                 );

        if ($opt_V) {
                print_revision($PROGNAME,'2.0.2');
                exit $ERRORS{'OK'};
        }

        if ($opt_h) {
                print_help();
                exit $ERRORS{'OK'};
        }

        if (defined $opt_v ){
                $verbose = $opt_v;
        }

        unless (defined $opt_t) {
                $opt_t = $utilsTIMEOUT ;      # default timeout
        }

        unless (  defined $opt_w &&  defined $opt_c ) {
                print_usage();
                exit $ERRORS{'UNKNOWN'};
        }

        if ( $opt_w = $opt_c) {
                print Warning (-w) cannot be greater than Critical (-c)!n;
                exit $ERRORS{'UNKNOWN'};
        }

        if (defined $opt_W && ! defined !$opt_C) {
                print Need -C if using -Wn;
                exit $ERRORS{'UNKNOWN'};
        }elsif(defined $opt_W && defined $opt_C) {
                if ($opt_W = $opt_C) {
                        print Warning (-W) cannot be greater than Critical (-C)!n;
                        exit $ERRORS{'UNKNOWN'};
                }
        }

        if (defined $opt_M) {
                if ($opt_M =~ ^(sendmailqmailpostfixeximnullmailer)$) {
                        $mailq = $opt_M ;
                }elsif( $opt_M eq ''){
                        $mailq = 'sendmail';
                }else{
                        print -M $opt_M is not supportedn;
                        exit $ERRORS{'UNKNOWN'};
                }
            }else{
                    if (defined $utilsPATH_TO_QMAIL_QSTAT
                        && -x $utilsPATH_TO_QMAIL_QSTAT)
                    {
                            $mailq = 'qmail';
                    }
                    elsif (-d 'varlibpostfix'  -d 'varlocallibpostfix'
                         -e 'usrsbinpostfix'  -e 'usrlocalsbinpostfix')
                    {
                            $mailq = 'postfix';
                    }
                    elsif (-d 'usrlibexim4'  -d 'usrlocallibexim4'
                         -e 'usrsbinexim'  -e 'usrlocalsbinexim')
                    {
                            $mailq = 'exim';
                    }
                    elsif (-d 'usrlibnullmailer'  -d 'usrlocallibnullmailer'
                            -e 'nullmailer-send'
                            -e 'nullmailer-send')
                    {
                            $mailq = 'nullmailer';
                    }
                    else {
                            $mailq = 'sendmail';
                    }
            }

        return $ERRORS{'OK'};
}

sub print_usage () {
        print Usage $PROGNAME -w warn -c crit [-W warn] [-C crit] [-M MTA] [-t timeout] [-v verbose]n;
}

sub print_help () {
        print_revision($PROGNAME,'2.0.2');
        print Copyright (c) 2002 Subhendu GhoshCarlos CanauBenjamin Schmidn;
        print n;
        print_usage();
        print n;
        print    Checks the number of messages in the mail queue (supports multiple sendmail queues, qmail)n;
        print    Feedbackpatches to support non-sendmail mailqueue welcomenn;
        print -w (--warning)   = Min. number of messages in queue to generate warningn;
        print -c (--critical)  = Min. number of messages in queue to generate critical alert ( w  c )n;
        print -W (--Warning)   = Min. number of messages for same domain in queue to generate warningn;
        print -C (--Critical)  = Min. number of messages for same domain in queue to generate critical alert ( W  C )n;
        print -t (--timeout)   = Plugin timeout in seconds (default = $utilsTIMEOUT)n;
        print -M (--mailserver) = [ sendmail  qmail  postfix  exim  nullmailer ] (default = autodetect)n;
        print -h (--help)n;
        print -V (--version)n;
        print -v (--verbose)   = debugging outputn;
        print nn;
        print Note -w and -c are required arguments.  -W and -C are optional.n;
        print  -W and -C are applied to domains listed on the queues - both FROM and TO. (sendmail)n;
        print  -W and -C are applied message not yet preproccessed. (qmail)n;
        print  This plugin tries to autodetect which mailserver you are running,n;
        print  you can override the autodetection with -M.n;
        print  This plugin uses the system mailq command (sendmail) or qmail-stat (qmail)n;
        print  to look at the queues. Mailq can usually only be accessed by root or n;
        print  a TrustedUser. You will have to set appropriate permissions for the plugin to work.n;
        print ;
        print nn;
        support();
}


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists