Manage spamassassin preferences in shared space
[hcoop/domtool2.git] / src / main.sml
index 6cb3ef1..50f5e97 100644 (file)
@@ -194,6 +194,8 @@ fun reduce G fname =
 
 (*(Defaults.eInit ())*)
 
+val toplevel = Env.initialDynEnvVals Reduce.reduceExp
+
 fun eval G evs fname =
     case reduce G fname of
        (G, SOME body') =>
@@ -201,14 +203,14 @@ fun eval G evs fname =
            raise ErrorMsg.Error
        else
            let
-               val evs' = Eval.exec' evs body'
+               val evs' = Eval.exec' (toplevel G, evs) body'
            in
                (G, evs')
            end
       | (G, NONE) => (G, evs)
 
 val dispatcher =
-    Config.dispatcher ^ ":" ^ Int.toString Config.dispatcherPort
+    Domain.nodeIp Config.dispatcherName ^ ":" ^ Int.toString Config.dispatcherPort
 
 val self =
     "localhost:" ^ Int.toString Config.slavePort
@@ -1091,7 +1093,7 @@ fun regenerateEither tc checker context =
        val ok = ref true
  
        fun contactNode (node, ip) =
-           if node = Config.defaultNode then
+           if node = Config.dispatcherName then
                Domain.resetLocal ()
            else let
                    val bio = OpenSSL.connect true (context,
@@ -1150,7 +1152,7 @@ fun regenerateEither tc checker context =
                        else
                            ();
                        let val basis' = basis () in
-                           ignore (foldl checker' (basis', Env.initialDynEnvVals basis') files)
+                           ignore (foldl checker' (basis', SM.empty) files)
                        end
                    end
                else if String.isSuffix "_admin" user then
@@ -1317,7 +1319,7 @@ fun service () =
                         in
                             doIt (fn () => (Env.pre ();
                                             let val basis' = basis () in
-                                                ignore (foldl doOne (basis', Env.initialDynEnvVals basis') codes)
+                                                ignore (foldl doOne (basis', SM.empty) codes)
                                             end;
                                             Env.post ();
                                             Msg.send (bio, MsgOk);
@@ -1550,6 +1552,7 @@ fun service () =
                                              NONE => ("User tried to set SA filtering for " ^ addr,
                                                       SOME "You aren't allowed to configure SA filtering for that recipient.")
                                            | SOME addr' => (SetSA.set (addr', b);
+                                                            SetSA.rebuild ();
                                                             Msg.send (bio, MsgOk);
                                                             ("Set SA filtering status for " ^ addr ^ " to "
                                                              ^ (if b then "ON" else "OFF"),
@@ -1689,6 +1692,10 @@ fun slave () =
                                                                 Msg.send (bio, MsgOk)
                                                             else
                                                                 Msg.send (bio, MsgError "userdb update failed"))
+                                      | MsgSaChanged => (if Slave.shell [Config.SpamAssassin.postReload] then
+                                                             Msg.send (bio, MsgOk)
+                                                         else
+                                                             Msg.send (bio, MsgError "Error reloading SpamAssassin addresses"))
                                       | _ => (print "Dispatcher sent unexpected command\n";
                                               Msg.send (bio, MsgError "Unexpected command"))
                         in