Expand valid proxyHosts
authorClinton Ebadi <clinton@unknownlamer.org>
Fri, 14 Sep 2012 05:33:47 +0000 (01:33 -0400)
committerClinton Ebadi <clinton@unknownlamer.org>
Fri, 14 Sep 2012 05:33:47 +0000 (01:33 -0400)
* Instead of matching `localhost', match from a list of possible hosts

configDefault/apache.cfg
configDefault/apache.csg
src/plugins/apache.sml

index 10c4875..c9e4c86 100644 (file)
@@ -24,6 +24,9 @@ val webNodes_default = ["mire"]
 val proxyTargets = ["http://hcoop.net/cgi-bin/mailman",
                    "http://hcoop.net/pipermail"]
 
+val proxyHosts = ["localhost", (* deprecated! *)
+                 "mire"]
+
 val public_html = "public_html"
 
 fun logDirOf version1 user =
index 9d47866..5fbbe61 100644 (file)
@@ -17,6 +17,9 @@ signature APACHE_CONFIG = sig
     val webNodes_default : string list
 
     val proxyTargets : string list
+    (* Specifically exempted URIs for proxying *)
+    val proxyHosts : string list
+    (* Hosts users' may run mod_proxied servers *)
 
     val        public_html : string
 
index adc579e..3b535c3 100644 (file)
@@ -68,18 +68,22 @@ val _ = Env.type_one "proxy_target"
                fun default () = List.exists (fn s' => s = s') Config.Apache.proxyTargets
            in
                case String.fields (fn ch => ch = #":") s of
-                   "http" :: "//localhost" :: rest =>
+                   "http" :: host :: rest =>
                    let
                        val rest = String.concatWith ":" rest
                    in
-                       CharVector.all (fn ch => Char.isPrint ch andalso not (Char.isSpace ch)
-                                                andalso ch <> #"\"" andalso ch <> #"'") rest
-                       andalso case String.fields (fn ch => ch = #"/") rest of
-                                   port :: _ =>
-                                   (case Int.fromString port of
-                                        NONE => default ()
-                                      | SOME n => n > 1024 orelse default ())
-                                 | _ => default ()
+                       if List.exists (fn h' => host = h') (map (fn h => String.concat ["//", h]) Config.Apache.proxyHosts)
+                       then
+                           CharVector.all (fn ch => Char.isPrint ch andalso not (Char.isSpace ch)
+                                                    andalso ch <> #"\"" andalso ch <> #"'") rest
+                           andalso case String.fields (fn ch => ch = #"/") rest of
+                                       port :: _ =>
+                                       (case Int.fromString port of
+                                            NONE => default ()
+                                          | SOME n => n > 1024 orelse default ())
+                                     | _ => default ()
+                       else
+                           default ()
                    end
                  | _ => default ()
            end)