home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
-
- # Usage: finger [fingeroptions] [names]
-
- # Bind %ALIAS to the aliases database.
-
- dbmopen(ALIAS,'/usr/lib/aliases',undef)
- || die "can't dbmopen aliases";
-
- # Strip finger switches.
-
- while ($ARGV[0] =~ /^-/) {
- push(@fingerargs, shift);
- }
-
- # Process user names.
-
- while ($user = shift) {
- push(@finger, &resolve($user));
- }
-
- # Uniquify names.
-
- @finger = grep(!$seen{$_}++, @finger);
-
- # And run finger.
-
- exec 'finger', @fingerargs, @finger if @finger;
-
- die "Couldn't run finger: $!\n";
-
- ##############################################################
-
- sub resolve {
- local($home,$addr,$alias,@list);
-
- while ($addr = shift) {
- if (defined $ALIAS{$addr."\0"}) { # In dbm file.
- chop($alias = $ALIAS{$addr."\0"});
- }
- else {
- $home = (getpwnam($addr))[7];
- if (defined($home) && -r "$home/.forward") {
- open(FORWARD,"$home/.forward");
- chop($alias = <FORWARD>);
- close FORWARD;
- }
- else {
- push(@list, $addr); # Not aliased.
- next;
- }
- }
-
- $alias =~ s/"\|[^"]*",?//g;
- $alias =~ s/^\s*(.*)\s*$/$1/;
- if ($alias eq '') { # Oops, only pipes.
- push(@list, $addr); # So back out alias.
- next;
- }
- $alias =~ s/([^!]*)!(.*)/$2@$1/; # A uucp addr?
-
- # Now call ourselves recursively.
-
- push(@list,&resolve(split(/[\s,]+/,$alias)));
- }
- return @list;
- }
-