f781964d5501de490917b58b09541e508831ca25
1 fun isMember (list
, addr
) =
3 val proc
= Unix
.execute ("/usr/sbin/find_member", ["-l", list
, addr
])
5 (case TextIO.inputLine (Unix
.textInstreamOf proc
) of
8 before ignore (Unix
.reap proc
)
11 fun isIdent ch
= Char.isLower ch
orelse Char.isDigit ch
14 size s
> 0 andalso size s
< 20 andalso List.all
isIdent (String.explode s
)
17 size s
> 0 andalso size s
< 100 andalso List.all
validHost (String.fields (fn ch
=> ch
= #
".") s
)
19 fun validEmailUser s
=
20 size s
> 0 andalso size s
< 50 andalso List.all
21 (fn ch
=> Char.isAlphaNum ch
orelse ch
= #
"." orelse ch
= #
"_" orelse ch
= #
"-" orelse ch
= #
"+")
25 (case String.fields (fn ch
=> ch
= #
"@") s
of
26 [user
, host
] => validEmailUser user
andalso validDomain host
30 case CommandLine
.arguments () of
32 if list
<> "hcoop-discuss" andalso list
<> "hcoop-misc" then
33 (print
"Bad mailing list name\n";
35 else if not (validEmail addr
) then
36 (print
"Invalid e-mail address\n";
40 if isMember (list
, addr
) then
45 if isMember (list
, addr
) then
48 OS
.Process
.system (String.concat
["echo ", addr
, " | /usr/sbin/add_members -r - ", list
])
50 if isMember (list
, addr
) then
51 OS
.Process
.system (String.concat
["/usr/sbin/remove_members ", list
, " ", addr
])
54 | _
=> (print ("Invalid command " ^ cmd ^
"\n");
56 | _
=> (print
"Bad command-line arguments\n";
59 val _
= OS
.Process
.exit (main ())