aliases.pl: lists direct sendmail aliases for a user/aliasname 
Author Message
 aliases.pl: lists direct sendmail aliases for a user/aliasname

Here's a little utility (in perl, of course ;-) that I whipped up the other
day.  It basically displays direct sendmail aliases for some user/aliasname.
Think of it like `groups somename', but for sendmail aliases.  For example,
if you have the following in your sendmail aliases file, either
/usr/lib/aliases or /etc/aliases, usually:

# just a made-up example, that's all..
root: composer
bugs: composer
postmaster: root

then, you did ...

        from-some-shell$ aliases.pl composer
        composer: root bugs

would be your output.

It does not follow indirect aliases, such as not recognizing that
"postmaster", above, really points to "composer", though indirectly through
"root".

`aliases.pl -help' will give a ~24 line description.  There are also a
number of comments at the top of the code about certain assumptions, etc.

This is just something I hacked up quickly, so feel free to send me any
comments/fixes/whatever...it definitely doesn't cover all possibilities, but
it does also look though :include: files for aliases and can be useful to
see what direct aliases you (or someone else) may be included in.

Enjoy...

                                -jeff

Jeff Kellem

UUCP: ...!harvard!bu-cs!composer

p.s. you may also want to change "#!/usr/local/bin/perl -s" to
"#!/your/path/to/perl -s", of course.  :-)
===CUT HERE===aliases.shar===
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#               "End of shell archive."
# Contents:  aliases.pl

PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f aliases.pl -a "${1}" != "-c" ; then
  echo shar: Will not over-write existing file \"aliases.pl\"
else
echo shar: Extracting \"aliases.pl\" \(4589 characters\)
sed "s/^X//" >aliases.pl <<'END_OF_aliases.pl'
X#!/usr/local/bin/perl -s
X# simple argument parsing, need to finish my getopt first.  :-)
X#
X# Please refer any modifications/fixes/comments back to me.
X#
X# Jeff Kellem

X# UUCP: ...!harvard!bu-cs!composer
X#
X# file: aliases.pl
X#   (or aliases, but tcsh 5.1x [at least] has `aliases' as a builtin, argh!
X#    and, it is the same as alias!!! (well, w/o an arg it is))

X# date: 17 March 1990
X# description: finds sendmail aliases that a user is in immediately.  It
X#              currently does not recurse to see if other aliases will
X#              indirectly point to the user.
X#
X# limitations: * options must come first
X#              * for :include: files, assumes comment delims match, '(' and ')'
X#              * if there are no matches for USER, it just prints "USER:\n"
X#              * does not currently deal with uucp ! syntax or % ...
X#                it's simple...  :-)
X# assumptions: * currently assumes that :include: file has one user per line
X#              * tries to skip comments, as in "(comment)" in :include: file
X#
X# possible future enhancements:
X#            * hash aliases info, to speed up searches for multiple users
X#              during one run.
X#            * speed up match, this was just a quick hack, don't grep each time
X#            * warning of mismatched comment delims, probably for another
X#              day (or program)
X#
X# notes:     * maybe -partial should just match USERNAME as a prefix without



X#            * but, then, do we want `aliases.pl -partial a' to match every
X#              alias that has an entry beginning with 'a'?  Comments?
X#            * or both ways, hmm...
X#
X# usage info: aliases.pl -help
X#
X
Xexit !print <<EOU if $help;
Xusage: $0 [-help] [-debug] [-verbose] [-partial] [-sort] [username ...]
X       Displays immediate sendmail aliases for USERNAME, somewhat in the
X       same vain as `groups'.  Does NOT display indirect aliases.
X       i.e. if mail is sent to the displayed aliases, it will go to
X            USERNAME.
X       Note: this does not find every possible alias that might point to
X             USERNAME, such as alias->different->USERNAME.
X             So, if you have an aliases file such as:
X                 foo: bar
X                 bar: user
X             and you do `$0 user', it will display
X                user: bar
X             NOT
X                 user: bar foo
X
X       Options:
X           -help       display this message
X           -debug      show small amount of debugging info
X           -verbose    show error msgs on opening :include: files

X                       and "user" for `$0 -partial user'
X                       will NOT find "foouserbar" or "userfoo"!
X           -sort       sorts list of aliases before printing
XEOU
X
Xdbmopen(aliases,'/usr/lib/aliases',0444)
X    || dbmopen(aliases,'/etc/aliases',0444)
X    || die "$0: can't dbmopen aliases: $!\n";
X
X($ARGV[0] = getlogin) || (($ARGV[0]) = getpwuid($<)) if $#ARGV == -1;
X
Xwhile ($user = shift) {

X    print "$user:";

X}
X
Xsub list_aliases {


X
X    print "USER=$user.\n" if $debug;
X    while (($key,$value) = each %aliases) {
X       chop($value, $key);




X               || (($value =~ /^\s*:include:(.*)/io) && &in_file($user,$1)));
X#      if ($value =~ /^\s*:include:(.*)/i) {

X#              if &in_file($user,$1);
X#      }
X    }

X}
X
X# "poor man's grep" -lwall, perl man page ... ;-)
X# there are probably better ways of doing this, but it's just a quick hack
X# maybe chg to read in entire file and split/grep on it
Xsub in_file {

X
X    open(file) || $verbose && print STDERR "$0: can't open $file: $!\n";
X    while (<file>) {
X       chop;
X       # remove comments stupidly, will leave mismatched parens
X       while (s/\([^()\n]*\)//go) {}
X       # return TRUE if PAT in FILE
X       return (1) if ((/^\s*$pat\s*$/)

X    }
X    return 0;  # PAT not in file
X}
X
X# stupid sub to print array .. duh ...
X# sorts array before printing if -sort option was given
Xsub print_array {

X    local($elt);
X


X       print " $elt";
X    }
X    print "\n";
X}
END_OF_aliases.pl
if test 4589 -ne `wc -c <aliases.pl`; then
    echo shar: \"aliases.pl\" unpacked with wrong size!
fi
chmod +x aliases.pl
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0



Fri, 04 Sep 1992 08:21:31 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. DB_File 1.71 / Berkly DB Hash and sendmail /etc/aliases.db

2. Sendmail to alias from Perl CGI script?

3. script as sendmail alias

4. email alias for beta code user?

5. List of aliases

6. anyone got perl for aliases --> mail.aliases?

7. Pipes in aliases.....

8. regex to parse /etc/aliases

9. Conversion between mail alias file formats (Pine, Eudora ...)?

10. How to check mail aliases in NIS

11. Some basic help passwd-aliases

12. Perl/csh alias problem

 

 
Powered by phpBB® Forum Software