HCoop
/
hcoop
/
domtool2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make regen work even when someone has compilation errors
[hcoop/domtool2.git]
/
src
/
main.sml
diff --git
a/src/main.sml
b/src/main.sml
index
84e7fe3
..
4e377a9
100644
(file)
--- a/
src/main.sml
+++ b/
src/main.sml
@@
-1,5
+1,5
@@
(* HCoop Domtool (http://hcoop.sourceforge.net/)
(* HCoop Domtool (http://hcoop.sourceforge.net/)
- * Copyright (c) 2006, Adam Chlipala
+ * Copyright (c) 2006
-2007
, Adam Chlipala
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@
-170,6
+170,12
@@
val dispatcher =
val self =
"localhost:" ^ Int.toString Config.slavePort
val self =
"localhost:" ^ Int.toString Config.slavePort
+fun context x =
+ (OpenSSL.context false x)
+ handle e as OpenSSL.OpenSSL _ =>
+ (print "Couldn't find your certificate.\nYou probably haven't been given any Domtool privileges.\n";
+ raise e)
+
fun requestContext f =
let
val user =
fun requestContext f =
let
val user =
@@
-187,9
+193,9
@@
fun requestContext f =
val () = f ()
val () = f ()
- val context =
OpenSSL.
context (Config.certDir ^ "/" ^ user ^ ".pem",
-
Config.keyDir ^ "/" ^ user ^ "/key.pem",
-
Config.trustStore)
+ val context = context (Config.certDir ^ "/" ^ user ^ ".pem",
+ Config.keyDir ^ "/" ^ user ^ "/key.pem",
+ Config.trustStore)
in
(user, context)
end
in
(user, context)
end
@@
-787,6
+793,8
@@
fun requestFirewall {node, uname} =
fun regenerate context =
let
fun regenerate context =
let
+ val _ = ErrorMsg.reset ()
+
val b = basis ()
val () = Tycheck.disallowExterns ()
val b = basis ()
val () = Tycheck.disallowExterns ()
@@
-840,13
+848,15
@@
fun regenerate context =
val (_, files) = Order.order (SOME b) files
in
if !ErrorMsg.anyErrors then
val (_, files) = Order.order (SOME b) files
in
if !ErrorMsg.anyErrors then
- print ("User " ^ user ^ "'s configuration has errors!\n")
+ (ErrorMsg.reset ();
+ print ("User " ^ user ^ "'s configuration has errors!\n"))
else
app eval' files
end
handle IO.Io _ => ()
| OS.SysErr (s, _) => print ("System error processing user " ^ user ^ ": " ^ s ^ "\n")
else
app eval' files
end
handle IO.Io _ => ()
| OS.SysErr (s, _) => print ("System error processing user " ^ user ^ ": " ^ s ^ "\n")
- | ErrorMsg.Error => print ("User " ^ user ^ " had a compilation error.\n")
+ | ErrorMsg.Error => (ErrorMsg.reset ();
+ print ("User " ^ user ^ " had a compilation error.\n"))
| _ => print "Unknown exception during regeneration!\n"
in
app contactNode Config.nodeIps;
| _ => print "Unknown exception during regeneration!\n"
in
app contactNode Config.nodeIps;
@@
-891,9
+901,9
@@
fun service () =
let
val () = Acl.read Config.aclFile
let
val () = Acl.read Config.aclFile
- val context =
OpenSSL.
context (Config.serverCert,
-
Config.serverKey,
-
Config.trustStore)
+ val context = context (Config.serverCert,
+ Config.serverKey,
+ Config.trustStore)
val _ = Domain.set_context context
val sock = OpenSSL.listen (context, Config.dispatcherPort)
val _ = Domain.set_context context
val sock = OpenSSL.listen (context, Config.dispatcherPort)
@@
-1253,8
+1263,15
@@
fun service () =
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
- | _ =>
+ | IO.Io {name, function, cause} =>
+ (print ("IO error: " ^ function ^ " for " ^ name ^ "\n");
+ app (fn x => print (x ^ "\n")) (SMLofNJ.exnHistory cause);
+ OpenSSL.close bio
+ handle OpenSSL.OpenSSL _ => ();
+ loop ())
+ | e =>
(print "Unknown exception in main loop!\n";
(print "Unknown exception in main loop!\n";
+ app (fn x => print (x ^ "\n")) (SMLofNJ.exnHistory e);
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
@@
-1269,9
+1286,9
@@
fun slave () =
let
val host = Slave.hostname ()
let
val host = Slave.hostname ()
- val context =
OpenSSL.
context (Config.certDir ^ "/" ^ host ^ ".pem",
-
Config.keyDir ^ "/" ^ host ^ "/key.pem",
-
Config.trustStore)
+ val context = context (Config.certDir ^ "/" ^ host ^ ".pem",
+ Config.keyDir ^ "/" ^ host ^ "/key.pem",
+ Config.trustStore)
val sock = OpenSSL.listen (context, Config.slavePort)
val sock = OpenSSL.listen (context, Config.slavePort)
@@
-1324,8
+1341,9
@@
fun slave () =
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
- | OS.SysErr (s, _) =>
- (print ("System error: "^ s ^ "\n");
+ | e as OS.SysErr (s, _) =>
+ (app (fn s => print (s ^ "\n")) (SMLofNJ.exnHistory e);
+ print ("System error: "^ s ^ "\n");
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())
OpenSSL.close bio
handle OpenSSL.OpenSSL _ => ();
loop ())