#!/usr/bin/perl -wT BEGIN { use CGI::Carp qw(fatalsToBrowser carpout); } $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin"; use strict; use warnings; use CGI; $|++; my $q = new CGI; if ( $ENV{PATH_INFO} ) { my ($qid) = ( $ENV{PATH_INFO} =~ m,/(\w{14}), ); open( QF, "<", "/var/spool/mqueue/hf$qid" ) or die "Couldn't open /var/spool/mqueue/hf$qid for reading ($!)\n"; open( DF, "<", "/var/spool/mqueue/df$qid" ) or die "Couldn't open /var/spool/mqueue/df$qid for reading ($!)\n"; print $q->header( -type => 'text/plain' ); $/ = undef; print , ; exit 0; } print $q->header( -type => 'text/html' ); $< = $>; if ( $q->param("op") ) { if ( $q->param("op") eq "delete" ) { my ($qid) = ( $q->param("qid") =~ m/(\w{14})/ ); unlink("/var/spool/mqueue/hf$qid") or die "Couldn't delete /var/spool/mqueue/hf$qid ($!)"; unlink("/var/spool/mqueue/df$qid") or die "Couldn't delete /var/spool/mqueue/df$qid ($!)"; print "Deleted $qid
\n"; } elsif ( $q->param("op") eq "run" ) { my ($qid) = ( $q->param("qid") =~ m/(\w{14})/ ); open( SENDMAIL, "-|", "sendmail -v -qQ -qf -qI$qid" ); print "
\n";
    while () {
      my ($out) = ( $_ =~ m/(.+)/ );
      print $out;
    }
    print "
"; } } opendir( QUEUE, "/var/spool/mqueue" ) or die "Couldn't opendir /var/spool/mqueue ($!)"; my @queue_ids = grep { m/hf(\w{14})$/; $_ = $1 } readdir QUEUE; print "\n"; QID: foreach my $qid (@queue_ids) { open( QF, "<", "/var/spool/mqueue/hf$qid" ) or die "Couldn't open /var/spool/mqueue/hf$qid for reading! ($!)"; my $info; while () { $_ =~ m/^q"(.+)"$/ && do { $info->{quarantine} = $1; next }; $_ =~ m/^T(\d+)$/ && do { $info->{epoch} = $1; next }; $_ =~ m/^S<(.+)\>$/ && do { $info->{sender} = $1; next }; $_ =~ m/^rRFC822; (.+)$/ && do { $info->{recipient} = $1; last }; } $info->{size} = ( stat QF )[7]; $info->{epoch} = scalar localtime( $info->{epoch} ); close QF; open( SENDMAIL, "-|", "sendmail -bv $info->{recipient}" ); while () { next QID unless ($_ =~ m/\Qlocal, user $ENV{REMOTE_USER}\E/); } print "\n"; print "\n"; print "\n"; } print "
Q IDSizeQ TimeSender/Recipient
$qid
\n"; print "
\n"; print " |
\n"; print "
$info->{size}$info->{epoch}$info->{sender}
$info->{quarantine}
$info->{recipient}
\n";