#!/usr/local/bin/perl # This is a rather simple-minded program that, if added to the # alias for a list: # list: "|..resend..","|/usr/misc/majordomo/.bin/ wrapper mj_log2 list" # will save the From: line of the message sender to the Log.list # file in the Majordomo list directory. Not particualrly # effective, but it is useful for tracking some messages and # identifying unused lists. # # The script is based on the mj_log script that comes with majorcool package # (look on the majorcool contrib directory) # # The output will be something like: # # DATE PROCESS LIST FROM-ADDRESS NUMBER-OF-LINES # # For example: # # Jul 06 17:36:18 mj_log2 latinet Ricardo Marek 89 lines # # # The command line options are: # # mj_log2 [-C config_file] [-m] [-l log_file] list # # -C config_file ......... The Majordomo config file. # -m ..................... Add an abbreviated month extension to # the log file. # -l log_file ............ An optional log_file instead of ussing # the $listdir/Log.$list # list ................... The list related to this message # (mandatory) # # The mj_log2 is called in the same fashion than mj_log from majorcool # (from a alias using the wrapper) # # For proper operation, all files must be copied to Majordomo's # home directory and be made executable (mode 550). # #======================================================================== # Before doing anything else tell the world I am majordomo # The mj_ prefix is reserved for tools that are part of majordomo proper. $main'program_name = 'mj_log2'; #' require "getopts.pl"; die("Usage: $0 [-C config_file] [-m] [-l log_file] list") unless &Getopts("C:ml:"); die("No list specified") unless @ARGV; $my_list = shift; # # parse for config file or default list $cf = $ENV{"MAJORDOMO_CF"} || "/etc/majordomo.cf"; $cf = $opt_C if $opt_C; # Read and execute the .cf file die("$cf not readable; stopped") unless -r $cf; die("require of majordomo.cf failed $@") unless require $cf; # Go to the home directory specified by the .cf file chdir("$homedir"); # All these should be in the standard PERL library unshift(@INC, $homedir); require "ctime.pl"; # To get MoY definitions for month abbrevs require "majordomo_version.pl"; # What version of Majordomo is this? require "majordomo.pl"; # all sorts of general-purpose Majordomo subs require "shlock.pl"; # NNTP-style file locking require "config_parse.pl"; # functions to parse the config files # Here's where the fun begins... # check to see if the cf file is valid die("listdir not defined. Is majordomo.cf being included correctly?") if !defined($listdir); # # here comes the magic touch... # if (defined($logdir)) { $log_file = "$logdir/Log.$my_list"; } else { $log_file = "$listdir/Log.$my_list"; } $log_file = $opt_l if $opt_l; # # Now get the message from STDIN # $in_header = 1; while() { if (($in_header) && (/^From:/)) { chop; $from_line = $_; next; } if (/^\s*$/) { $in_header = 0; } $body_lines++ if ($in_header == 0); } # # Now print the logging information # ($message_from) = (split(/\s+/, $from_line, 2))[1]; # # localtime: # ($sec,$min,$hour,$mday,$mon,) = (localtime)[0 .. 4]; $month_abv = $ctime'MoY[$mon]; #' # # Add month extension if needed # $log_file .= ".$month_abv" if ($opt_m); if (&main'lopen(LOG, ">>", $log_file)) { #' # # printf LOG "%s %02d %02d:%02d:%02d %s list=%s from=<%s> size=%d lines\n", # $month_abv, $mday, $hour, $min, $sec, $program_name, $list, # $message_from, $body_lines; printf LOG "%s %02d %02d:%02d:%02d %s %s %s %d lines\n", $month_abv, $mday, $hour, $min, $sec, $program_name, $my_list, $message_from, $body_lines; &main'lclose(LOG); #' } exit(0); ############################################################################## # # END of FILE # # No not change any thing below this line # ############################################################################## # # RCS LOG Information # ------------------- # $Log: mj_log2,v $ # Revision 1.3 1997/07/07 14:30:26 ricky # Fixing typo mistakes # Changing the catch of the From line and header lines # # Revision 1.2 1997/07/07 06:36:49 ricky # Adding the use of $logdir if defined. # I added to majordomo.cf file the definition of a $logdir, # that points to "$homedir/log". (So all logging information # goes to a single directory) # # # Revision 1.1 1997/07/06 14:41:27 ricky # Initial revision # #============================================================================= # Do NOT remove these lines. They set mode in Emacs. # perl-mode is OK for font locking. # #@ Local Variables: *** #@ mode: perl *** #@ End: ***