()
else
Option.app (Unused.check G) (#3 prog);
- Tycheck.checkFile G (Defaults.tInit prog) prog)
+ Tycheck.checkFile G prog)
end
fun basis () =
let
+ val _ = ErrorMsg.reset ()
val dir = Posix.FileSys.opendir Config.libRoot
fun loop files =
raise ErrorMsg.Error
else
let
- val G' = Tycheck.checkFile G (Defaults.tInit prog) prog
+ val G' = Tycheck.checkFile G prog
in
if !ErrorMsg.anyErrors then
raise ErrorMsg.Error
(*(Defaults.eInit ())*)
+val toplevel = Env.initialDynEnvVals Reduce.reduceExp
+
fun eval G evs fname =
case reduce G fname of
(G, SOME body') =>
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
OpenSSL.close bio
end
+fun requestPortalPasswdMailbox p =
+ let
+ val (_, bio) = requestBio (fn () => ())
+ in
+ (Msg.send (bio, MsgPortalPasswdMailbox p);
+ case Msg.recv bio of
+ NONE => (print "Server closed connection unexpectedly.\n"; OS.Process.failure)
+ | SOME m =>
+ case m of
+ MsgOk => (print ("The password for " ^ #user p ^ "@" ^ #domain p ^ " has been changed.\n");
+ OS.Process.success)
+ | MsgError s => (print ("Set failed: " ^ s ^ "\n"); OS.Process.failure)
+ | _ => (print "Unexpected server reply.\n"; OS.Process.failure))
+ before OpenSSL.close bio
+ end
+
fun requestRmMailbox p =
let
val (_, bio) = requestBio (fn () => ())
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,
ok := false)
else
();
- ignore (foldl checker' (basis (), Defaults.eInit ()) files)
+ let val basis' = basis () in
+ ignore (foldl checker' (basis', SM.empty) files)
+ end
end
- else if String.isSuffix "_admin" user then
+ else if (String.isSuffix "_admin" user) orelse (String.isSuffix ".daemon" user) then
()
else
(print ("Couldn't access " ^ user ^ "'s ~/.domtool directory.\n");
end
in
doIt (fn () => (Env.pre ();
- ignore (foldl doOne (basis (), Defaults.eInit ()) codes);
+ let val basis' = basis () in
+ ignore (foldl doOne (basis', SM.empty) codes)
+ end;
Env.post ();
Msg.send (bio, MsgOk);
("Configuration complete.", NONE)))
SOME msg))
(fn () => ())
+ | MsgPortalPasswdMailbox {domain, user = emailUser, oldpasswd, newpasswd} =>
+ doIt (fn () =>
+ if not (Acl.query {user = user, class = "priv", value = "vmail"}) then
+ ("User is not authorized to run portal vmail password",
+ SOME "You're not authorized to use the portal password command")
+ else if not (Domain.validEmailUser emailUser) then
+ ("Invalid e-mail username " ^ emailUser,
+ SOME "Invalid e-mail username")
+ else if not (CharVector.all Char.isGraph oldpasswd
+ andalso CharVector.all Char.isGraph newpasswd) then
+ ("Invalid password",
+ SOME "Invalid password; may only contain printable, non-space characters")
+ else
+ case Vmail.portalpasswd {domain = domain, user = emailUser,
+ oldpasswd = oldpasswd, newpasswd = newpasswd} of
+ NONE => ("Changed password of mailbox " ^ emailUser ^ "@" ^ domain,
+ NONE)
+ | SOME msg => ("Error changing mailbox password for " ^ emailUser ^ "@" ^ domain ^ ": " ^ msg,
+ SOME msg))
+ (fn () => ())
+
| MsgRmMailbox {domain, user = emailUser} =>
doIt (fn () =>
if not (Domain.yourDomain domain) then
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"),
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