Blame


1 5cdb1798 2005-10-29 devnull #include "common.h"
2 5cdb1798 2005-10-29 devnull #include "dat.h"
3 5cdb1798 2005-10-29 devnull
4 5cdb1798 2005-10-29 devnull Biobuf in;
5 5cdb1798 2005-10-29 devnull
6 5cdb1798 2005-10-29 devnull String *from;
7 5cdb1798 2005-10-29 devnull String *sender;
8 5cdb1798 2005-10-29 devnull
9 5cdb1798 2005-10-29 devnull
10 5cdb1798 2005-10-29 devnull void
11 5cdb1798 2005-10-29 devnull usage(void)
12 5cdb1798 2005-10-29 devnull {
13 5cdb1798 2005-10-29 devnull fprint(2, "usage: %s address-list-file listname\n", argv0);
14 5cdb1798 2005-10-29 devnull exits("usage");
15 5cdb1798 2005-10-29 devnull }
16 5cdb1798 2005-10-29 devnull
17 5cdb1798 2005-10-29 devnull void
18 5cdb1798 2005-10-29 devnull main(int argc, char **argv)
19 5cdb1798 2005-10-29 devnull {
20 5cdb1798 2005-10-29 devnull String *msg;
21 5cdb1798 2005-10-29 devnull char *alfile;
22 5cdb1798 2005-10-29 devnull char *listname;
23 5cdb1798 2005-10-29 devnull
24 5cdb1798 2005-10-29 devnull ARGBEGIN{
25 5cdb1798 2005-10-29 devnull }ARGEND;
26 5cdb1798 2005-10-29 devnull
27 b5f65921 2006-02-11 devnull rfork(RFENVG);
28 5cdb1798 2005-10-29 devnull
29 5cdb1798 2005-10-29 devnull if(argc < 2)
30 5cdb1798 2005-10-29 devnull usage();
31 5cdb1798 2005-10-29 devnull alfile = argv[0];
32 5cdb1798 2005-10-29 devnull listname = argv[1];
33 5cdb1798 2005-10-29 devnull
34 5cdb1798 2005-10-29 devnull if(Binit(&in, 0, OREAD) < 0)
35 5cdb1798 2005-10-29 devnull sysfatal("opening input: %r");
36 5cdb1798 2005-10-29 devnull
37 5cdb1798 2005-10-29 devnull msg = s_new();
38 5cdb1798 2005-10-29 devnull
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");
42 5cdb1798 2005-10-29 devnull
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");
46 5cdb1798 2005-10-29 devnull
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();
50 5cdb1798 2005-10-29 devnull
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:");
57 5cdb1798 2005-10-29 devnull
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);
62 5cdb1798 2005-10-29 devnull
63 5cdb1798 2005-10-29 devnull exits(0);
64 5cdb1798 2005-10-29 devnull }