apache: add ipv6 support
[hcoop/domtool2.git] / src / plugins / apache.sml
index 6a9fa39..5a3bb88 100644 (file)
@@ -39,24 +39,28 @@ val _ = Env.registerFunction ("web_node_to_node",
                               | _ => NONE)
 
 fun webPlace (EApp ((EVar "web_place_default", _), (EString node, _)), _) =
-    SOME (node, Domain.nodeIp node)
-  | webPlace (EApp ((EApp ((EVar "web_place", _), (EString node, _)), _), (EString ip, _)), _) =
-    SOME (node, ip)
+    SOME (node, Domain.nodeIp node, Domain.nodeIpv6 node)
+  | webPlace (EApp ((EApp ((EApp ((EVar "web_place", _), (EString node, _)), _), (EString ip, _)), _), (EString ipv6, _)), _) =
+    SOME (node, ip, ipv6)
   | webPlace _ = NONE
 
 fun webPlaceDefault node = (EApp ((EVar "web_place_default", dl), (EString node, dl)), dl)
 
 val _ = Env.registerFunction ("web_place_to_web_node",
-                             fn [e] => Option.map (fn (node, _) => (EString node, dl)) (webPlace e)
+                             fn [e] => Option.map (fn (node, _, _) => (EString node, dl)) (webPlace e)
                               | _ => NONE)
 
 val _ = Env.registerFunction ("web_place_to_node",
-                             fn [e] => Option.map (fn (node, _) => (EString node, dl)) (webPlace e)
+                             fn [e] => Option.map (fn (node, _, _) => (EString node, dl)) (webPlace e)
                               | _ => NONE)
 
 val _ = Env.registerFunction ("web_place_to_ip",
-                             fn [e] => Option.map (fn (_, ip) => (EString ip, dl)) (webPlace e)
-                              | _ => NONE)
+                             fn [e] => Option.map (fn (_, ip, _) => (EString ip, dl)) (webPlace e)
+                             | _ => NONE)
+
+val _ = Env.registerFunction ("web_place_to_ipv6",
+                             fn [e] => Option.map (fn (_, _, ipv6) => (EString ipv6, dl)) (webPlace e)
+                             | _ => NONE)
 
 val _ = Env.type_one "proxy_port"
        Env.int
@@ -378,7 +382,7 @@ val () = Slave.registerFileHandler (fn fs =>
                                                                       Slave.moveDirCreate {from = backupLogs (),
                                                                                            to = rld}
                                                               end
-                                                              
+
                                                             | _ =>
                                                               (ignore (OS.Process.system (Config.cp
                                                                                           ^ " "
@@ -493,7 +497,7 @@ fun vhostBody (env, makeFullHost) =
        localRewriteEnabled := false;
        expiresEnabled := false;
        localExpiresEnabled := false;
-       vhostFiles := map (fn (node, ip) =>
+       vhostFiles := map (fn (node, ip, ipv6) =>
                              let
                                  val file = Domain.domainFile {node = node,
                                                                name = confFile}
@@ -503,11 +507,21 @@ fun vhostBody (env, makeFullHost) =
                                  TextIO.output (file, "# Owner: ");
                                  TextIO.output (file, user);
                                  TextIO.output (file, "\n<VirtualHost ");
+
                                  TextIO.output (file, ip);
                                  TextIO.output (file, ":");
                                  TextIO.output (file, case ssl of
                                                           SOME _ => "443"
                                                         | NONE => "80");
+
+                                 TextIO.output (file, " [");
+                                 TextIO.output (file, ipv6);
+                                 TextIO.output (file, "]");
+                                 TextIO.output (file, ":");
+                                 TextIO.output (file, case ssl of
+                                                          SOME _ => "443"
+                                                        | NONE => "80");
+
                                  TextIO.output (file, ">\n");
                                  TextIO.output (file, "\tErrorLog ");
                                  TextIO.output (file, ld);
@@ -582,7 +596,7 @@ fun vhostBody (env, makeFullHost) =
        write "\n";
        !pre {user = user, nodes = map #1 places, id = vhostId, hostname = fullHost};
        app (fn dom => !aliaser (makeFullHost dom)) (Domain.currentAliasDomains ())
-    end    
+    end
 
 val () = Env.containerV_one "vhost"
         ("host", Env.string)
@@ -838,7 +852,7 @@ val () = Env.action_two "errorDocument"
                 maybeQuote ();
                 write "\n"
             end)
-                         
+
 val () = Env.action_one "options"
         ("options", Env.list apache_option)
         (fn opts =>
@@ -928,7 +942,7 @@ val () = Env.action_one "authType"
                  write ty;
                  write "\n";
                  case ty of
-                     "kerberos" => 
+                     "kerberos" =>
                      write "\tKrbServiceName HTTP\n\tKrb5Keytab /etc/keytabs/service/apache\n\tKrbMethodNegotiate on\n\tKrbMethodK5Passwd on\n\tKrbVerifyKDC on\n\tKrbAuthRealms HCOOP.NET\n\tKrbSaveCredentials on\n"
                    | _ => ())
             else