5 @INC = "../lib" if -d "../lib";
6 eval { require Config; import Config; };
12 if (-x "/usr/bin/nidump") { # nidump is not just NeXT/OpenStep
13 if (open(GR, "nidump group . |")) {
14 $where = "NetInfo group";
19 } elsif ((defined $Config{'i_grp'} and $Config{'i_grp'} ne 'define')
20 or not -f $GR or not open(GR, $GR)
29 # Go through at most this many groups.
40 my ($name_s,$passwd_s,$gid_s,$members_s) = @s;
42 push @{ $seen{$name_s} }, $.;
44 warn "# Your $where line $. is empty.\n";
48 # In principle we could whine if @s != 4 but do we know enough
49 # of group file formats everywhere?
51 $members_s =~ s/\s*,\s*/,/g;
52 $members_s =~ s/\s+$//;
53 $members_s =~ s/^\s+//;
54 @n = getgrgid($gid_s);
57 my ($name,$passwd,$gid,$members) = @n;
58 # Protect against one-to-many and many-to-one mappings.
59 if ($name_s ne $name) {
60 @n = getgrnam($name_s);
61 ($name,$passwd,$gid,$members) = @n;
62 next if $name_s ne $name;
64 $members =~ s/\s+/,/g;
66 if $name ne $name_s or
67 # Shadow passwords confuse this.
68 # Not that group passwords are used much but better not assume anything.
69 # $passwd ne $passwd_s or
71 $members ne $members_s;
76 # Drop the multiply defined groups.
78 foreach (sort keys %seen) {
79 my $times = @{ $seen{$_} };
81 # Multiply defined groups are rarely intentional.
83 print "# Group '$_' defined multiple times in $where, lines: @{$seen{$_}}.\n";
88 print "not " if keys %suspect;
89 print "ok ", $tst++, "\n";