Handle hostnames with upper-case letters
[webmin.git] / apache / mod_ext_filter.pl
1 # mod_ext_filter.pl
2 # Module for defining filters that are external commands
3
4 sub mod_ext_filter_directives
5 {
6 local $rv;
7 $rv = [ [ 'ExtFilterDefine', 1, 18, 'global', 2.0 ] ];
8 return &make_directives($rv, $_[0], "mod_ext_filter");
9 }
10
11 sub mod_ext_filter_filters
12 {
13 local($d, @rv);
14 print STDERR "looking for ExtFilterDefine\n";
15 foreach $d (&find_all_directives($_[0], "ExtFilterDefine")) {
16         push(@rv, $d->{'words'}->[0]);
17         }
18 return @rv;
19 }
20
21 sub edit_ExtFilterDefine
22 {
23 local ($inrv, $outrv);
24 $outrv = $inrv = "<table border>\n".
25         "<tr $tb> <td><b>$text{'filter_name'}</b></td>\n".
26         "<td><b>$text{'filter_cmd'}</b></td>\n".
27         "<td><b>$text{'filter_intype'}</b></td>\n".
28         "<td><b>$text{'filter_outtype'}</b></td>\n".
29         "<td><b>$text{'filter_preserve'}</b></td> </tr>\n";
30 local ($e, $i = 0);
31 foreach $e (@{$_[0]}, { 'value' => 'mode=output' },
32                       { 'value' => 'mode=input' }) {
33         local (%p, $str = $e->{'value'});
34         while($str =~ /^\s*([^=\s]+)="([^"]*)"(.*)$/ ||
35               $str =~ /^\s*([^=\s]+)=([^=\s]+)(.*)$/ ||
36               $str =~ /^\s*([^=\s]+)()(.*)$/) {
37                 $p{lc($1)} = $2;
38                 $str = $3;
39                 }
40         local $l = "<tr $cb>\n";
41         local $m = $p{'mode'} ? $p{'mode'} : "output";
42         $l .= "<input name=ExtFilterDefine_m_$i type=hidden value='$m'>\n";
43         $l .= "<td><input name=ExtFilterDefine_n_$i size=10 value='$e->{'words'}->[0]'></td>\n";
44         $l .= "<td><input name=ExtFilterDefine_c_$i size=30 value='$p{'cmd'}'></td>\n";
45         $l .= "<td><input name=ExtFilterDefine_i_$i size=12 value='$p{'intype'}'></td>\n";
46         $l .= "<td><input name=ExtFilterDefine_o_$i size=12 value='$p{'outtype'}'></td>\n";
47         $l .= "<td><input type=checkbox name=ExtFilterDefine_p_$i value=1 ".
48                 (defined($p{'preservescontentlength'}) ? "checked" : "").
49                 "> $text{'yes'}</td>\n";
50         $l .= "</tr>\n";
51         if ($p{'mode'} eq 'input') { $inrv .= $l; }
52         else { $outrv .= $l; }
53         $i++;
54         }
55 $inrv .= "</table>\n";
56 $outrv .= "</table>\n";
57 return (3, undef, "<b>$text{'filter_in'}</b><br>".$inrv."<p>\n".
58                   "<b>$text{'filter_out'}</b><br>".$outrv);
59 }
60 sub save_ExtFilterDefine
61 {
62 local (@rv, $i);
63 for($i=0; defined($in{"ExtFilterDefine_n_$i"}); $i++) {
64         next if (!$in{"ExtFilterDefine_n_$i"});
65         $in{"ExtFilterDefine_n_$i"} =~ /^\S+$/ ||
66                 &error(&text('filter_ename', $in{"ExtFilterDefine_n_$i"}));
67         $in{"ExtFilterDefine_c_$i"} ||
68                 &error(&text('filter_ecmd', $in{"ExtFilterDefine_n_$i"}));
69         local $l = $in{"ExtFilterDefine_n_$i"}." mode=".
70                    $in{"ExtFilterDefine_m_$i"}." cmd=\"".
71                    $in{"ExtFilterDefine_c_$i"}."\"";
72         if ($in{"ExtFilterDefine_i_$i"}) {
73                 $l .= " intype=".$in{"ExtFilterDefine_i_$i"};
74                 }
75         if ($in{"ExtFilterDefine_o_$i"}) {
76                 $l .= " outtype=".$in{"ExtFilterDefine_o_$i"};
77                 }
78         if ($in{"ExtFilterDefine_p_$i"}) {
79                 $l .= " PreservesContentLength";
80                 }
81         push(@rv, $l);
82         }
83 return ( \@rv );
84 }
85