From a6b60abf89587acd4fd3fed327f68848f1923c25 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 29 Apr 2007 20:15:05 +0000 Subject: [PATCH] Domain alias support for e-mail aliases --- src/mail/.cvsignore | 1 + src/plugins/alias.sml | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 src/mail/.cvsignore diff --git a/src/mail/.cvsignore b/src/mail/.cvsignore new file mode 100644 index 0000000..6dc8e1a --- /dev/null +++ b/src/mail/.cvsignore @@ -0,0 +1 @@ +.cm diff --git a/src/plugins/alias.sml b/src/plugins/alias.sml index 43e109f..8ed2da6 100644 --- a/src/plugins/alias.sml +++ b/src/plugins/alias.sml @@ -24,30 +24,32 @@ open Ast structure SM = DataStructures.StringMap -val aliases : TextIO.outstream SM.map ref = ref SM.empty +val aliases : Domain.files SM.map ref = ref SM.empty fun aliasesF node = valOf (SM.find (!aliases, node)) -val aliasesD : TextIO.outstream SM.map ref = ref SM.empty +val aliasesD : Domain.files SM.map ref = ref SM.empty fun aliasesDF node = valOf (SM.find (!aliasesD, node)) fun write nodes = let val files = map (fn node => aliasesF node) nodes in - fn s => app (fn file => TextIO.output (file, s)) files + (fn s => app (fn file => #write file s) files, + fn () => app (fn file => #writeDom file ()) files) end fun writeD nodes = let val files = map (fn node => aliasesDF node) nodes in - fn s => app (fn file => TextIO.output (file, s)) files + (fn s => app (fn file => #write file s) files, + fn () => app (fn file => #writeDom file ()) files) end fun openInAll base = foldl (fn (node, r) => SM.insert (r, node, - Domain.domainFile {node = node, name = base})) + Domain.domainsFile {node = node, name = base})) SM.empty Domain.nodes val _ = Domain.registerBefore @@ -55,8 +57,8 @@ val _ = Domain.registerBefore aliasesD := openInAll "aliases.default")) val _ = Domain.registerAfter - (fn _ => (SM.app TextIO.closeOut (!aliases); - SM.app TextIO.closeOut (!aliasesD))) + (fn _ => (SM.app (fn file => #close file ()) (!aliases); + SM.app (fn file => #close file ()) (!aliasesD))) fun validEmailUser s = size s > 0 andalso size s < 50 @@ -117,8 +119,8 @@ fun writeSource (env, s, t) = let val nodes = Env.env (Env.list Env.string) (env, "MailNodes") - val write = write nodes - val writeD = writeD nodes + val (write, writeDom) = write nodes + val (writeD, writeDomD) = writeD nodes fun writeTarget (writer, t) = case t of @@ -130,17 +132,17 @@ fun writeSource (env, s, t) = case s of User s => (write s; write "@"; - write (Domain.currentDomain ()); + writeDom (); write ": "; writeTarget (write, t); write "\n") | Default => (write "*@"; - write (Domain.currentDomain ()); + writeDom (); write ": "; writeTarget (write, t); write "\n") | CatchAll => (writeD "*@"; - writeD (Domain.currentDomain ()); + writeDomD (); writeD ": "; writeTarget (writeD, t); writeD "\n") -- 2.20.1