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