X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/8a7c40fa29ff18a437fcf4ee3f248a7aeb41c19c..7ceba9683f4372dfc348e0774a550a573fdcfefa:/src/plugins/exim.sml diff --git a/src/plugins/exim.sml b/src/plugins/exim.sml index 20e27dd..05e88e9 100644 --- a/src/plugins/exim.sml +++ b/src/plugins/exim.sml @@ -24,13 +24,14 @@ open Ast val dl = ErrorMsg.dummyLoc -val _ = Main.registerDefault ("MailNodes", - (TList (TBase "node", dl), dl), - (fn () => (EList (map (fn s => (EString s, dl)) Config.Exim.aliasTo), dl))) +val _ = Defaults.registerDefault ("MailNodes", + (TList (TBase "mail_node", dl), dl), + (fn () => (EList (map (fn s => (EString s, dl)) Config.Exim.aliasTo), dl))) val aliasesChanged = ref false val aliasesDefaultChanged = ref false val hostsChanged = ref false +val relayHostsChanged = ref false val () = Slave.registerPreHandler (fn () => (aliasesChanged := false; @@ -41,12 +42,14 @@ val () = Slave.registerFileHandler (fn fs => let val spl = OS.Path.splitDirFile (#file fs) in - if #file spl = "aliases" then + if #file spl = "aliases.base" then aliasesChanged := true else if #file spl = "aliases.default" then aliasesDefaultChanged := true - else if #file spl = "mail" then + else if #file spl = "mail.handle" then hostsChanged := true + else if #file spl = "mail.relay" then + relayHostsChanged := true else () end) @@ -54,7 +57,7 @@ val () = Slave.registerFileHandler (fn fs => val () = Slave.registerPostHandler (fn () => (if !aliasesChanged then - Slave.concatTo (fn s => s = "aliases") Config.Exim.aliases + Slave.concatTo (fn s => s = "aliases.base") Config.Exim.aliases else (); if !aliasesDefaultChanged then @@ -62,11 +65,15 @@ val () = Slave.registerPostHandler else (); if !hostsChanged then - Slave.enumerateTo (fn s => s = "mail") ":" Config.Exim.handleDomains + Slave.enumerateTo (fn s => s = "mail.handle") ":" Config.Exim.handleDomains + else + (); + if !relayHostsChanged then + Slave.enumerateTo (fn s => s = "mail.relay") ":" Config.Exim.relayDomains else (); if !aliasesChanged orelse !aliasesDefaultChanged - orelse !hostsChanged then + orelse !hostsChanged orelse !relayHostsChanged then Slave.shellF ([Config.Exim.reload], fn cl => "Error reloading exim with " ^ cl) else @@ -78,9 +85,33 @@ val () = Env.actionV_none "handleMail" let val nodes = Env.env (Env.list Env.string) (env, "MailNodes") in - app (fn node => TextIO.closeOut - (Domain.domainFile {node = node, - name = "mail"})) nodes + app (fn node => #close + (Domain.domainsFile {node = node, + name = "mail.handle"}) ()) nodes end) +val () = Env.actionV_none "relayMail" + (fn env => + let + val nodes = Env.env (Env.list Env.string) (env, "MailNodes") + in + app (fn node => #close + (Domain.domainsFile {node = node, + name = "mail.relay"}) ()) nodes + end) + +val () = Domain.registerDescriber (Domain.considerAll + [Domain.Filename {filename = "aliases.base", + heading = "E-mail aliases:", + showEmpty = false}, + Domain.Filename {filename = "aliases.default", + heading = "Default e-mail alias:", + showEmpty = false}, + Domain.Filename {filename = "mail.handle", + heading = "E-mail handling is on.", + showEmpty = true}, + Domain.Filename {filename = "mail.relay", + heading = "E-mail relaying is on.", + showEmpty = true}]) + end