Picking mailing list vhosts out of Domtool data
authorAdam Chlipala <adamc@hcoop.net>
Sat, 8 Dec 2007 22:36:51 +0000 (22:36 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sat, 8 Dec 2007 22:36:51 +0000 (22:36 +0000)
list.mlt
mailinglist.sml
util.sml

index 9927b9a..aceffde 100644 (file)
--- a/list.mlt
+++ b/list.mlt
@@ -28,11 +28,11 @@ elseif $"cmd" = "open" then
 </table>
 
 <% if admin then
-       val (user, dom) = MailingList.listWebHost (#data req) %>
+       val vitals = MailingList.listWebHost (#data req) %>
        <br>
        <a href="list?mod=<% #id req %>">[Modify]</a>
        <a href="list?del=<% #id req %>">[Delete]</a><br>
-       To set up, run: <tt>listnew <% user %>&nbsp;<% dom %>&nbsp;<% name %>&nbsp;<% Util.randomPassword () %></tt>
+       To set up, run: <tt>listnew <% #user vitals %>&nbsp;<% #dom vitals %>&nbsp;<% #vhost vitals %>&nbsp;<% name %>&nbsp;<% Util.randomPassword () %></tt>
 <% end %>
 
 <%     end
index ca8b95d..fbc317a 100644 (file)
@@ -19,20 +19,22 @@ fun listWebHost name =
     case String.tokens (fn ch => ch = #"@") name of
        [user, dom] =>
        let
-           val mmf = Util.domainDir dom ^ "/.mailman"
+           val mmf = Util.domainDir dom ^ "/mailman"
        in
            if Posix.FileSys.access (mmf, []) then
                let
                    val inf = TextIO.openIn mmf
                in
                    (case TextIO.inputLine inf of
-                        NONE => (user, dom)
+                        NONE => {user = user, dom = dom, vhost = "<<<No darned data in " ^ mmf ^ ">>>"}
                       | SOME line =>
-                        (user, String.substring (line, 0, size line - 1)))
+                        case String.tokens (fn ch => Char.isSpace ch orelse ch = #":" orelse ch = #"'" orelse ch = #",") line of
+                            [vhost, _] => {user = user, dom = dom, vhost = vhost}
+                          | _ => {user = user, dom = dom, vhost = "<<<Parse failure in " ^ mmf ^ ">>>"})
                    before TextIO.closeIn inf
-               end handle _ => (user, dom)
+               end handle _ => {user = user, dom = dom, vhost = "<<<A darn old exception reading " ^ mmf ^ ">>>"}
            else
-               (user, dom)
+               {user = user, dom = dom, vhost = dom}
        end
       | _ => raise (Fail "Bad mailing list name")
 
index f1bdcbb..ee6c872 100644 (file)
--- a/util.sml
+++ b/util.sml
@@ -64,7 +64,7 @@ fun init () = rnd := Random.rand (SysWord.toInt (Posix.Process.pidToWord (Posix.
 fun randomPassword () = Int.toString (Int.abs (Random.randInt (!rnd)))
 
 fun domainDir dom =
-    String.concatWith "/" ("/etc/domains" :: String.fields (fn ch => ch = #".") dom)
+    String.concatWith "/" ("/afs/hcoop.net/common/etc/domtool/nodes/deleuze" :: List.rev (String.fields (fn ch => ch = #".") dom))
 
 fun readFile fname =
     let