val write : string -> unit
(* Read/write saved ACL state from/to a file *)
+ val queryDomain : {user : string, domain : string} -> bool
+ (* Like a call to [query] for class 'domain', but considers subdomains, too *)
end
TextIO.closeOut outf
end
+fun queryDomain {user, domain} =
+ let
+ fun trySuffix parts =
+ case parts of
+ [] => false
+ | first :: rest =>
+ query {user = user, class = "domain", value = String.concatWith "." parts}
+ orelse trySuffix rest
+ in
+ trySuffix (String.fields (fn ch => ch = #".") domain)
+ end
+
end
| MsgRmdom doms =>
doIt (fn () =>
if Acl.query {user = user, class = "priv", value = "all"}
- orelse List.all (fn dom => Acl.query {user = user, class = "domain", value = dom}) doms then
+ orelse List.all (fn dom => Domain.validDomain dom
+ andalso Acl.queryDomain {user = user, domain = dom}) doms then
(Domain.rmdom doms;
(*app (fn dom =>
Acl.revokeFromAll {class = "domain", value = dom}) doms;