1 5cdb1798 2005-10-29 devnull #include "common.h"
2 5cdb1798 2005-10-29 devnull #include "dat.h"
4 5cdb1798 2005-10-29 devnull Biobuf in;
6 5cdb1798 2005-10-29 devnull String *from;
7 5cdb1798 2005-10-29 devnull String *sender;
11 5cdb1798 2005-10-29 devnull usage(void)
13 5cdb1798 2005-10-29 devnull fprint(2, "usage: %s address-list-file listname\n", argv0);
14 5cdb1798 2005-10-29 devnull exits("usage");
18 5cdb1798 2005-10-29 devnull main(int argc, char **argv)
20 5cdb1798 2005-10-29 devnull String *msg;
21 5cdb1798 2005-10-29 devnull char *alfile;
22 5cdb1798 2005-10-29 devnull char *listname;
24 5cdb1798 2005-10-29 devnull ARGBEGIN{
27 b5f65921 2006-02-11 devnull rfork(RFENVG);
29 5cdb1798 2005-10-29 devnull if(argc < 2)
31 5cdb1798 2005-10-29 devnull alfile = argv[0];
32 5cdb1798 2005-10-29 devnull listname = argv[1];
34 5cdb1798 2005-10-29 devnull if(Binit(&in, 0, OREAD) < 0)
35 5cdb1798 2005-10-29 devnull sysfatal("opening input: %r");
37 5cdb1798 2005-10-29 devnull msg = s_new();
39 5cdb1798 2005-10-29 devnull /* discard the 'From ' line */
40 5cdb1798 2005-10-29 devnull if(s_read_line(&in, msg) == nil)
41 5cdb1798 2005-10-29 devnull sysfatal("reading input: %r");
43 5cdb1798 2005-10-29 devnull /* read up to the first 128k of the message. more is redculous */
44 5cdb1798 2005-10-29 devnull if(s_read(&in, s_restart(msg), 128*1024) <= 0)
45 5cdb1798 2005-10-29 devnull sysfatal("reading input: %r");
47 5cdb1798 2005-10-29 devnull /* parse the header */
48 5cdb1798 2005-10-29 devnull yyinit(s_to_c(msg), s_len(msg));
49 5cdb1798 2005-10-29 devnull yyparse();
51 5cdb1798 2005-10-29 devnull /* get the sender */
52 5cdb1798 2005-10-29 devnull getaddrs();
53 5cdb1798 2005-10-29 devnull if(from == nil)
54 5cdb1798 2005-10-29 devnull from = sender;
55 5cdb1798 2005-10-29 devnull if(from == nil)
56 5cdb1798 2005-10-29 devnull sysfatal("message must contain From: or Sender:");
58 5cdb1798 2005-10-29 devnull if(strstr(s_to_c(msg), "remove")||strstr(s_to_c(msg), "unsubscribe"))
59 5cdb1798 2005-10-29 devnull writeaddr(alfile, s_to_c(from), 1, listname);
60 5cdb1798 2005-10-29 devnull else if(strstr(s_to_c(msg), "subscribe"))
61 5cdb1798 2005-10-29 devnull writeaddr(alfile, s_to_c(from), 0, listname);
63 5cdb1798 2005-10-29 devnull exits(0);