—#!/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
Net::NIS::Listgroup;
use
strict;
use
Getopt::Long;
$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
{
STDERR
"Unknown option: $ARGV[0]\n"
;
exit
Usage();
}
}
if
(
$opt_host
&&
$opt_user
) {
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
;
join
(
" "
, @{
$group
}),
"\n"
;
sub
Usage {
STDERR
qq{
Usage:
listgroup
listgroup [--host] groupname1 [ [-]groupname2 [-]groupname3 ... ]
listgroup [--user] groupname1 [ [-]groupname2 [-]groupname3 ... ]
}
;
return
1;
}