More helpful error message for failure to create an SSL context
[hcoop/domtool2.git] / src / main.sml
index 90a0ee4..e106823 100644 (file)
@@ -170,6 +170,12 @@ val dispatcher =
 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 =
@@ -187,9 +193,9 @@ fun requestContext 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
@@ -787,7 +793,13 @@ fun requestFirewall {node, uname} =
 
 fun regenerate context =
     let
+       val _ = ErrorMsg.reset ()
+
        val b = basis ()
+       val _ = if Env.lookupType b "string" then
+                   print "Still got it\n"
+               else
+                   print "Don't got it\n"
        val () = Tycheck.disallowExterns ()
 
        val () = Domain.resetGlobal ()
@@ -891,9 +903,9 @@ fun service () =
     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)
@@ -1276,9 +1288,9 @@ fun slave () =
     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)