From: Clinton Ebadi Date: Thu, 19 Apr 2018 05:23:58 +0000 (-0400) Subject: fwtool: allow multiple nodes per rule X-Git-Tag: release_20180419~3 X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/commitdiff_plain/efbe5b137d7f15040496b8f3c13969597c5972b3 fwtool: allow multiple nodes per rule --- diff --git a/src/plugins/firewall.sml b/src/plugins/firewall.sml index 92b1942..e6f92b2 100644 --- a/src/plugins/firewall.sml +++ b/src/plugins/firewall.sml @@ -43,19 +43,25 @@ fun parseRules () = fun parsePorts ports = List.mapPartial Int.fromString (String.fields (fn ch => ch = #",") ports) (* Just drop bad ports for now *) - + + fun parseNodes nodes = String.fields (fn ch => ch = #",") nodes + fun loop parsedRules = case TextIO.inputLine inf of NONE => parsedRules | SOME line => case String.tokens Char.isSpace line of - node :: uname :: rest => - (case rest of - "Client" :: ports :: hosts => loop ((User uname, FirewallNode node, Client (parsePorts ports, hosts)) :: parsedRules) - | "Server" :: ports :: hosts => loop ((User uname, FirewallNode node, Server (parsePorts ports, hosts)) :: parsedRules) - | ["ProxiedServer", ports] => loop ((User uname, FirewallNode node, ProxiedServer (parsePorts ports)) :: parsedRules) - | ["LocalServer", ports] => loop ((User uname, FirewallNode node, LocalServer (parsePorts ports)) :: parsedRules) - | _ => (print "Invalid config line\n"; loop parsedRules)) + nodes :: uname :: rest => + let + val nodes = parseNodes nodes + in + case rest of + "Client" :: ports :: hosts => loop (map (fn node => (User uname, FirewallNode node, Client (parsePorts ports, hosts))) nodes) @ parsedRules + | "Server" :: ports :: hosts => loop (map (fn node => (User uname, FirewallNode node, Server (parsePorts ports, hosts))) nodes) @ parsedRules + | ["ProxiedServer", ports] => loop (map (fn node => (User uname, FirewallNode node, ProxiedServer (parsePorts ports))) nodes) @ parsedRules + | ["LocalServer", ports] => loop (map (fn node => (User uname, FirewallNode node, LocalServer (parsePorts ports))) nodes) @ parsedRules + | _ => (print "Invalid config line\n"; loop parsedRules) + end | _ => loop parsedRules in loop []