mirror of
https://github.com/webmin/webmin.git
synced 2026-02-06 07:22:20 +00:00
57 lines
1.5 KiB
Perl
Executable File
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");
|
|
|