X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/0868840155aca9662f97318b114a07ae4c8319d6..1d3ef80ec822ea0fa241eb5485549ca7417e787f:/src/mail/vmail.sml diff --git a/src/mail/vmail.sml b/src/mail/vmail.sml index a1f8648..f5010eb 100644 --- a/src/mail/vmail.sml +++ b/src/mail/vmail.sml @@ -22,6 +22,31 @@ structure Vmail :> VMAIL = struct fun rebuild () = Slave.shell [Config.Courier.postReload] +datatype listing = + Error of string + | Listing of string list + +fun list domain = + let + val inf = TextIO.openIn (OS.Path.joinDirFile {dir = Config.Courier.userdbDir, + file = domain}) + + fun loop users = + case TextIO.inputLine inf of + NONE => Listing (rev users) + | SOME line => + case String.tokens Char.isSpace line of + [addr, _] => + (case String.fields (fn ch => ch = #"@") addr of + [user, _] => loop (user :: users) + | _ => Error "Invalid e-mail address format in database") + | _ => Error "Invalid entry in database" + in + loop [] + before TextIO.closeIn inf + end + handle IO.Io _ => Listing [] + fun add {domain, requester, user, passwd, mailbox} = let val udb = Posix.SysDB.getpwnam requester