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