use strict; use Data::Dumper; use CfgTie::TieShadow; my $userid=shift || die "missing argument"; my $guess=shift || die "missing argument"; my %passwd; my %allgroup; tie %passwd, 'CfgTie::TieShadow'; die "cannot init passwd hash" if not keys %passwd; my $rc=1; if ( $passwd{$userid} ) { my $password=$passwd{$userid}->{password} ; if ( crypt($guess,$password) eq $password ) { $rc=0; my @mygroups; $mygroups[0]=getgrgid($passwd{$userid}->{groupid}); # Get the groups my $regex=qr/\b$userid\b/; while ( my ($group,$passwd,$gid,$members)= getgrent ) { if ( $members =~ $regex ) { push @mygroups, $group; } } print join(',',@mygroups); } else { warn "Authentication Failed"; } } else { warn "User $userid does not exist"; } exit $rc;