Handle hostnames with upper-case letters
[webmin.git] / rbac / save_exec.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete one RBAC execution profile
3
4 require './rbac-lib.pl';
5 $access{'execs'} || &error($text{'execs_ecannot'});
6 &ReadParse();
7 &error_setup($text{'exec_err'});
8
9 &lock_rbac_files();
10 $execs = &list_exec_attrs();
11 if (!$in{'new'}) {
12         $exec = $execs->[$in{'idx'}];
13         $logname = $exec->{'name'};
14         }
15 else {
16         $exec = { 'attr' => { } };
17         $logname = $in{'name'};
18         }
19
20 if ($in{'delete'}) {
21         # Just delete this execution profile
22         &delete_exec_attr($exec);
23         }
24 else {
25         # Validate and store inputs
26         $exec->{'name'} = $in{'name'};
27         $exec->{'policy'} = $in{'policy'};
28         if ($in{'id_def'}) {
29                 $exec->{'id'} = '*';
30                 }
31         else {
32                 $in{'id'} =~ /^\/\S+/ || &error($text{'exec_eid'});
33                 $exec->{'id'} = $in{'id'};
34                 }
35         $exec->{'cmd'} ||= 'cmd';
36         foreach $i ("uid", "gid", "euid", "egid") {
37                 if ($in{$i."_def"}) {
38                         delete($exec->{'attr'}->{$i});
39                         }
40                 else {
41                         $in{$i} =~ /\S/ || &error($text{'exec_err'.$i});
42                         $exec->{'attr'}->{$i} = $in{$i};
43                         }
44                 }
45
46         # Save or update execution profile
47         if ($in{'new'}) {
48                 &create_exec_attr($exec);
49                 }
50         else {
51                 &modify_exec_attr($exec);
52                 }
53         }
54
55 &unlock_rbac_files();
56 &webmin_log($in{'delete'} ? "delete" : $in{'new'} ? "create" : "modify",
57             "exec", $logname, $exec);
58 &redirect("list_execs.cgi");
59