5b6 #!/usr/bin/perl -w use strict; use DB_File; my $pw_file = "@pw_file@"; my $user = "@user@"; my $group = "@group@"; my $del; if (defined $ARGV[0] && $ARGV[0] eq "-d") { $del++; shift @ARGV } if (scalar @ARGV < ($del ? 1 : 2)) { print STDERR "usage: wgpasswd username password wgpasswd -d username\n"; exit 1; } my ($username, $password) = @ARGV; my $new_file = (! -f $pw_file); my $upd_mode; dbmopen(my %hash, $pw_file, 0644) or die "Can't initialize database: $!\n"; if ($del) { $hash{$username} or die "User " . $username . " not in database\n"; delete $hash{$username}; $upd_mode = "deleted"; } else { my $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64]; my $crypted = crypt($password, '$1$' . $salt); my $new_user = 1 if ! $hash{$username}; $hash{$username} = $crypted; $upd_mode = $new_user ? "added" : "updated"; } dbmclose(%hash); if ($new_file) { my ($login, $pass, $uid, $gid, $name, $memb); ($login, $pass, $uid, $gid) = getpwnam($user) or die "$user not in passwd file"; ($name, $pass, $gid, $memb) = getgrnam($group) or die "$group not in group file"; chown($uid, $gid, $pw_file) or die "Can't chown file: $!\n"; chmod(0600, $pw_file) or die "Can't chmod file: $!\n"; } print STDERR "User " . $username . " " . $upd_mode . " successfully\n"; . 0