Files
webmin/pserver/save_passwd.cgi
2007-04-12 20:24:50 +00:00

57 lines
1.5 KiB
Perl
Executable File

#!/usr/local/bin/perl
# save_passwd.cgi
# Create, update or delete a CVS user
require './pserver-lib.pl';
$access{'passwd'} || &error($text{'passwd_ecannot'});
&ReadParse();
@passwd = &list_passwords();
$user = $passwd[$in{'idx'}] if (!$in{'new'});
&lock_file($passwd_file);
if ($in{'delete'}) {
# Just delete the user
&delete_password($user);
}
else {
# Validate and store inputs
&error_setup($text{'save_err'});
$in{'user'} =~ /^[^:\s]+$/ || &error($text{'save_euser'});
$user->{'user'} = $in{'user'};
if ($in{'pass_def'} == 2) {
$user->{'pass'} = undef;
}
elsif ($in{'pass_def'} == 0) {
local $salt = chr(int(rand(26))+65) . chr(int(rand(26))+65);
$user->{'pass'} = &unix_crypt($in{'pass'}, $salt);
}
elsif ($in{'pass_def'} == 3) {
&foreign_require("useradmin", "user-lib.pl");
@users = &useradmin::list_users();
($copy) = grep { $_->{'user'} eq $in{'user'} } @users;
$copy || &error($text{'save_ecopy'});
$copy->{'pass'} =~ /^\$1\$/ && &error($text{'save_emd5'});
$user->{'pass'} = $copy->{'pass'};
}
if ($in{'unix_def'}) {
$user->{'unix'} = undef;
}
else {
defined(getpwnam($in{'unix'})) || &error($text{'save_eunix'});
$user->{'unix'} = $in{'unix'};
}
# Save or create the user
if ($in{'new'}) {
&create_password($user);
}
else {
&modify_password($user);
}
}
&unlock_file($passwd_file);
&webmin_log($in{'delete'} ? "delete" : $in{'new'} ? "create" : "modify",
"user", $user->{'user'}, $user);
&redirect("list_passwd.cgi");