List.all checkField fields
end
+ fun validDenyMask s =
+ let
+ val fs = String.fields (fn ch => ch = #".") s
+ in
+ (length fs <= 4 andalso List.all (fn s => case Int.fromString s of
+ SOME n => n >= 0 andalso n < 256
+ | NONE => false) fs)
+ orelse validDomain s
+ end
+
fun handler (data : Domtool.handlerData) =
let
val path = #path data
"\tSatisfy any\n")
else
Domtool.error (path, "HcoopPrivate only allowed for SSL vhosts")
- | ["Block", pat] => blocked := pat :: (!blocked)
+ | ["Block", pat] =>
+ if validDenyMask pat then
+ blocked := pat :: (!blocked)
+ else
+ Domtool.error (path, "Invalid block mask")
| ["Default"] => (TextIO.output (vhosts, "\tServerAlias " ^ parent ^ "\n");
TextIO.output (conf, "HideSite\t" ^ parent ^ "\n" ^
"HideReferrer\t" ^ parent ^ "\n"))
TextIO.output (vhosts, String.concat
["\tReadmeName\t", name, "\n"])
+ | ["NoAutoindex"] =>
+ TextIO.output (vhosts, "\tOptions -Indexes\n")
+
+ | ["LimitRequestBody", n] =>
+ (case Int.fromString n of
+ NONE => Domtool.error (path, "Invalid LimitRequestBody amount")
+ | SOME n' =>
+ if n' < 0 then
+ Domtool.error (path, "Invalid LimitRequestBody amount")
+ else
+ TextIO.output (vhosts, String.concat ["\tLimitRequestBody ", n, "\n"]))
+
| cmd::_ => Domtool.error (path, "unknown option: " ^ cmd))
in
TextIO.output (vhosts, "<VirtualHost *" ^ (if apache2 then ":" ^ Int.toString port else "") ^ ">\n" ^