xref: /plan9/sys/src/cmd/upas/send/log.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include "common.h"
23e12c5d1SDavid du Colombier #include "send.h"
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier /* configuration */
53e12c5d1SDavid du Colombier #define LOGBiobuf "log/status"
63e12c5d1SDavid du Colombier 
73e12c5d1SDavid du Colombier /* log mail delivery */
83e12c5d1SDavid du Colombier extern void
logdelivery(dest * list,char * rcvr,message * mp)93e12c5d1SDavid du Colombier logdelivery(dest *list, char *rcvr, message *mp)
103e12c5d1SDavid du Colombier {
113e12c5d1SDavid du Colombier 	dest *parent;
12*7dd7cddfSDavid du Colombier 	String *srcvr, *sender;
13*7dd7cddfSDavid du Colombier 
14*7dd7cddfSDavid du Colombier 	srcvr = unescapespecial(s_copy(rcvr));
15*7dd7cddfSDavid du Colombier 	sender = unescapespecial(s_clone(mp->sender));
163e12c5d1SDavid du Colombier 
173e12c5d1SDavid du Colombier 	for(parent=list; parent->parent!=0; parent=parent->parent)
183e12c5d1SDavid du Colombier 		;
19*7dd7cddfSDavid du Colombier 	if(parent!=list && strcmp(s_to_c(parent->addr), s_to_c(srcvr))!=0)
20bd389b36SDavid du Colombier 		syslog(0, "mail", "delivered %s From %.256s %.256s (%.256s) %d",
213e12c5d1SDavid du Colombier 			rcvr,
22*7dd7cddfSDavid du Colombier 			s_to_c(sender), s_to_c(mp->date),
233e12c5d1SDavid du Colombier 			s_to_c(parent->addr), mp->size);
243e12c5d1SDavid du Colombier 	else
25*7dd7cddfSDavid du Colombier 		syslog(0, "mail", "delivered %s From %.256s %.256s %d", s_to_c(srcvr),
26*7dd7cddfSDavid du Colombier 			s_to_c(sender), s_to_c(mp->date), mp->size);
27*7dd7cddfSDavid du Colombier 	s_free(srcvr);
28*7dd7cddfSDavid du Colombier 	s_free(sender);
293e12c5d1SDavid du Colombier }
303e12c5d1SDavid du Colombier 
313e12c5d1SDavid du Colombier /* log mail forwarding */
323e12c5d1SDavid du Colombier extern void
loglist(dest * list,message * mp,char * tag)333e12c5d1SDavid du Colombier loglist(dest *list, message *mp, char *tag)
343e12c5d1SDavid du Colombier {
353e12c5d1SDavid du Colombier 	dest *next;
363e12c5d1SDavid du Colombier 	dest *parent;
37*7dd7cddfSDavid du Colombier 	String *srcvr, *sender;
38*7dd7cddfSDavid du Colombier 
39*7dd7cddfSDavid du Colombier 	sender = unescapespecial(s_clone(mp->sender));
403e12c5d1SDavid du Colombier 
413e12c5d1SDavid du Colombier 	for(next=d_rm(&list); next != 0; next = d_rm(&list)) {
423e12c5d1SDavid du Colombier 		for(parent=next; parent->parent!=0; parent=parent->parent)
433e12c5d1SDavid du Colombier 			;
44*7dd7cddfSDavid du Colombier 		srcvr = unescapespecial(s_clone(next->addr));
453e12c5d1SDavid du Colombier 		if(parent!=next)
46bd389b36SDavid du Colombier 			syslog(0, "mail", "%s %.256s From %.256s %.256s (%.256s) %d",
473e12c5d1SDavid du Colombier 				tag,
48*7dd7cddfSDavid du Colombier 				s_to_c(srcvr), s_to_c(sender),
493e12c5d1SDavid du Colombier 				s_to_c(mp->date), s_to_c(parent->addr), mp->size);
503e12c5d1SDavid du Colombier 		else
51*7dd7cddfSDavid du Colombier 			syslog(0, "mail", "%s %.256s From %.256s %.256s %d", tag,
52*7dd7cddfSDavid du Colombier 				s_to_c(srcvr), s_to_c(sender),
533e12c5d1SDavid du Colombier 				s_to_c(mp->date), mp->size);
54*7dd7cddfSDavid du Colombier 		s_free(srcvr);
553e12c5d1SDavid du Colombier 	}
56*7dd7cddfSDavid du Colombier 	s_free(sender);
573e12c5d1SDavid du Colombier }
583e12c5d1SDavid du Colombier 
593e12c5d1SDavid du Colombier /* log a mail refusal */
603e12c5d1SDavid du Colombier extern void
logrefusal(dest * dp,message * mp,char * msg)613e12c5d1SDavid du Colombier logrefusal(dest *dp, message *mp, char *msg)
623e12c5d1SDavid du Colombier {
633e12c5d1SDavid du Colombier 	char buf[2048];
643e12c5d1SDavid du Colombier 	char *cp, *ep;
65*7dd7cddfSDavid du Colombier 	String *sender, *srcvr;
663e12c5d1SDavid du Colombier 
67*7dd7cddfSDavid du Colombier 	srcvr = unescapespecial(s_clone(dp->addr));
68*7dd7cddfSDavid du Colombier 	sender = unescapespecial(s_clone(mp->sender));
69*7dd7cddfSDavid du Colombier 
70*7dd7cddfSDavid du Colombier 	sprint(buf, "error %.256s From %.256s %.256s\nerror+ ", s_to_c(srcvr),
71*7dd7cddfSDavid du Colombier 		s_to_c(sender), s_to_c(mp->date));
72*7dd7cddfSDavid du Colombier 	s_free(srcvr);
73*7dd7cddfSDavid du Colombier 	s_free(sender);
743e12c5d1SDavid du Colombier 	cp = buf + strlen(buf);
753e12c5d1SDavid du Colombier 	ep = buf + sizeof(buf) - sizeof("error + ");
763e12c5d1SDavid du Colombier 	while(*msg && cp<ep) {
773e12c5d1SDavid du Colombier 		*cp++ = *msg;
783e12c5d1SDavid du Colombier 		if (*msg++ == '\n') {
793e12c5d1SDavid du Colombier 			strcpy(cp, "error+ ");
803e12c5d1SDavid du Colombier 			cp += sizeof("error+ ") - 1;
813e12c5d1SDavid du Colombier 		}
823e12c5d1SDavid du Colombier 	}
833e12c5d1SDavid du Colombier 	*cp = 0;
84bd389b36SDavid du Colombier 	syslog(0, "mail", "%s", buf);
853e12c5d1SDavid du Colombier }
86