web_place and web_node now have mandatory IPv6 addresses, and vhosts
will always listen on both IPv4 and IPv6.
mailman plugin updated as well
extern type web_place;
extern val web_place_default : web_node -> web_place;
extern type web_place;
extern val web_place_default : web_node -> web_place;
-extern val web_place : web_node -> your_ip -> web_place;
+extern val web_place : web_node -> your_ip -> your_ipv6 -> web_place;
extern val web_place_to_web_node : web_place -> web_node;
extern val web_place_to_node : web_place -> node;
extern val web_place_to_ip : web_place -> ip;
extern val web_place_to_web_node : web_place -> web_node;
extern val web_place_to_node : web_place -> node;
extern val web_place_to_ip : web_place -> ip;
+extern val web_place_to_ipv6 : web_place -> ipv6;
{{Web places are combinations of web nodes (servers on which you are allowed to
run web sites) and IP addresses on which those servers should listen for
requests.}}
{{Web places are combinations of web nodes (servers on which you are allowed to
run web sites) and IP addresses on which those servers should listen for
requests.}}
extern type mailman_place;
extern val mailman_place_default : mailman_node -> mailman_place;
extern type mailman_place;
extern val mailman_place_default : mailman_node -> mailman_place;
-extern val mailman_place : mailman_node -> your_ip -> mailman_place;
+extern val mailman_place : mailman_node -> your_ip -> your_ipv6 -> mailman_place;
extern val mailman_place_to_web_node : mailman_place -> web_node;
extern val mailman_place_to_node : mailman_place -> node;
extern val mailman_place_to_ip : mailman_place -> ip;
extern val mailman_place_to_web_node : mailman_place -> web_node;
extern val mailman_place_to_node : mailman_place -> node;
extern val mailman_place_to_ip : mailman_place -> ip;
+extern val mailman_place_to_ipv6 : mailman_place -> ipv6;
{{Analogous to <tt>web_place</tt>, but based on <tt>mailman_node</tt>s}}
extern val mailmanVhost : host -> [Domain]
{{Analogous to <tt>web_place</tt>, but based on <tt>mailman_node</tt>s}}
extern val mailmanVhost : host -> [Domain]
(* OK, where is it _really_ located? (Target of log syncing into AFS) *)
val ssl : string option Env.arg
(* OK, where is it _really_ located? (Target of log syncing into AFS) *)
val ssl : string option Env.arg
- val webPlace : (string * string) Env.arg
+ val webPlace : (string * string * string) Env.arg
val webNode : string -> bool
end
val webNode : string -> bool
end
| _ => NONE)
fun webPlace (EApp ((EVar "web_place_default", _), (EString 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",
| 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",
| _ => 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",
| _ => 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
val _ = Env.type_one "proxy_port"
Env.int
Slave.moveDirCreate {from = backupLogs (),
to = rld}
end
Slave.moveDirCreate {from = backupLogs (),
to = rld}
end
| _ =>
(ignore (OS.Process.system (Config.cp
^ " "
| _ =>
(ignore (OS.Process.system (Config.cp
^ " "
localRewriteEnabled := false;
expiresEnabled := false;
localExpiresEnabled := false;
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}
let
val file = Domain.domainFile {node = node,
name = confFile}
TextIO.output (file, "# Owner: ");
TextIO.output (file, user);
TextIO.output (file, "\n<VirtualHost ");
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, 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);
TextIO.output (file, ">\n");
TextIO.output (file, "\tErrorLog ");
TextIO.output (file, ld);
write "\n";
!pre {user = user, nodes = map #1 places, id = vhostId, hostname = fullHost};
app (fn dom => !aliaser (makeFullHost dom)) (Domain.currentAliasDomains ())
write "\n";
!pre {user = user, nodes = map #1 places, id = vhostId, hostname = fullHost};
app (fn dom => !aliaser (makeFullHost dom)) (Domain.currentAliasDomains ())
val () = Env.containerV_one "vhost"
("host", Env.string)
val () = Env.containerV_one "vhost"
("host", Env.string)
maybeQuote ();
write "\n"
end)
maybeQuote ();
write "\n"
end)
val () = Env.action_one "options"
("options", Env.list apache_option)
(fn opts =>
val () = Env.action_one "options"
("options", Env.list apache_option)
(fn opts =>
write ty;
write "\n";
case ty of
write ty;
write "\n";
case ty of
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
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
| _ => NONE)
fun mailmanPlace (EApp ((EVar "mailman_place_default", _), (EString 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
val _ = Env.registerFunction ("mailman_place_to_web_node",
| mailmanPlace _ = NONE
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",
| _ => 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",
| _ => 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 _ = Env.registerFunction ("mailman_place_to_ip",
+ fn [e] => Option.map (fn (_, _, ipv6) => (EString ipv6, dl)) (mailmanPlace e)
| _ => NONE)
val files = ref ([] : TextIO.outstream list)
| _ => NONE)
val files = ref ([] : TextIO.outstream list)
val vhostId = fullHost ^ (if Option.isSome ssl then ".ssl" else "")
val confFile = fullHost ^ (if Option.isSome ssl then ".vhost_ssl" else ".vhost")
in
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, ipv6) =>
let
val file = Domain.domainFile {node = node,
name = confFile}
let
val file = Domain.domainFile {node = node,
name = confFile}
print user;
print "\n";
print "<VirtualHost ";
print user;
print "\n";
print "<VirtualHost ";
print ip;
print ":";
print (case ssl of
SOME _ => "443"
| NONE => "80");
print ip;
print ":";
print (case ssl of
SOME _ => "443"
| NONE => "80");
+
+ print " [";
+ print ipv6;
+ print "]";
+ print ":";
+ print (case ssl of
+ SOME _ => "443"
+ | NONE => "80");
+
print ">\n";
print " ServerName ";
print host;
print ">\n";
print " ServerName ";
print host;
print " ServerAdmin ";
print sadmin;
print "\n";
print " ServerAdmin ";
print sadmin;
print "\n";
print " SuexecUserGroup list list\n";
print "\n";
*)
print " SuexecUserGroup list list\n";
print "\n";
*)