To be honest, I don't remember what changes these were! :-)
[hcoop/zz_old/domtool.git] / src / apache / apache.sml
index 5b0050e..96710fe 100644 (file)
@@ -67,13 +67,19 @@ struct
            List.all checkField fields
        end
 
-    fun handler {path, domain, parent, vars, paths, users, groups} =
+    fun handler {path, domain, parent, vars, paths, users, groups, mxs} =
        let
            val _ = Domtool.dprint ("Reading host " ^ path ^ " for " ^ domain ^ "....")
 
            val vhosts = valOf (!vhosts)
            val loggroups = valOf (!loggroups)
 
+           val domfile = "/etc/domains/" ^ String.concatWith "/" (rev (String.tokens (fn ch => ch = #".") domain))
+           val stat = Posix.FileSys.stat domfile
+           val group' = Posix.SysDB.Group.name (Posix.SysDB.getgrgid (Posix.FileSys.ST.gid stat))
+
+           val _ = TextIO.output (loggroups, domain ^ "\t" ^ group' ^ "\n")
+
            val hf = TextIO.openIn path
            val rewrite = ref false
 
@@ -108,10 +114,9 @@ struct
                         Domtool.error (path, "not authorized to run as " ^ user')
                   | ["Group", group'] =>
                     if StringSet.member (groups, group') then
-                        (group := group';
-                         TextIO.output (loggroups, domain ^ "\t" ^ group' ^ "\n"))
+                        group := group'
                     else
-                         Domtool.error (path, "not authorized to run as group " ^ group')
+                        Domtool.error (path, "not authorized to run as group " ^ group')
                   | ["ServerAdmin", email] => TextIO.output (vhosts, "\tServerAdmin " ^ email ^ "\n")
                   | ["UserDir"] => TextIO.output (vhosts, "\tUserDir public_html\n\t<Directory /home/*/public_html/cgi-bin>\n\t\tAllowOverride None\n\t\tOptions ExecCGI\n\t\tAllow from all\n\t\tSetHandler cgi-script\n\t</Directory>\n\tScriptAliasMatch ^/~(.*)/cgi-bin/(.*) /home/$1/public_html/cgi-bin/$2\n")
                   | ["DocumentRoot", p] =>
@@ -209,6 +214,13 @@ struct
                                                "\t</Directory>\n")
                     else
                         Domtool.error (path, "not authorized to use " ^ p)
+                  | ["Mod", lang, p, file] =>
+                    (case List.find (fn (lang', _) => lang = lang') langHandlers of
+                         NONE => Domtool.error (p, "unknown Mod language " ^ lang)
+                       | SOME (_, f) =>
+                         (TextIO.output (vhosts, "\t<Location " ^ p ^ ">\n");
+                          TextIO.output (vhosts, f file);
+                          TextIO.output (vhosts, "\t</Location>\n")))
                   | ["HTML", p] =>
                     if checkPath (paths, p) then
                         TextIO.output (vhosts, "\t<Directory " ^ p ^ ">\n" ^
@@ -216,6 +228,10 @@ struct
                                                "\t</Directory>\n")
                     else
                         Domtool.error (path, "not authorized to use " ^ p)
+                  | ["PerlSetVar", n, v] =>
+                    TextIO.output (vhosts, "\tPerlSetVar " ^ n ^ " " ^ v ^ "\n")
+                  | ["AddDefaultCharset", cs] =>
+                    TextIO.output (vhosts, "\tAddDefaultCharSet " ^ cs ^ "\n")
                   | cmd::_ => Domtool.error (path, "unknown option: " ^ cmd))
        in
            TextIO.output (vhosts, "<VirtualHost *>\n" ^