Blame


1 5cdb1798 2005-10-29 devnull #include "dat.h"
2 b5f65921 2006-02-11 devnull #include <thread.h>
3 5cdb1798 2005-10-29 devnull #include "common.h"
4 5cdb1798 2005-10-29 devnull
5 5cdb1798 2005-10-29 devnull void
6 5cdb1798 2005-10-29 devnull usage(void)
7 5cdb1798 2005-10-29 devnull {
8 5cdb1798 2005-10-29 devnull fprint(2, "usage: %s recipient fromaddr-file mbox\n", argv0);
9 b5f65921 2006-02-11 devnull threadexitsall("usage");
10 5cdb1798 2005-10-29 devnull }
11 5cdb1798 2005-10-29 devnull
12 5cdb1798 2005-10-29 devnull void
13 5cdb1798 2005-10-29 devnull main(int argc, char **argv)
14 5cdb1798 2005-10-29 devnull {
15 5cdb1798 2005-10-29 devnull int fd;
16 5cdb1798 2005-10-29 devnull char now[30];
17 5cdb1798 2005-10-29 devnull Addr *a;
18 5cdb1798 2005-10-29 devnull char *deliveredto;
19 5cdb1798 2005-10-29 devnull Mlock *l;
20 5cdb1798 2005-10-29 devnull int bytes;
21 5cdb1798 2005-10-29 devnull
22 5cdb1798 2005-10-29 devnull ARGBEGIN{
23 5cdb1798 2005-10-29 devnull }ARGEND;
24 5cdb1798 2005-10-29 devnull
25 5cdb1798 2005-10-29 devnull if(argc != 3)
26 5cdb1798 2005-10-29 devnull usage();
27 5cdb1798 2005-10-29 devnull
28 5cdb1798 2005-10-29 devnull deliveredto = strrchr(argv[0], '!');
29 5cdb1798 2005-10-29 devnull if(deliveredto == nil)
30 5cdb1798 2005-10-29 devnull deliveredto = argv[0];
31 5cdb1798 2005-10-29 devnull else
32 5cdb1798 2005-10-29 devnull deliveredto++;
33 5cdb1798 2005-10-29 devnull a = readaddrs(argv[1], nil);
34 5cdb1798 2005-10-29 devnull if(a == nil)
35 5cdb1798 2005-10-29 devnull sysfatal("missing from address");
36 5cdb1798 2005-10-29 devnull
37 5cdb1798 2005-10-29 devnull l = syslock(argv[2]);
38 5cdb1798 2005-10-29 devnull
39 5cdb1798 2005-10-29 devnull /* append to mbox */
40 5cdb1798 2005-10-29 devnull fd = open(argv[2], OWRITE);
41 5cdb1798 2005-10-29 devnull if(fd < 0)
42 5cdb1798 2005-10-29 devnull sysfatal("opening mailbox: %r");
43 5cdb1798 2005-10-29 devnull seek(fd, 0, 2);
44 5cdb1798 2005-10-29 devnull strncpy(now, ctime(time(0)), sizeof(now));
45 5cdb1798 2005-10-29 devnull now[28] = 0;
46 5cdb1798 2005-10-29 devnull if(fprint(fd, "From %s %s\n", a->val, now) < 0)
47 5cdb1798 2005-10-29 devnull sysfatal("writing mailbox: %r");
48 5cdb1798 2005-10-29 devnull
49 5cdb1798 2005-10-29 devnull /* copy message handles escapes and any needed new lines */
50 5cdb1798 2005-10-29 devnull bytes = appendfiletombox(0, fd);
51 5cdb1798 2005-10-29 devnull if(bytes < 0)
52 5cdb1798 2005-10-29 devnull sysfatal("writing mailbox: %r");
53 5cdb1798 2005-10-29 devnull
54 5cdb1798 2005-10-29 devnull close(fd);
55 5cdb1798 2005-10-29 devnull sysunlock(l);
56 5cdb1798 2005-10-29 devnull
57 5cdb1798 2005-10-29 devnull /* log it */
58 5cdb1798 2005-10-29 devnull syslog(0, "mail", "delivered %s From %s %s (%s) %d", deliveredto,
59 5cdb1798 2005-10-29 devnull a->val, now, argv[0], bytes);
60 5cdb1798 2005-10-29 devnull exits(0);
61 5cdb1798 2005-10-29 devnull }