Handle hostnames with upper-case letters
[webmin.git] / custom / save_file.cgi
1 #!/usr/local/bin/perl
2 # save_file.cgi
3 # Save, create or delete a file editor
4
5 require './custom-lib.pl';
6 &ReadParse();
7
8 $access{'edit'} || &error($text{'file_ecannot'});
9 if ($in{'delete'}) {
10         $edit = &get_command($in{'id'}, $in{'idx'});
11         &delete_command($edit);
12         &webmin_log("delete", "edit", $edit->{'id'}, $edit);
13         &redirect("");
14         }
15 elsif ($in{'clone'}) {
16         &redirect("edit_file.cgi?id=$in{'id'}&idx=$in{'idx'}&clone=1&new=1");
17         }
18 else {
19         &error_setup($text{'file_err'});
20         if (!$in{'new'}) {
21                 $edit = &get_command($in{'id'}, $in{'idx'});
22                 }
23         else {
24                 $edit = { 'id' => time() };
25                 }
26
27         # parse and validate inputs
28         $in{'edit'} =~ /\S/ || &error($text{'file_eedit'});
29         $edit->{'edit'} = $in{'edit'};
30         $in{'desc'} =~ /\S/ || &error($text{'file_edesc'});
31         $edit->{'desc'} = $in{'desc'};
32         $in{'html'} =~ s/\r//g;
33         $in{'html'} =~ s/\n*/\n/;
34         $cmd->{'html'} = $in{'html'};
35         if ($in{'owner_def'}) {
36                 $edit->{'user'} = $edit->{'group'} = undef;
37                 }
38         else {
39                 (@u = getpwnam($in{'user'})) || &error($text{'file_euser'});
40                 (@g = getgrnam($in{'group'})) || &error($text{'file_egroup'});
41                 $edit->{'user'} = $in{'user'};
42                 $edit->{'group'} = $in{'group'};
43                 }
44         if ($in{'perms_def'}) {
45                 $edit->{'perms'} = undef;
46                 }
47         else {
48                 $in{'perms'} =~ /^[0-7]{3}$/ || &error($text{'file_eperms'});
49                 $edit->{'perms'} = $in{'perms'};
50                 }
51         $edit->{'beforeedit'} = $in{'beforeedit'};
52         $edit->{'before'} = $in{'before'};
53         $edit->{'after'} = $in{'after'};
54         $edit->{'order'} = $in{'order_def'} ? 0 : int($in{'order'});
55         $edit->{'usermin'} = $in{'usermin'};
56         $edit->{'envs'} = $in{'envs'};
57         &parse_params_inputs($edit);
58         &save_command($edit);
59         &webmin_log($in{'new'} ? "create" : "modify", "edit",
60                     $cmd->{'id'}, $cmd);
61
62         if ($in{'new'} && $access{'cmds'} ne '*') {
63                 $access{'cmds'} .= " ".$edit->{'id'};
64                 &save_module_acl(\%access);
65                 }
66         &redirect("");
67         }
68