#!/usr//bin/perl use strict; # we are munging with system stuff, be strict $SIG{'INT' } = 'interrupt'; $SIG{'QUIT'} = 'interrupt'; $SIG{'HUP' } = 'interrupt'; $SIG{'TRAP'} = 'interrupt'; $SIG{'ABRT'} = 'interrupt'; $SIG{'STOP'} = 'interrupt'; my ($i, @userinfo, @secgrps); # there must be at least one! if (@ARGV <= 0) { print "no usernames specified\n"; exit 1; } # loops thru all usernames for ($i = 0; $i < @ARGV; $i++) { @userinfo = usersysinfo($ARGV[$i]); if (@userinfo ne '0/n') { printuserinfo(@userinfo); @secgrps = getsecgrp($ARGV[$i]); if (scalar(@secgrps) >= 1) { printsecgrps(@secgrps); } } else { print "User $ARGV[$i] not found\n"; } if (scalar(@ARGV) > 1) { print "\n"; } } # what to do with signals caught during execution sub interrupt { my($sig) = @_; die $sig; die; } # get system level information about the user sub usersysinfo { my ($uname) = shift; my ($name, $pass, $uid, $gid, $quota, $cname, $gcos, $dir, $shell); my ($grpname, $grpw, $ggid, @members); ($name, $pass, $uid, $gid, $quota, $cname, $gcos, $dir, $shell) = getpwnam($uname); ($grpname, $grpw, $ggid, @members) = getgrgid($gid); return ($name, $uid, $gid, $grpname, $dir, $shell); } # gets every secondary group the user is listed in sub getsecgrp { my ($name) = shift; my ($i, @grouplines, @foundgrps, $rpname, $rpw, $rgid); my (@rmembers, $grpname); open(GRP, "; close GRP; undef(@foundgrps); # iterate through /etc/group looking for matches for ($i = 0; $i < @grouplines; $i++) { ($rpname, $rpw, $rgid, @rmembers) = getgrent(); foreach (@rmembers) { if ((/$name/) && ($grpname ne $rpname)) { push (@foundgrps, $rpname); } } } return (@foundgrps); } # print out everything about the user sub printuserinfo { my(@uinfo) = @_; my $k; # yet another intensely lazy scalar $k = 0; # what might make sense here is to pair up the information print "Username: $uinfo[$k] User ID: $uinfo[++$k] Primary Group ID: $uinfo[++$k] Primary Groupname: $uinfo[++$k] Home Directory: $uinfo[++$k] Login Shell: $uinfo[++$k]\n"; } # print out secondary groupnames sub printsecgrps { my(@grps) = @_; my $i; print "Secondary Groups: "; for ($i = 0; $i < @grps; $i++) { print "$grps[$i] "; } print "\n"; }