BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
- eval {my @n = getpwuid 0};
+ eval {my @n = getpwuid 0; setpwent()};
if ($@ && $@ =~ /(The \w+ function is unimplemented)/) {
print "1..0 # Skip: $1\n";
exit 0;
}
}
+ if (not defined $where) { # Try NIS+
+ foreach my $niscat (qw(/bin/niscat)) {
+ if (-x $niscat &&
+ open(PW, "$niscat passwd.org_dir 2>/dev/null |") &&
+ defined(<PW>)) {
+ $where = "NIS+ $niscat passwd.org_dir";
+ undef $reason;
+ last;
+ }
+ }
+ }
+
if ($reason) { # Give up.
print "1..0 # Skip: $reason\n";
exit 0;
my %perfect;
my %seen;
+print "# where $where\n";
+
setpwent();
+
while (<PW>) {
chomp;
# LIMIT -1 so that users with empty shells don't fall off
my @s = split /:/, $_, -1;
- my ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s) = @s;
+ my ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s);
+ if ($^O eq 'darwin') {
+ ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s) = @s[0,1,2,3,7,8,9];
+ } else {
+ ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s) = @s;
+ }
next if /^\+/; # ignore NIS includes
if (@s) {
push @{ $seen{$name_s} }, $.;
}
# In principle we could whine if @s != 7 but do we know enough
# of passwd file formats everywhere?
- if (@s == 7) {
+ if (@s == 7 || ($^O eq 'darwin' && @s == 10)) {
@n = getpwuid($uid_s);
# 'nobody' et al.
next unless @n;
}
$n++;
}
+
endpwent();
-if (keys %perfect == 0) {
+print "# max = $max, n = $n, perfect = ", scalar keys %perfect, "\n";
+
+if (keys %perfect == 0 && $n) {
$max++;
print <<EOEX;
#