pw2userdb.in
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #! @PERL@
  2. #
  3. #  Convert /etc/passwd and /etc/shadow to userdb format.
  4. #
  5. #  $Id: pw2userdb.in,v 1.4 2000/02/16 01:12:13 mrsam Exp $
  6. #
  7. # Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  8. # distribution information.
  9. use Getopt::Long;
  10. #
  11. #  Some undocumented options here (for vchkpw2userdb)
  12. #
  13. die "Invalid options.n" unless
  14. GetOptions("passwd=s" => $passwd, "shadow=s" => $shadow,
  15. "noshadow" => $noshadow, "nouid" => $nouid,
  16. "domain=s" => $domain, "vpopuid" => $vpopuid );
  17. ($dummy, $dummy, $fixed_uid, $fixed_gid)=getpwnam("vpopmail")
  18. if $vpopuid;
  19. $passwd="/etc/passwd" unless $passwd =~ /./;
  20. $shadow="/etc/shadow" unless $shadow =~ /./;
  21. $domain="" unless $domain =~ /./;
  22. $domain="@$domain" if $domain =~ /./;
  23. open(PASSWD, $passwd) || die "$!n";
  24. while (<PASSWD>)
  25. {
  26. chop if /n$/;
  27. ($acct,$passwd,$uid,$gid,$name,$home,$shell)=split( /:/ );
  28. ($uid,$gid)=($fixed_uid,$fixed_gid) if $vpopuid;
  29. $PASSWORD{$acct}=$passwd if $passwd ne "x";
  30. $UID{$acct}=$uid;
  31. $GID{$acct}=$gid;
  32. $HOME{$acct}=$home;
  33. $SHELL{$acct}=$shell;
  34. $name =~ s/|/./g; # Just in case
  35. $GECOS{$acct}=$name;
  36. }
  37. close (PASSWD);
  38. if ( -f $shadow && ! $noshadow)
  39. {
  40. open (SHADOW, $shadow) || die "$!n";
  41. while (<SHADOW>)
  42. {
  43. ($acct,$passwd,$dummy)=split(/:/);
  44. $PASSWORD{$acct}=$passwd;
  45. }
  46. close (SHADOW);
  47. }
  48. while ( defined ($key=each %UID))
  49. {
  50. print "$key$domaintuid=$UID{$key}|gid=$GID{$key}|home=$HOME{$key}" .
  51. ( $SHELL{$key} =~ /./ ? "|shell=$SHELL{$key}":"") .
  52. ( $PASSWORD{$key} =~ /./ ? "|systempw=$PASSWORD{$key}":"") .
  53. ( $GECOS{$key} =~ /./ ? "|gecos=$GECOS{$key}":"") .
  54. "n";
  55. print "$UID{$key}=t$keyn" unless $nouid;
  56. }