Handle hostnames with upper-case letters
[webmin.git] / usermin / save_restrict.cgi
1 #!/usr/local/bin/perl
2 # save_restrict.cgi
3 # Create, update or delete a user or group module restriction
4
5 require './usermin-lib.pl';
6 $access{'restrict'} || &error($text{'acl_ecannot'});
7 &ReadParse();
8 @usermods = &list_usermin_usermods();
9 $um = $usermods[$in{'idx'}] if (!$in{'new'});
10
11 &lock_file("$config{'usermin_dir'}/usermin.mods");
12 if ($in{'delete'}) {
13         # Just delete this restriction
14         @usermods = grep { $_ ne $um } @usermods;
15         }
16 else {
17         # Validate inputs
18         &error_setup($text{'restrict_err'});
19         if ($in{'umode'} == 0) {
20                 defined(getpwnam($in{'user'})) ||
21                         &error($text{'restrict_euser'});
22                 $um->[0] = $in{'user'};
23                 }
24         elsif ($in{'umode'} == 1) {
25                 defined(getgrnam($in{'group'})) ||
26                         &error($text{'restrict_egroup'});
27                 $um->[0] = "\@".$in{'group'};
28                 }
29         elsif ($in{'umode'} == 3) {
30                 $in{'file'} =~ /^\// && -r $in{'file'} ||
31                         &error($text{'restrict_efile'});
32                 $um->[0] = $in{'file'};
33                 }
34         else {
35                 $um->[0] = "*";
36                 }
37         $um->[1] = $in{'mmode'} == 0 ? "" :
38                    $in{'mmode'} == 1 ? "+" : "-";
39         $um->[2] = [ split(/\0/, $in{'mod'}) ];
40
41         # Save the restriction
42         if ($in{'new'}) {
43                 push(@usermods, $um);
44                 }
45         }
46 &save_usermin_usermods(\@usermods);
47 &unlock_file("$config{'usermin_dir'}/usermin.mods");
48 &webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify",
49             "restrict", $um->[0]);
50 &redirect("list_restrict.cgi");
51