xref: /plan9-contrib/sys/src/cmd/upas/ml/mlowner.c (revision 86a363cef6b6fa09d9392d8587eef2e5ef8d657e)
19a747e4fSDavid du Colombier #include "common.h"
29a747e4fSDavid du Colombier #include "dat.h"
39a747e4fSDavid du Colombier 
49a747e4fSDavid du Colombier Biobuf in;
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier String *from;
79a747e4fSDavid du Colombier String *sender;
89a747e4fSDavid du Colombier 
99a747e4fSDavid du Colombier 
109a747e4fSDavid du Colombier void
usage(void)119a747e4fSDavid du Colombier usage(void)
129a747e4fSDavid du Colombier {
139a747e4fSDavid du Colombier 	fprint(2, "usage: %s address-list-file listname\n", argv0);
149a747e4fSDavid du Colombier 	exits("usage");
159a747e4fSDavid du Colombier }
169a747e4fSDavid du Colombier 
179a747e4fSDavid du Colombier void
main(int argc,char ** argv)189a747e4fSDavid du Colombier main(int argc, char **argv)
199a747e4fSDavid du Colombier {
209a747e4fSDavid du Colombier 	String *msg;
219a747e4fSDavid du Colombier 	char *alfile;
229a747e4fSDavid du Colombier 	char *listname;
239a747e4fSDavid du Colombier 
249a747e4fSDavid du Colombier 	ARGBEGIN{
259a747e4fSDavid du Colombier 	}ARGEND;
269a747e4fSDavid du Colombier 
279a747e4fSDavid du Colombier 	rfork(RFENVG|RFREND);
289a747e4fSDavid du Colombier 
299a747e4fSDavid du Colombier 	if(argc < 2)
309a747e4fSDavid du Colombier 		usage();
319a747e4fSDavid du Colombier 	alfile = argv[0];
329a747e4fSDavid du Colombier 	listname = argv[1];
339a747e4fSDavid du Colombier 
349a747e4fSDavid du Colombier 	if(Binit(&in, 0, OREAD) < 0)
359a747e4fSDavid du Colombier 		sysfatal("opening input: %r");
369a747e4fSDavid du Colombier 
379a747e4fSDavid du Colombier 	msg = s_new();
389a747e4fSDavid du Colombier 
399a747e4fSDavid du Colombier 	/* discard the 'From ' line */
409a747e4fSDavid du Colombier 	if(s_read_line(&in, msg) == nil)
419a747e4fSDavid du Colombier 		sysfatal("reading input: %r");
429a747e4fSDavid du Colombier 
43*86a363ceSDavid du Colombier 	/* read up to the first 128k of the message.  more is ridiculous */
449a747e4fSDavid du Colombier 	if(s_read(&in, s_restart(msg), 128*1024) <= 0)
459a747e4fSDavid du Colombier 		sysfatal("reading input: %r");
469a747e4fSDavid du Colombier 
479a747e4fSDavid du Colombier 	/* parse the header */
489a747e4fSDavid du Colombier 	yyinit(s_to_c(msg), s_len(msg));
499a747e4fSDavid du Colombier 	yyparse();
509a747e4fSDavid du Colombier 
519a747e4fSDavid du Colombier 	/* get the sender */
529a747e4fSDavid du Colombier 	getaddrs();
539a747e4fSDavid du Colombier 	if(from == nil)
549a747e4fSDavid du Colombier 		from = sender;
559a747e4fSDavid du Colombier 	if(from == nil)
569a747e4fSDavid du Colombier 		sysfatal("message must contain From: or Sender:");
579a747e4fSDavid du Colombier 
589a747e4fSDavid du Colombier 	if(strstr(s_to_c(msg), "remove")||strstr(s_to_c(msg), "unsubscribe"))
599a747e4fSDavid du Colombier 		writeaddr(alfile, s_to_c(from), 1, listname);
609a747e4fSDavid du Colombier 	else if(strstr(s_to_c(msg), "subscribe"))
619a747e4fSDavid du Colombier 		writeaddr(alfile, s_to_c(from), 0, listname);
629a747e4fSDavid du Colombier 
639a747e4fSDavid du Colombier 	exits(0);
649a747e4fSDavid du Colombier }
65