Handle hostnames with upper-case letters
[webmin.git] / apache / browsermatch.pl
1 #  browsermatch.pl
2 # Functions used in mod_browser.pl and mod_setenvif.pl
3
4 sub edit_BrowserMatch_BrowserMatchNoCase
5 {
6 local($d, @w, $i, @regex, @var, @val, @case, $rv);
7 foreach $d (@{$_[0]}, @{$_[1]}) {
8         @w = @{$d->{'words'}};
9         for($i=1; $i<@w; $i++) {
10                 push(@regex, $w[0]);
11                 if ($w[$i] =~ /^\!(\S+)$/) { push(@var, $1); push(@val, undef); }
12                 elsif ($w[$i] =~ /^(\S+)=(\S*)$/) { push(@var, $1); push(@val, $2); }
13                 else { push(@var, $w[$i]); push(@val, 1); }
14                 if ($d->{'name'} eq "BrowserMatch") { push(@case, 1); }
15                 else { push(@case, 0); }
16                 }
17         }
18 push(@regex, ""); push(@var, ""); push(@val, ""); push(@case, 0);
19 $rv = "<table border>\n".
20       "<tr $tb> <td><b>$text{'browsermatch_regexp'}</b></td> <td><b>$text{'browsermatch_case'}</b></td>\n".
21       "<td><b>$text{'browsermatch_var'}</b></td> <td><b>$text{'browsermatch_value'}</b></td> </tr>\n";
22 for($i=0; $i<@regex; $i++) {
23         $rv .= "<tr $cb>\n";
24         $rv .= sprintf
25                 "<td><input size=20 name=Browser_regex_$i value=\"%s\"></td>\n",
26                 $regex[$i];
27         $rv .= "<td>".&choice_input($case[$i], "Browser_case_$i", 1,
28                "$text{'yes'},1", "$text{'no'},0")."</td>\n";
29         $rv .= sprintf
30                 "<td><input size=20 name=Browser_var_$i value=\"%s\"></td>\n",
31                 $var[$i];
32         $rv .= "<td>".&opt_input($val[$i], "Browser_val_$i",
33                                  "$text{'browsermatch_clear'}", 10)."</td>\n";
34         $rv .= "</tr>\n";
35         }
36 $rv .= "</table>\n";
37 return (2, "$text{'browsermatch_txt'}", $rv);
38 }
39 sub save_BrowserMatch_BrowserMatchNoCase
40 {
41 local($i, $regex, $case, $var, $val, $set, $lastbm, $lastbmnc, @bm, @bmnc);
42 for($i=0; defined($regex = $in{"Browser_regex_$i"}); $i++) {
43         $case = $in{"Browser_case_$i"}; $var = $in{"Browser_var_$i"};
44         if ($regex !~ /\S/ && $var !~ /\S/) { next; }
45         $var =~ /^\S+$/ || &error(&text('browsermatch_evar', $var));
46         $val = $in{"Browser_val_$i"};
47         $set = $in{"Browser_val_${i}_def"} ? "!$var" :
48                 $val eq "1" ? $var : "$var=$val";
49         if ($case) {
50                 if ($regex eq $lastbm) { $bm[$#bm] .= " $set"; }
51                 else { push(@bm, "\"$regex\" $set"); }
52                 $lastbm = $regex;
53                 }
54         else {
55                 if ($regex eq $lastbmnc) { $bmnc[$#bmnc] .= " $set"; }
56                 else { push(@bmnc, "\"$regex\" $set"); }
57                 $lastbmnc = $regex;
58                 }
59         }
60 return ( \@bm, \@bmnc );
61 }
62
63 1;
64