From 291eacbf162d2823f4667cbb3f9330528c4acf99 Mon Sep 17 00:00:00 2001 From: Clinton Ebadi Date: Fri, 14 Sep 2012 01:33:47 -0400 Subject: [PATCH] Expand valid proxyHosts * Instead of matching `localhost', match from a list of possible hosts --- configDefault/apache.cfg | 3 +++ configDefault/apache.csg | 3 +++ src/plugins/apache.sml | 22 +++++++++++++--------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/configDefault/apache.cfg b/configDefault/apache.cfg index 10c4875..c9e4c86 100644 --- a/configDefault/apache.cfg +++ b/configDefault/apache.cfg @@ -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 = diff --git a/configDefault/apache.csg b/configDefault/apache.csg index 9d47866..5fbbe61 100644 --- a/configDefault/apache.csg +++ b/configDefault/apache.csg @@ -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 diff --git a/src/plugins/apache.sml b/src/plugins/apache.sml index adc579e..3b535c3 100644 --- a/src/plugins/apache.sml +++ b/src/plugins/apache.sml @@ -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) -- 2.20.1