Domain alias support for e-mail aliases
authorAdam Chlipala <adamc@hcoop.net>
Sun, 29 Apr 2007 20:15:05 +0000 (20:15 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sun, 29 Apr 2007 20:15:05 +0000 (20:15 +0000)
src/mail/.cvsignore [new file with mode: 0644]
src/plugins/alias.sml

diff --git a/src/mail/.cvsignore b/src/mail/.cvsignore
new file mode 100644 (file)
index 0000000..6dc8e1a
--- /dev/null
@@ -0,0 +1 @@
+.cm
index 43e109f..8ed2da6 100644 (file)
@@ -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")