Handle hostnames with upper-case letters
[webmin.git] / apache / mod_userdir.pl
1 # mod_userdir.pl
2 # Defines editors user WWW dir directives
3
4 sub mod_userdir_directives
5 {
6 local($rv);
7 $rv = [ [ 'UserDir', 1, 5, 'virtual', 1.3, 6 ],
8         [ 'UserDir', 0, 5, 'virtual', -1.3, 6 ] ];
9 return &make_directives($rv, $_[0], "mod_userdir");
10 }
11
12 sub edit_UserDir
13 {
14 $fmt = "<input type=radio name=UserDir_def value=1 %s> $text{'mod_userdir_default'}&nbsp\n".
15        "<input type=radio name=UserDir_def value=0 %s>\n".
16        "<input name=UserDir size=20 value=\"%s\"><br>\n";
17 if ($_[1]->{'version'} >= 1.3) {
18         local($d, $v, $ud, $rv, @uinfo, $mode, @disabled, @enabled, $_, @ulist);
19         foreach $d (@{$_[0]}) {
20                 $v = $d->{'value'};
21                 if ($v =~ /^(disabled|enabled)\s*(.*)$/) {
22                         if ($1 eq "disabled" && !$2) { $mode = 2; }
23                         elsif ($1 eq "disabled")
24                                 { $mode = 1; push(@disabled, split(/\s+/, $2)); }
25                         else { push(@enabled, split(/\s+/, $2)); }
26                         }
27                 else { $ud = $d->{'words'}->[0]; }
28                 }
29         if ($mode == 1) {
30                 # only selected users disabled
31                 @ulist = @disabled;
32                 }
33         elsif ($mode == 2) {
34                 # only selected users enabled
35                 local %dis;
36                 foreach (@disabled) { $dis{$_}++; }
37                 @ulist = grep { !$dis{$_} } @enabled;
38                 }
39         $rv = sprintf $fmt, $ud ? "" : "checked", $ud ? "checked" : "", $ud;
40         $rv .= sprintf "<input type=radio name=UserDir_mode value=0 %s>\n",
41                         $mode==0 ? "checked" : "";
42         $rv .= "$text{'mod_userdir_all'}<br>\n";
43         $rv .= sprintf "<input type=radio name=UserDir_mode value=1 %s>\n",
44                         $mode==1 ? "checked" : "";
45         $rv .= "$text{'mod_userdir_except'} <input name=UserDir_deny size=20 value=\"".
46                ($mode==1 ? join(" ", @ulist) : "")."\"> ".
47                &user_chooser_button("UserDir_deny",1)."<br>\n";
48         $rv .= sprintf "<input type=radio name=UserDir_mode value=2 %s>\n",
49                         $mode==2 ? "checked" : "";
50         $rv .= "Only users <input name=UserDir_allow size=20 value=\"".
51                ($mode==2 ? join(" ", @ulist) : "")."\"> ".
52                &user_chooser_button("UserDir_allow",1);
53         return (2, "$text{'mod_userdir_dir'}", $rv);
54         }
55 else {
56         return (1, "$text{'mod_userdir_dir'}",
57                 sprintf $fmt, $_[0] ? "" : "checked", $_[0] ? "checked" : "",
58                               $_[0]->{'value'} );
59         }
60 }
61 sub save_UserDir
62 {
63 if ($_[0]->{'version'} >= 1.3) {
64         local(@ud);
65         if ($in{'UserDir_mode'} == 1)
66                 { @ud = ("disabled $in{'UserDir_deny'}"); }
67         elsif ($in{'UserDir_mode'} == 2)
68                 { @ud = ("disabled", "enabled $in{'UserDir_allow'}"); }
69         if (!$in{'UserDir_def'}) {
70                 $in{'UserDir'} !~ /^\// ||
71                   &allowed_doc_dir($in{'UserDir'}) ||
72                     &error($text{'mod_userdir_edir'});
73                 push(@ud, "\"$in{'UserDir'}\"");
74                 }
75         return ( \@ud );
76         }
77 else {
78         if ($in{'UserDir_def'}) { return ( [ ] ); }
79         else { return ( [ $in{'UserDir'} ] ); }
80         }
81 }
82
83 1;
84