val your_pths = ref SS.empty
fun your_paths () = !your_pths
+val your_ipss = ref SS.empty
+fun your_ips () = !your_ipss
+
val world_readable = SS.addList (SS.empty, Config.worldReadable)
-val readable_pths = ref SS.empty
+val readable_pths = ref world_readable
fun readable_paths () = !readable_pths
fun setUser user =
your_grps := Acl.class {user = getUser (),
class = "group"};
your_pths := your_paths;
- readable_pths := SS.union (your_paths, world_readable)
+ readable_pths := SS.union (your_paths, world_readable);
+ your_ipss := Acl.class {user = getUser (),
+ class = "ip"}
end
fun validIp s =
andalso SS.exists (fn s' => path = s' orelse String.isPrefix (s' ^ "/") path) (paths ())
val yourPath = checkPath your_paths
val readablePath = checkPath readable_paths
+fun yourIp s = SS.member (your_ips (), s)
fun yourDomainHost s =
yourDomain s
val _ = Env.type_one "no_newlines"
Env.string
(CharVector.all (fn ch => Char.isPrint ch andalso ch <> #"\n" andalso ch <> #"\r"
- andalso ch <> #"\"" andalso ch <> #"'"))
+ andalso ch <> #"\""))
val _ = Env.type_one "ip"
Env.string
Env.string
readablePath
+val _ = Env.type_one "your_ip"
+ Env.string
+ yourIp
+
val _ = Env.type_one "node"
Env.string
validNode
+val _ = Env.registerFunction ("your_ip_to_ip",
+ fn [e] => SOME e
+ | _ => NONE)
+
val _ = Env.registerFunction ("dns_node_to_node",
fn [e] => SOME e
| _ => NONE)
val _ = Env.registerFunction ("mail_node_to_node",
fn [e] => SOME e
| _ => NONE)
+
+
open Ast
val dl = ErrorMsg.dummyLoc
+val _ = Env.registerFunction ("end_in_slash",
+ fn [(EString "", _)] => SOME (EString "/", dl)
+ | [(EString s, _)] =>
+ SOME (EString (if String.sub (s, size s - 1) = #"/" then
+ s
+ else
+ s ^ "/"), dl)
+ | _ => NONE)
+
+
val nsD = (EString Config.defaultNs, dl)
val serialD = (EVar "serialAuto", dl)
val refD = (EInt Config.defaultRefresh, dl)
loopReal acts
else
loopReal ((site, dom, realPath, Modify' {src = tmp, dst = real}) :: acts)
- else if List.exists (fn prefix => String.isPrefix prefix realPath) prefixes then
+ else if List.exists (fn prefix => String.isPrefix prefix real) prefixes then
loopReal ((site, dom, realPath, Delete' real) :: acts)
else
loopReal acts
val () = Env.registerPost (fn () =>
let
- val prefixes = List.map (fn dom =>
- let
- val pieces = String.tokens (fn ch => ch = #".") dom
- val path = String.concatWith "/" (rev pieces)
- in
- Config.resultRoot ^ "/" ^ path ^ "/"
- end) (!seenDomains)
+ val prefixes = List.concat
+ (List.map (fn dom =>
+ let
+ val pieces = String.tokens (fn ch => ch = #".") dom
+ val path = String.concatWith "/" (rev pieces)
+ in
+ List.map (fn node =>
+ Config.resultRoot ^ "/" ^ node ^ "/" ^ path ^ "/")
+ nodes
+ end) (!seenDomains))
val diffs = findAllDiffs prefixes
case d of
Filename {filename, heading, showEmpty} =>
if fname = filename then
- entries := readFile showEmpty ("\n" :: line :: ":\n" :: heading :: line :: !entries)
+ entries := readFile showEmpty ("\n" :: line :: "\n" :: heading :: line :: !entries)
else
()
| Extension {extension, heading} =>
NONE => ()
| SOME extension' =>
if extension' = extension then
- entries := readFile true ("\n" :: line :: ":\n" :: heading base :: line :: !entries)
+ entries := readFile true ("\n" :: line :: "\n" :: heading base :: line :: !entries)
else
()
end
end
val () = registerDescriber (considerAll [Filename {filename = "soa",
- heading = "DNS SOA",
+ heading = "DNS SOA:",
showEmpty = false}])
+val () = Env.registerAction ("domainHost",
+ fn (env, [(EString host, _)]) =>
+ SM.insert (env, "Hostname",
+ (EString (host ^ "." ^ currentDomain ()), dl))
+ | (_, args) => Env.badArgs ("domainHost", args))
+
end