1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#!/bin/sh
#
# Extract all host entries from a netgroup(s), recursively expanding
# any sub-netgroups... if multiple netgroups are given, everything
# gets mixed together...
#
targets="$*"
expandgrp()
{
for sub
do
eval "for host in \$grphosts$sub; do echo \$host; done"
eval expandgrp \$grpsubs$sub
done
}
[ "$YP" = "" ] && {
echo "$targets"
exit 0
}
$YPCAT -k netgroup |
$AWK '{
grpname=$1;
hosts="";
grps="";
sep="";
for(i=2;i<=NF;i++){
if($i ~ /^\(/){
split($i, entry, ",");
if(entry[1] != ""){
s = substr(entry[1], 2, length(entry[1])-1);
hosts=hosts sep s;
sep=" ";
}
else if(entry[2] = "" && entry[3] == ""){
hosts=hosts sep "*";
sep=" ";
}
}
else {
grps=grps " " $i;
}
}
if(hosts != "" || grps != ""){
printf("%s %s\n%s\n", grpname, grps, hosts);
}
}' |
{
while read netgroup subgroups
do
read hosts
match=0
for target in $targets
do
[ "$netgroup" = "$target" ] && match=1
done
if [ $match -eq 1 ]; then
targhosts="$targhosts $hosts"
targgroups="$targgroups $subgroups"
else
eval grphosts$netgroup=\"$hosts\"
eval grpsubs$netgroup=\"$subgroups\"
fi
done
for host in $targhosts
do
echo $host
done
expandgrp $targgroups
} |
$SORT -u
|