Output suPHP_UserGroup
[hcoop/domtool2.git] / src / plugins / apache.sml
index e2f70d3..d97ac8b 100644 (file)
@@ -243,10 +243,12 @@ val autoindex_option = fn (EApp ((EVar "descriptionWidth", _), w), _) =>
 
 val vhostsChanged = ref false
 val logDeleted = ref false
+val delayedLogMoves = ref (fn () => ())
 
 val () = Slave.registerPreHandler
             (fn () => (vhostsChanged := false;
-                       logDeleted := false))
+                       logDeleted := false;
+                       delayedLogMoves := (fn () => print "Executing delayed log moves/deletes.\n")))
 
 fun findVhostUser fname =
     let
@@ -339,18 +341,20 @@ val () = Slave.registerFileHandler (fn fs =>
                                                               Slave.Delete _ =>
                                                               let
                                                                   val ldir = realLogDir oldUser
+                                                                  val dlm = !delayedLogMoves
                                                               in
                                                                   if !logDeleted then
                                                                       ()
                                                                   else
-                                                                      (ignore (OS.Process.system (down ()));
+                                                                      ((*ignore (OS.Process.system (down ()));*)
                                                                        ignore (OS.Process.system (fixperms ()));
                                                                        logDeleted := true);
                                                                   ignore (OS.Process.system (Config.rm
                                                                                              ^ " -rf "
                                                                                              ^ realVhostFile));
-                                                                  Slave.moveDirCreate {from = ldir,
-                                                                                       to = backupLogs ()}
+                                                                  delayedLogMoves := (fn () => (dlm ();
+                                                                                                Slave.moveDirCreate {from = ldir,
+                                                                                                                     to = backupLogs ()}))
                                                               end
                                                             | Slave.Add =>
                                                               let
@@ -378,15 +382,18 @@ val () = Slave.registerFileHandler (fn fs =>
                                                                    let
                                                                        val old = realLogDir oldUser
                                                                        val rld = realLogDir user
+
+                                                                       val dlm = !delayedLogMoves
                                                                    in
                                                                        if !logDeleted then
                                                                            ()
                                                                        else
-                                                                           (ignore (OS.Process.system (down ()));
+                                                                           ((*ignore (OS.Process.system (down ()));*)
                                                                             logDeleted := true);
-                                                                       ignore (OS.Process.system (Config.rm
-                                                                                                  ^ " -rf "
-                                                                                                  ^ realLogDir oldUser));
+                                                                       delayedLogMoves := (fn () => (dlm ();
+                                                                                                     ignore (OS.Process.system (Config.rm
+                                                                                                                                ^ " -rf "
+                                                                                                                                ^ realLogDir oldUser))));
                                                                        if Posix.FileSys.access (rld, []) then
                                                                            ()
                                                                        else
@@ -403,8 +410,9 @@ val () = Slave.registerFileHandler (fn fs =>
 val () = Slave.registerPostHandler
         (fn () =>
             (if !vhostsChanged then
-                 Slave.shellF ([if !logDeleted then undown () else reload ()],
-                               fn cl => "Error reloading Apache with " ^ cl)
+                 (Slave.shellF ([reload ()],
+                             fn cl => "Error reloading Apache with " ^ cl);
+                  if !logDeleted then !delayedLogMoves () else ())
              else
                  ()))
 
@@ -511,6 +519,10 @@ fun vhostBody (env, makeFullHost) =
                                           TextIO.output (file, group))
                                      else
                                          (TextIO.output (file, "\n\tSuexecUserGroup ");
+                                          TextIO.output (file, user);
+                                          TextIO.output (file, " ");
+                                          TextIO.output (file, group);
+                                          TextIO.output (file, "\n\tsuPHP_UserGroup ");
                                           TextIO.output (file, user);
                                           TextIO.output (file, " ");
                                           TextIO.output (file, group))
@@ -586,6 +598,15 @@ val () = Env.container_one "directory"
                    inLocal := false;
                    localRewriteEnabled := false))
 
+val () = Env.container_one "filesMatch"
+        ("regexp", Env.string)
+        (fn prefix =>
+            (write "\t<FilesMatch \"";
+             write prefix;
+             write "\">\n"),
+         fn () => (write "\t</FilesMatch>\n";
+                   localRewriteEnabled := false))
+
 fun checkRewrite () =
     if !inLocal then
        if !localRewriteEnabled then