Better checking of Block arguments
[hcoop/zz_old/domtool.git] / src / apache / apache.sml
index b28179e..adb61c9 100644 (file)
@@ -95,6 +95,16 @@ struct
            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
@@ -408,7 +418,11 @@ struct
                                        "\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"))
@@ -546,6 +560,18 @@ struct
                     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" ^