#!/usr/bin/perl
# Done by James Seng (jseng@technet.sg) 4/1/95
# Check aliases file before passing the finger to the real finger

$file_aliases='/etc/aliases';
$file_passwd='/etc/passwd';
$real_finger='/usr/bin/finger';

format STDOUT_TOP =
Aliases         User                        Name                
.

format STDOUT =
@<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<< 
$areal,         $list,                      $name
.

$param='' || $ARGV[0];


sub checkaliases {
   dbmopen(%aliases, $file_aliases, 0644);
   foreach $aliases (keys %aliases) {
	if ($aliases =~ /$param/i) {
	    $areal=$aliases;
	    if ($aliases{$aliases} =~ /:include:/) {
		($t1,$t2,$file_include)=split(/:/,$aliases{$aliases});
		open(INC,$file_include);
		while (<INC>) {
		    if (/^#/) { next; };
		    push (@list,$_);
		}
	    } else {
	        @temp=split(/,/,$aliases{$aliases});
	        foreach $temp (@temp) {
		   $temp=~s/^\s+//g;
		   $temp=~s/\s+$//g;
	           if ($temp ne $param) { push(@list,$temp); }
		}
	    }
	}
    }
    dbmclose(%aliases);
}

sub finger {
   if (($list =~ /[@]/) && ($chain_finger ne 'yes')) { return; }
   open(FIN, "$real_finger $list |");
   while (<FIN>) {
        print;
   }
   close(FIN);
#   system("$real_finger $list");
}


if ($param) { 
    &checkaliases; 
    if (@list != 0) {
	foreach $list (@list) {
	    ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwnam($list);
	    ($name,$office,$ophone,$hphone)=split(/\,/,$gcos);
	    write;
	}

#	foreach $list (@list) {
#	    &finger;
#	    print "\n";
#	}
    } else {
        $list=$param;
        &finger;
    }
} else {
    $list='';
    &finger;
}
