mailman: open /usr/share/images/mailman, revert to mod_access_compat
[hcoop/domtool2.git] / src / plugins / mailman.sml
index 4a00074..d165dc6 100644 (file)
@@ -42,8 +42,6 @@ fun mailmanPlace (EApp ((EVar "mailman_place_default", _), (EString node, _)), _
     SOME (node, ip)
   | 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)
                               | _ => NONE)
@@ -56,11 +54,6 @@ val _ = Env.registerFunction ("mailman_place_to_ip",
                              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 files = ref ([] : TextIO.outstream list)
 val write = ref (fn _ : string => ())
 
@@ -69,7 +62,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;
@@ -87,6 +80,7 @@ val () = Env.actionV_one "mailmanVhost"
 
                 val ssl = Env.env Apache.ssl (env, "SSL")
                 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 "")
@@ -110,12 +104,18 @@ val () = Env.actionV_one "mailmanVhost"
                                        SOME _ => "443"
                                      | NONE => "80");
                             print ">\n";
-                            print "    ServerName $LISTDOMAIN\n";
+                            print "    ServerName ";
+                            print host;
+                            print ".";
+                            print (Domain.currentDomain ());
+                            print "\n";
                             print "    ServerAdmin ";
-                            print user;
-                            print "@hcoop.net\n";
-                            print "    SuexecUserGroup list list\n";
+                            print sadmin;
                             print "\n";
+                            (* 
+                             print "    SuexecUserGroup list list\n";
+                            print "\n";
+                            *)
                             print "    ErrorLog ";
                             print ld;
                             print "/error.log\n";
@@ -126,7 +126,11 @@ val () = Env.actionV_one "mailmanVhost"
                             print "    RewriteEngine on\n";
                             print "\n";
                             print "    # Default to showing listinfo page\n";
-                            print "    RewriteRule ^/$ http://";
+                            print "    RewriteRule ^/$ http";
+                            case ssl of
+                                NONE => ()
+                              | SOME _ => print "s";
+                            print "://";
                             print fullHost;
                             print "/listinfo/\n";
                             print "\n";
@@ -146,6 +150,18 @@ val () = Env.actionV_one "mailmanVhost"
                             print "        Order allow,deny\n";
                             print "        Allow from all\n";
                             print "    </Directory>\n";
+                            print "\n";
+                            print "\n";
+                            print "    <Directory /usr/share/images/mailman>\n";
+                            print "        Order allow,deny\n";
+                            print "        Allow from all\n";
+                            print "    </Directory>\n";
+                            print "\n";
+                            print "    <Directory /var/lib/mailman/archives/public/>\n";
+                            print "        Options +SymlinksIfOwnerMatch -ExecCGI +Indexes\n";
+                            print "        Order allow,deny\n";
+                            print "        Allow from all\n";
+                            print "    </Directory>\n";
 
                             Apache.doPre {user = user, nodes = map #1 places, id = vhostId, hostname = fullHost};
 
@@ -166,15 +182,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))
@@ -182,8 +198,8 @@ val () = Slave.registerPostHandler (fn () =>
                                           ())
 
 val () = Domain.registerDescriber (Domain.considerAll
-                                  [Domain.Filename {filename = "mailman",
-                                                    heading = "Mailman web host mapping",
+                                  [Domain.Filename {filename = "mailman.conf",
+                                                    heading = "Mailman web host mapping:",
                                                     showEmpty = false}])
 
 end