Handle hostnames with upper-case letters
[webmin.git] / mailcap / save.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete a mailcap entry
3
4 require './mailcap-lib.pl';
5 &ReadParse();
6 &error_setup($text{'save_err'});
7 @mailcap = &list_mailcap();
8
9 if (!$in{'new'}) {
10         ($mailcap) = grep { $_->{'index'} == $in{'index'} } @mailcap;
11         $mailcap || &error($text{'edit_egone'});
12         }
13 else {
14         $mailcap = { 'args' => { } };
15         }
16
17 &lock_file($mailcap_file);
18 if ($in{'delete'}) {
19         # Just trash one
20         &delete_mailcap($mailcap);
21         }
22 else {
23         # Validate inputs
24         $in{'type'} =~ /([a-z0-9\-]+)\/([a-z0-9\-\*]+)/ ||
25                 &error($text{'save_etype'});
26         #if (($in{'new'} || $in{'old'} ne $in{'type'}) && $in{'enabled'}) {
27         #    ($clash) = grep { $_->{'type'} eq $in{'type'} &&
28         #                     $_->{'enabled'} == 1 } @mailcap;
29         #    $clash && &error($text{'save_eclash'});
30         #    }
31         $mailcap->{'type'} = $in{'type'};
32         $mailcap->{'enabled'} = $in{'enabled'};
33         $in{'program'} ||
34                 &error($text{'save_eprogram'});
35         $mailcap->{'program'} = $in{'program'};
36         $in{'cmt'} =~ s/\r//g;
37         $in{'cmt'} =~ s/\s*$//g;
38         $mailcap->{'cmt'} = $in{'cmt'};
39
40         # Save extra args
41         $args = $mailcap->{'args'};
42         if ($in{'test_def'}) {
43                 delete($args->{'test'});
44                 }
45         else {
46                 $in{'test'} =~ /\S/ && $in{'test'} !~ /;/ ||
47                         &error($text{'save_etest'});
48                 $args->{'test'} = $in{'test'};
49                 }
50         if ($in{'term'}) {
51                 $args->{'needsterminal'} = '';
52                 }
53         else {
54                 delete($args->{'needsterminal'});
55                 }
56         if ($in{'copious'}) {
57                 $args->{'copiousoutput'} = '';
58                 }
59         else {
60                 delete($args->{'copiousoutput'});
61                 }
62         if ($in{'desc_def'}) {
63                 delete($args->{'description'});
64                 }
65         else {
66                 $in{'desc'} !~ /;/ || &error($text{'save_edesc'});
67                 $args->{'description'} = $in{'desc'};
68                 }
69         
70         # Update in file
71         if ($in{'new'}) {
72               &create_mailcap($mailcap);
73               }
74         else {
75               &modify_mailcap($mailcap);
76               }
77         }
78 &unlock_file($mailcap_file);
79 &webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify",
80             "mailcap", $in{'old'} || $in{'type'});
81 &redirect("");
82