xref: /plan9/sys/src/cmd/upas/send/log.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1 #include "common.h"
2 #include "send.h"
3 
4 /* configuration */
5 #define LOGBiobuf "log/status"
6 
7 /* log mail delivery */
8 extern void
logdelivery(dest * list,char * rcvr,message * mp)9 logdelivery(dest *list, char *rcvr, message *mp)
10 {
11 	dest *parent;
12 	String *srcvr, *sender;
13 
14 	srcvr = unescapespecial(s_copy(rcvr));
15 	sender = unescapespecial(s_clone(mp->sender));
16 
17 	for(parent=list; parent->parent!=0; parent=parent->parent)
18 		;
19 	if(parent!=list && strcmp(s_to_c(parent->addr), s_to_c(srcvr))!=0)
20 		syslog(0, "mail", "delivered %s From %.256s %.256s (%.256s) %d",
21 			rcvr,
22 			s_to_c(sender), s_to_c(mp->date),
23 			s_to_c(parent->addr), mp->size);
24 	else
25 		syslog(0, "mail", "delivered %s From %.256s %.256s %d", s_to_c(srcvr),
26 			s_to_c(sender), s_to_c(mp->date), mp->size);
27 	s_free(srcvr);
28 	s_free(sender);
29 }
30 
31 /* log mail forwarding */
32 extern void
loglist(dest * list,message * mp,char * tag)33 loglist(dest *list, message *mp, char *tag)
34 {
35 	dest *next;
36 	dest *parent;
37 	String *srcvr, *sender;
38 
39 	sender = unescapespecial(s_clone(mp->sender));
40 
41 	for(next=d_rm(&list); next != 0; next = d_rm(&list)) {
42 		for(parent=next; parent->parent!=0; parent=parent->parent)
43 			;
44 		srcvr = unescapespecial(s_clone(next->addr));
45 		if(parent!=next)
46 			syslog(0, "mail", "%s %.256s From %.256s %.256s (%.256s) %d",
47 				tag,
48 				s_to_c(srcvr), s_to_c(sender),
49 				s_to_c(mp->date), s_to_c(parent->addr), mp->size);
50 		else
51 			syslog(0, "mail", "%s %.256s From %.256s %.256s %d", tag,
52 				s_to_c(srcvr), s_to_c(sender),
53 				s_to_c(mp->date), mp->size);
54 		s_free(srcvr);
55 	}
56 	s_free(sender);
57 }
58 
59 /* log a mail refusal */
60 extern void
logrefusal(dest * dp,message * mp,char * msg)61 logrefusal(dest *dp, message *mp, char *msg)
62 {
63 	char buf[2048];
64 	char *cp, *ep;
65 	String *sender, *srcvr;
66 
67 	srcvr = unescapespecial(s_clone(dp->addr));
68 	sender = unescapespecial(s_clone(mp->sender));
69 
70 	sprint(buf, "error %.256s From %.256s %.256s\nerror+ ", s_to_c(srcvr),
71 		s_to_c(sender), s_to_c(mp->date));
72 	s_free(srcvr);
73 	s_free(sender);
74 	cp = buf + strlen(buf);
75 	ep = buf + sizeof(buf) - sizeof("error + ");
76 	while(*msg && cp<ep) {
77 		*cp++ = *msg;
78 		if (*msg++ == '\n') {
79 			strcpy(cp, "error+ ");
80 			cp += sizeof("error+ ") - 1;
81 		}
82 	}
83 	*cp = 0;
84 	syslog(0, "mail", "%s", buf);
85 }
86