X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/4a824a5f575f02dcdb59259a145c4439b93edaec..bd8614c896255ba988644f5c359724e1133d0276:/src/plugins/mailman.sml diff --git a/src/plugins/mailman.sml b/src/plugins/mailman.sml index 9f30e72..a601155 100644 --- a/src/plugins/mailman.sml +++ b/src/plugins/mailman.sml @@ -37,29 +37,26 @@ val () = Env.registerFunction ("mailman_node_to_node", | _ => NONE) fun mailmanPlace (EApp ((EVar "mailman_place_default", _), (EString node, _)), _) = - SOME (node, Domain.nodeIp node) - | mailmanPlace (EApp ((EApp ((EVar "mailman_place", _), (EString node, _)), _), (EString ip, _)), _) = - SOME (node, ip) + SOME (node, Domain.nodeIp node, Domain.nodeIpv6 node) + | mailmanPlace (EApp ((EApp ((EApp ((EVar "mailman_place", _), (EString node, _)), _), (EString ip, _)), _), (EString ipv6, _)), _) = + SOME (node, ip, ipv6) | mailmanPlace _ = NONE -fun mailmanPlaceDefault node = (EApp ((EVar "mailman_place_default", dl), (EString node, dl)), dl) - val _ = Env.registerFunction ("mailman_place_to_web_node", - fn [e] => Option.map (fn (node, _) => (EString node, dl)) (mailmanPlace e) + fn [e] => Option.map (fn (node, _, _) => (EString node, dl)) (mailmanPlace e) | _ => NONE) val _ = Env.registerFunction ("mailman_place_to_node", - fn [e] => Option.map (fn (node, _) => (EString node, dl)) (mailmanPlace e) + fn [e] => Option.map (fn (node, _, _) => (EString node, dl)) (mailmanPlace e) | _ => NONE) val _ = Env.registerFunction ("mailman_place_to_ip", - fn [e] => Option.map (fn (_, ip) => (EString ip, dl)) (mailmanPlace e) + fn [e] => Option.map (fn (_, ip, _) => (EString ip, dl)) (mailmanPlace e) | _ => NONE) -val () = Defaults.registerDefault - ("MailmanPlaces", - (TList (TBase "mailman_place", dl), dl), - (fn () => (EList [mailmanPlaceDefault Config.Mailman.node], dl))) +val _ = Env.registerFunction ("mailman_place_to_ip", + fn [e] => Option.map (fn (_, _, ipv6) => (EString ipv6, dl)) (mailmanPlace e) + | _ => NONE) val files = ref ([] : TextIO.outstream list) val write = ref (fn _ : string => ()) @@ -69,7 +66,7 @@ val () = Env.action_one "mailmanWebHost" (fn host => let val {write, writeDom, close} = Domain.domainsFile {node = Config.Mailman.node, - name = "mailman"} + name = "mailman.conf"} in write "\t'"; write host; @@ -86,13 +83,15 @@ val () = Env.actionV_one "mailmanVhost" val places = Env.env (Env.list mailmanPlace) (env, "MailmanPlaces") val ssl = Env.env Apache.ssl (env, "SSL") + val forcessl = Env.env Env.bool (env, "MailmanForceSSL") val user = Env.env Env.string (env, "User") + val sadmin = Env.env Env.string (env, "ServerAdmin") val fullHost = host ^ "." ^ Domain.currentDomain () val vhostId = fullHost ^ (if Option.isSome ssl then ".ssl" else "") val confFile = fullHost ^ (if Option.isSome ssl then ".vhost_ssl" else ".vhost") in - app (fn (node, ip) => + app (fn (node, ip, ipv6) => let val file = Domain.domainFile {node = node, name = confFile} @@ -104,11 +103,21 @@ val () = Env.actionV_one "mailmanVhost" print user; print "\n"; print " "443" | NONE => "80"); + + print " ["; + print ipv6; + print "]"; + print ":"; + print (case ssl of + SOME _ => "443" + | NONE => "80"); + print ">\n"; print " ServerName "; print host; @@ -116,10 +125,21 @@ val () = Env.actionV_one "mailmanVhost" print (Domain.currentDomain ()); print "\n"; print " ServerAdmin "; - print user; - print "@hcoop.net\n"; - print " SuexecUserGroup list list\n"; + print sadmin; print "\n"; + case ssl of + SOME cert => + (print "\n\tSSLEngine on\n\tSSLCertificateFile "; + print cert; + print "\n") + | NONE => if forcessl then + (print "RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]") + else + (); + (* + print " SuexecUserGroup list list\n"; + print "\n"; + *) print " ErrorLog "; print ld; print "/error.log\n"; @@ -154,6 +174,18 @@ val () = Env.actionV_one "mailmanVhost" print " Order allow,deny\n"; print " Allow from all\n"; print " \n"; + print "\n"; + print "\n"; + print " \n"; + print " Order allow,deny\n"; + print " Allow from all\n"; + print " \n"; + print "\n"; + print " \n"; + print " Options +SymlinksIfOwnerMatch -ExecCGI +Indexes\n"; + print " Order allow,deny\n"; + print " Allow from all\n"; + print " \n"; Apache.doPre {user = user, nodes = map #1 places, id = vhostId, hostname = fullHost}; @@ -174,15 +206,15 @@ val () = Slave.registerFileHandler (fn fs => val spl = OS.Path.splitDirFile (#file fs) in case #file spl of - "mailman" => mailmanChanged := true + "mailman.conf" => mailmanChanged := true | _ => () end) val () = Slave.registerPostHandler (fn () => if !mailmanChanged then - (Slave.concatTo (fn s => s = "mailman") + (Slave.concatTo (fn s => s = "mailman.conf") Config.Mailman.mapFile; - Slave.enumerateTo (fn s => s = "mailman") ":" + Slave.enumerateTo (fn s => s = "mailman.conf") ":" Config.Mailman.handleDomains; Slave.shellF ([Config.Mailman.reload], fn cl => "Error reloading Mailman with " ^ cl)) @@ -190,7 +222,7 @@ val () = Slave.registerPostHandler (fn () => ()) val () = Domain.registerDescriber (Domain.considerAll - [Domain.Filename {filename = "mailman", + [Domain.Filename {filename = "mailman.conf", heading = "Mailman web host mapping:", showEmpty = false}])