home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / scripts-convex / ssl < prev    next >
Encoding:
Text File  |  1991-03-10  |  3.9 KB  |  174 lines

  1. #!/usr/local/bin/perl
  2. #
  3. #    original by Tom Christiansen <tchrist@convex.com>
  4. #
  5. #    Paul O'Neill
  6. #    Coastal Imaging Lab
  7. #    Oregon State University
  8. #
  9. #    18 jun 90
  10. #    fix various bugs
  11. #    add sorted output
  12. #
  13. # summarize sendmail syslog
  14. #
  15. # flags mean:
  16. #
  17. #    -o    outbound mail only
  18. #    -i    inbound  mail only
  19. #    -t    suppress printing of totals
  20. #    -e     print strange lines to stderr
  21. #    -m    reduce to local mbox is possible
  22.  
  23. ($program = $0) =~ s%.*/%%;
  24.  
  25.  
  26. while ($ARGV[0] =~ /^-/) {
  27.     $ARGV[0] =~ s/^-//; 
  28.     foreach $flag ( split (//,$ARGV[0]) ) {
  29.     if ( 'oitem' !~ /$flag/ ) {
  30.         printf stderr "unknown flag: %s\n", $flag;
  31.         die "usage: $program [-oitem] [syslog_file ...]\n";
  32.     } 
  33.     die "$0: '$flag' flag already set\n" if ($flags{$flag}++);
  34.     } 
  35.     shift;
  36. }
  37.  
  38. if ( !$flags{'o'} && !$flags{'i'} && !$flags{'t'}) {
  39.     $flags{'o'}++;
  40.     $flags{'i'}++;
  41.  
  42. do hash_passwd() if $flags{'m'};
  43.  
  44. while (<>) {
  45.     if (/: [A-Z][A-Z](\d+): from=(.*), size=(\d+)/) {
  46. #    next unless $flags{'t'} || $flags{'o'};
  47.     ($id, $user, $size) = ($1, $2, $3);
  48. #print "$user\n";
  49.     $user =~ s/.*<(.*)>/$1/;        # get rid of <>
  50. #print "$user\n";
  51.     $user =~ tr/A-Z/a-z/;            # canonical lc
  52. #print "$user\n";
  53.  
  54.     if ($flags{'m'}) {
  55.         $ouser = $user;
  56. #print "    $user\n";
  57.         $user = do strip($user);
  58. #print "     $user\n";
  59.         $user = $ouser if ! $known{$user};
  60. #print "      $user\n";
  61. #print "      $known{$user}\n";
  62.     }
  63.  
  64.     $from_user_size{$user} += $size;
  65.     $id_size{$id} = $size;
  66.     $from_user_count{$user}++;
  67.     $total_from++;
  68.     } elsif (/: [A-Z][A-Z](\d+): to=(.*), delay=/) {
  69. #    next unless $flags{'t'} || $flags{'i'};
  70.     $id = $1;
  71.     for (split(/,/, $2)) {
  72.         s/.*<(.*)>/$1/;
  73. #        $to = $flags{'m'} ? do strip($_) : $_;
  74.         $to = $_;
  75.         if ($flags{'m'}) {
  76.         $oto = $to;
  77. #print "        $to\n";
  78.         $to = do strip($to);
  79. #print "         $to\n";
  80.         $to = $oto if ! $known{$to};
  81. #print "          $to\n";
  82. #print "          $known{$to}\n";
  83.         }
  84.         $to =~ tr/A-Z/a-z/;
  85. #        printf "adding %d bytes to %s from %s\n",
  86.         $id_size{$id},$to,$user; 
  87.         if (!$to) {
  88.         die "to no one: $_\n";
  89.  
  90.         } 
  91.         $to_user_size{$to} += $id_size{$id};
  92.         $to_user_count{$to}++;
  93.         $total_to++;
  94.     } 
  95.     } else {
  96.     study;
  97.     next if /message-id/;
  98.     next if /locked/;
  99.     next if /alias database (auto|)rebuilt/;
  100.     #next if /aliases/;
  101.     next if /rebuilding alias database/;
  102.     print stderr if $flags{'e'};
  103.     $errors++;
  104.     } 
  105.  
  106. printf stderr "Error lines: %d\n", $errors if $errors && ($flags{'e'}) && !($flags{'t'});
  107.  
  108.  
  109. if ($flags{'i'}) {
  110.     printf "To: %d\n", $total_to unless $flags{'t'};;
  111.  
  112.     @loop = keys(to_user_size);
  113.     foreach $user (sort tosort @loop) {
  114.     printf "%4d message%s %7d bytes %s\n",
  115.         $to_user_count{$user}, 
  116.         $to_user_count{$user} != 1 ? "s" : " ",
  117.         $to_user_size{$user}, 
  118.         $user;
  119.     } 
  120. }
  121.  
  122.  
  123. if ($flags{'o'}) {
  124.     printf "From: %d\n", $total_from unless $flags{'t'};;
  125.  
  126.     @loop = keys(from_user_size);
  127.     foreach $user (sort fromsort @loop) {
  128.     printf "%4d message%s %7d bytes %s\n",
  129.         $from_user_count{$user}, 
  130.         $from_user_count{$user} != 1 ? "s" : " ",
  131.         $from_user_size{$user}, 
  132.         $user;
  133.     } 
  134. }
  135.  
  136. sub tosort {
  137.     ($to_user_count{$b} - $to_user_count{$a})* 10000000 + $to_user_size{$b} - $to_user_size{$a};
  138. }
  139.  
  140. sub fromsort {
  141.     ($from_user_count{$b} - $from_user_count{$a}) * 10000000 + $from_user_size{$b} -$from_user_size{$a};
  142. }
  143.  
  144. sub strip {
  145.     local($foo) = shift(@_);
  146. #print "$foo\n";
  147.     
  148.     $foo =~ s/@.*//;
  149.     $foo =~ s/.*!//;
  150.     $foo =~ s/\s*\(.*\)//;
  151.     $foo =~ tr/A-Z/a-z/;
  152.  
  153.     return $foo;
  154.  
  155. sub hash_passwd {
  156.     chop($yp = `/bin/domainname`) if -x '/bin/domainname';
  157.     $passwd = $yp ? 'ypcat passwd |' : '/etc/passwd';
  158.     open passwd || die "$program: can't open $passwd: $!\n";
  159.     while (<passwd>) {
  160.     /^(\w+):[^:]+:(\d+):.*/;
  161.     ($who,$uid) = ($1, $2);
  162. #    $uid = 'zero' if ! $uid;  # kludge for uid 0
  163.     $uid = 'zero' if ($uid == 0) && $who;
  164. #    $uid = 'zero' if defined($uid);
  165.     $known{$who} = $uid;
  166. #print "$who $uid        $known{$who}\n";
  167.     } 
  168.     close passwd;
  169. #print "SPECIEALLLL -- $known{''}\n";
  170.