--- userdb/pw2userdb.in.orig Wed Jul 19 13:55:15 2000 +++ userdb/pw2userdb.in Tue Mar 1 21:58:51 2005 @@ -7,6 +7,8 @@ # Copyright 1998 - 1999 Double Precision, Inc. See COPYING for # distribution information. +# Adapted to BSD master.passwd + use Getopt::Long; # @@ -22,42 +24,66 @@ if $vpopuid; $passwd="/etc/passwd" unless $passwd =~ /./; -$shadow="/etc/shadow" unless $shadow =~ /./; +$shadow="/etc/master.passwd" unless $shadow =~ /./; $domain="" unless $domain =~ /./; $domain="\@$domain" if $domain =~ /./; -open(PASSWD, $passwd) || die "$!\n"; - -while () +if (! $noshadow && $shadow =~ /master.passwd$/) { - chop if /\n$/; - next if /^#/; - ($acct,$passwd,$uid,$gid,$name,$home,$shell)=split( /:/ ); - - ($uid,$gid)=($fixed_uid,$fixed_gid) if $vpopuid; - - $PASSWORD{$acct}=$passwd if $passwd ne "x"; - $UID{$acct}=$uid; - $GID{$acct}=$gid; - $HOME{$acct}=$home; - $SHELL{$acct}=$shell; - - $name =~ s/\|/./g; # Just in case - $GECOS{$acct}=$name; -} -close (PASSWD); + open(PASSWD, $shadow) || die "$!\n"; -if ( -f $shadow && ! $noshadow) -{ - open (SHADOW, $shadow) || die "$!\n"; - while () + while () { + chop if /\n$/; next if /^#/; - ($acct,$passwd,$dummy)=split(/:/); + ($acct,$passwd,$uid,$gid,$class,$change,$expire,$name,$home,$shell)=split( /:/ ); + + ($uid,$gid)=($fixed_uid,$fixed_gid) if $vpopuid; + $name =~ s/\|/./g; # Just in case + $PASSWORD{$acct}=$passwd; + $UID{$acct}=$uid; + $GID{$acct}=$gid; + $HOME{$acct}=$home; + $SHELL{$acct}=$shell; + $GECOS{$acct}=$name; + } + close (PASSWD); +} else { + open(PASSWD, $passwd) || die "$!\n"; + + while () + { + chop if /\n$/; + next if /^#/; + ($acct,$passwd,$uid,$gid,$name,$home,$shell)=split( /:/ ); + + ($uid,$gid)=($fixed_uid,$fixed_gid) if $vpopuid; + + $PASSWORD{$acct}=$passwd if $passwd ne "x"; + $UID{$acct}=$uid; + $GID{$acct}=$gid; + $HOME{$acct}=$home; + $SHELL{$acct}=$shell; + + $name =~ s/\|/./g; # Just in case + $GECOS{$acct}=$name; + } + close (PASSWD); + + if ( -f $shadow && ! $noshadow) + { + open (SHADOW, $shadow) || die "$!\n"; + while () + { + + next if /^#/; + ($acct,$passwd,$dummy)=split(/:/); + $PASSWORD{$acct}=$passwd; + } + close (SHADOW); } - close (SHADOW); } while ( defined ($key=each %UID))