Handle hostnames with upper-case letters
[webmin.git] / pserver / save_passwd.cgi
1 #!/usr/local/bin/perl
2 # save_passwd.cgi
3 # Create, update or delete a CVS user
4
5 require './pserver-lib.pl';
6 $access{'passwd'} || &error($text{'passwd_ecannot'});
7 &ReadParse();
8 @passwd = &list_passwords();
9 $user = $passwd[$in{'idx'}] if (!$in{'new'});
10
11 &lock_file($passwd_file);
12 if ($in{'delete'}) {
13         # Just delete the user
14         &delete_password($user);
15         }
16 else {
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;
23                 }
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);
27                 }
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'};
35                 }
36         if ($in{'unix_def'}) {
37                 $user->{'unix'} = undef;
38                 }
39         else {
40                 defined(getpwnam($in{'unix'})) || &error($text{'save_eunix'});
41                 $user->{'unix'} = $in{'unix'};
42                 }
43
44         # Save or create the user
45         if ($in{'new'}) {
46                 &create_password($user);
47                 }
48         else {
49                 &modify_password($user);
50                 }
51         }
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");
56