The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/local/bin/perl
#
# Listgroup command.
#
# $Id: listgroup,v 1.8 2003-01-21 12:23:53-05 mprewitt Exp $
#
# -----
=head1 NAME
B<listgroup> - Lists hosts/users in a netgroup group.
=head1 SYNOPSIS
listgroup
listgroup [--host] groupname1 [ [-]groupname2 [-]groupname3 ... ]
listgroup [--user] groupname1 [ [-]groupname2 [-]groupname3 ... ]
=head1 DESCRIPTION
Lists groups or members of a netgroup NIS map. B<listgroup> without any parameters
lists all the available netgroup groups.
With groupname parameters, B<listgroup> will recusively list the members of the
named groups. Each member in a group is a triplet of (host,user,domain). The host
portion or user portion of the members is returned depending upon whether B<--host>
or B<--user> is used. If neither B<--host> or B<--user> is used, listgroup will
return the host portion.
If a {groupname} is preceded with a B<->, members of that group will be excluded from
the output.
Groups are processed in the order they appear on the command line.
=head1 OPTIONS
=over 4
=item B<--host>
Restrict output to only contain the host portion of the members in the groupname.
=item B<--user>
Restrict output to only contain the user portion of the members in the groupname.
=back
=head1 REQUIRES
Perl Modules:
Net::NIS::Listgroup
Net::NIS
=head1 SEE ALSO
L<netgroup(4)>, L<Net::NIS::Listgroup(3)>, L<Net::NIS(3)>
=head1 AUTHOR
Original unknown
Major rewrite by Marc Prewitt <mprewitt@chelsea.net>
Copyright (C) 2003 Chelsea Networks, under the GNU GPL.
listgroup comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions; see the COPYING file
for details.
listgroup is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
listgroup is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
=cut
BEGIN {
# for testing the library
unshift @INC, '.';
}
use strict;
use vars qw(%ENV);
$ENV{'PATH'} = "/bin:/usr/bin/:/usr/local/bin:.";
$ENV{'SHELL'} = "/bin/ksh";
$ENV{'IFS'} = undef;
$ENV{'ENV'} = "/usr/local/lib/env";
my $opt_host;
my $opt_user;
my $group;
if (@ARGV) {
while (index($ARGV[0], '-') == 0) {
if ($ARGV[0] =~ /-?-u(ser)?/ ) {
$opt_user = 1;
shift @ARGV;
} elsif ($ARGV[0] =~ /-?-h(ost)?/) {
$opt_host = 1;
shift @ARGV;
} elsif ($ARGV[0] =~ /-?-\?/) {
exit Usage();
} else {
print STDERR "Unknown option: $ARGV[0]\n";
exit Usage();
}
}
if ($opt_host && $opt_user) {
print STDERR "Only one of --user or --host allowed\n";
exit Usage();
} elsif ( $opt_user ) {
$group = Net::NIS::Listgroup::listgroup_user(@ARGV);
} else {
$group = Net::NIS::Listgroup::listgroup_host(@ARGV);
}
} else {
$group = Net::NIS::Listgroup::listgroups();
}
exit unless $group;
print join (" ", @{$group}), "\n";
sub Usage {
print STDERR qq{
Usage:
listgroup
listgroup [--host] groupname1 [ [-]groupname2 [-]groupname3 ... ]
listgroup [--user] groupname1 [ [-]groupname2 [-]groupname3 ... ]
};
return 1;
}