in reply to Fetching groups a user is in

Obviously, I'm a little late to this party, but I stumbled across this while checking to see whether I'd have to (re)invent a wheel to answer a question on the Perl Beginners mailing list. This is the solution I ultimately came up with:

#!/usr/local/bin/perl -l use strict; use warnings; my $user = $ARGV[0]; my @gr_list; my @pw_info; while (@pw_info = getpwent) { if ($pw_info[0] eq $user) { my @gr_info; while (@gr_info = getgrent) { push(@gr_list, $gr_info[2]) if ($gr_info[3] =~ /\b$user\b/); } push(@gr_list, $pw_info[3]); } } print foreach @gr_list;

It's not stunningly terse or clean-looking, at least in my estimation, but it works and doesn't involve calling out to external system utilities.

print substr("Just another Perl hacker", 0, -2);
- apotheon
CopyWrite Chad Perrin

Replies are listed 'Best First'.
Re^2: Fetching groups a user is in
by druud (Sexton) on Dec 22, 2006 at 00:06 UTC
    I saved the code as gpu.pl and ran it for some users:
    $ gpu.pl root 0 2 3 4 5 20 31 0 $ gpu.pl rvtol $ id -Gn rvtol user
    With root, group 0 is reported twice. With rvtol, group user (30) isn't reported.

    -- 
    Regards, Ruud

      Interesting. Any idea why?

      print substr("Just another Perl hacker", 0, -2);
      - apotheon
      CopyWrite Chad Perrin

        It's on a (FreeBSD) shell at my ISP, that runs in a (modified) yp (nis). So "shadow password maps". See ypserv(8).