X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/9ffe2f0fea48f1e2fa6a30b6a79b975b4a6f7671..2fc6b0dd10a94cf365b48df7fe6b0518e5dabdd1:/src/mail/vmail.sml diff --git a/src/mail/vmail.sml b/src/mail/vmail.sml index 5801cb9..39566dd 100644 --- a/src/mail/vmail.sml +++ b/src/mail/vmail.sml @@ -24,7 +24,7 @@ fun rebuild () = Slave.shell [Config.Courier.postReload] datatype listing = Error of string - | Listing of string list + | Listing of {user : string, mailbox : string} list fun list domain = let @@ -36,9 +36,18 @@ fun list domain = NONE => Listing (rev users) | SOME line => case String.tokens Char.isSpace line of - [addr, _] => + [addr, fields] => (case String.fields (fn ch => ch = #"@") addr of - [user, _] => loop (user :: users) + [user, _] => + let + fun parseFields fields = + case fields of + "mail" :: mailbox :: _ => loop ({user = user, mailbox = mailbox} :: users) + | _ :: _ :: rest => parseFields rest + | _ => Error "Invalid fields in database" + in + parseFields (String.fields (fn ch => ch = #"|" orelse ch = #"=") fields) + end | _ => Error "Invalid e-mail address format in database") | _ => Error "Invalid entry in database" in