Article 13129 of comp.lang.perl: Xref: feenix.metronet.com comp.lang.perl:13129 Path: feenix.metronet.com!news.utdallas.edu!chpc.utexas.edu!cs.utexas.edu!not-for-mail From: vogelke@c-17igp.wpafb.af.mil (Contr Karl E. Vogel) Newsgroups: comp.lang.perl Subject: [SCRIPT] checkaliases Date: 25 Apr 1994 17:36:28 -0500 Organization: Control Data Systems Inc. Lines: 114 Sender: daemon@cs.utexas.edu Message-ID: <199404252236.SAA14931@c-17igp.wpafb.af.mil> NNTP-Posting-Host: cs.utexas.edu I read Larry's call to send scripts of work in progress, etc. Here is "checkaliases", which does a consistency check of our /usr/lib/aliases file. Comments/suggestions welcome. ---------------------------- cut here #!/usr/bin/perl # # $Id: checkaliases,v 1.1 1992/05/08 20:13:01 vogel Exp $ # # NAME: # checkaliases # # SYNOPSIS: # checkaliases [file] # # DESCRIPTION: # "checkaliases" does consistency checking on a file in the format used # by /usr/lib/aliases. We are looking for any member of a mail group # which is not a user or another mail group. # # The script also finds any "blank" userids in the aliases file, i.e. # two adjacent commas in the middle of a list of userids. # # OPTIONS: # "file" is the name of an aliases file to check. The default file # is "/usr/lib/aliases". # # AUTHOR: # Karl Vogel # # BUGS: # None noticed yet. # # HISTORY: # $Log: checkaliases,v $ # Revision 1.1 1992/05/08 20:13:01 vogel # Initial revision # # if ($#ARGV == -1) { $alias_file = "/usr/lib/aliases"; } elsif ($#ARGV == 0) { $alias_file = $ARGV[0]; } else { die "usage: $0 [file]\n"; } # # Read the aliases file, and create 2 arrays containing the mail # groups and the contents of those groups. Ignore remote users # (@ or %), pipes to programs (|), and direct feeds to files (/). # open (ALIAS, "$alias_file") || die "Can't open $alias_file: $!\n"; $line = 0; while () { chop; $line++; next if /^#/; # Strip comments. next if /^$/; # Strip blank lines. s/\s+//; # Remove whitespace. ($grp, $rest) = split (/:/); $mailgroups{$grp} = $grp; @usr = split (/,/, $rest); foreach (@usr) { next if /@/; next if /%/; next if /\|/; next if /\//; if (length() == 0) { print "ERROR: zero-length alias at line $line.\n"; next; } $mailusers{$_} = $line; } } close (ALIAS); # # Read the passwd file, and create an array holding the users. # open (PASSWD, "/etc/passwd") || die "Can't open passwd file: $!\n"; while () { ($name) = split (/:/); $userid{$name} = $name; } close (PASSWD); # # For each entry in the mailusers array: check through the strings # holding the mail groups and regular userids. # while (($key, $value) = each %mailusers) { if ($userid{$key} !~ $key && $mailgroups{$key} !~ $key) { print "ERROR: unrecognized user \"$key\" at line $value.\n"; } } exit (0); .