3 # Create, update or delete a CVS user
5 require './pserver-lib.pl';
6 $access{'passwd'} || &error($text{'passwd_ecannot'});
8 @passwd = &list_passwords();
9 $user = $passwd[$in{'idx'}] if (!$in{'new'});
11 &lock_file($passwd_file);
13 # Just delete the user
14 &delete_password($user);
17 # Validate and store inputs
18 &error_setup($text{'save_err'});
19 $in{'user'} =~ /^[^:\s]+$/ || &error($text{'save_euser'});
20 $user->{'user'} = $in{'user'};
21 if ($in{'pass_def'} == 2) {
22 $user->{'pass'} = undef;
24 elsif ($in{'pass_def'} == 0) {
25 local $salt = chr(int(rand(26))+65) . chr(int(rand(26))+65);
26 $user->{'pass'} = &unix_crypt($in{'pass'}, $salt);
28 elsif ($in{'pass_def'} == 3) {
29 &foreign_require("useradmin", "user-lib.pl");
30 @users = &useradmin::list_users();
31 ($copy) = grep { $_->{'user'} eq $in{'user'} } @users;
32 $copy || &error($text{'save_ecopy'});
33 $copy->{'pass'} =~ /^\$1\$/ && &error($text{'save_emd5'});
34 $user->{'pass'} = $copy->{'pass'};
36 if ($in{'unix_def'}) {
37 $user->{'unix'} = undef;
40 defined(getpwnam($in{'unix'})) || &error($text{'save_eunix'});
41 $user->{'unix'} = $in{'unix'};
44 # Save or create the user
46 &create_password($user);
49 &modify_password($user);
52 &unlock_file($passwd_file);
53 &webmin_log($in{'delete'} ? "delete" : $in{'new'} ? "create" : "modify",
54 "user", $user->{'user'}, $user);
55 &redirect("list_passwd.cgi");