| #include "common.h" | 
 | #include "send.h" | 
 |  | 
 | /* configuration */ | 
 | #define LOGBiobuf "log/status" | 
 |  | 
 | /* log mail delivery */ | 
 | extern void | 
 | logdelivery(dest *list, char *rcvr, message *mp) | 
 | { | 
 | 	dest *parent; | 
 | 	String *srcvr, *sender; | 
 |  | 
 | 	srcvr = unescapespecial(s_copy(rcvr)); | 
 | 	sender = unescapespecial(s_clone(mp->sender)); | 
 |  | 
 | 	for(parent=list; parent->parent!=0; parent=parent->parent) | 
 | 		; | 
 | 	if(parent!=list && strcmp(s_to_c(parent->addr), s_to_c(srcvr))!=0) | 
 | 		syslog(0, "mail", "delivered %s From %.256s %.256s (%.256s) %d", | 
 | 			rcvr, | 
 | 			s_to_c(sender), s_to_c(mp->date), | 
 | 			s_to_c(parent->addr), mp->size); | 
 | 	else | 
 | 		syslog(0, "mail", "delivered %s From %.256s %.256s %d", s_to_c(srcvr), | 
 | 			s_to_c(sender), s_to_c(mp->date), mp->size); | 
 | 	s_free(srcvr); | 
 | 	s_free(sender); | 
 | } | 
 |  | 
 | /* log mail forwarding */ | 
 | extern void | 
 | loglist(dest *list, message *mp, char *tag) | 
 | { | 
 | 	dest *next; | 
 | 	dest *parent; | 
 | 	String *srcvr, *sender; | 
 |  | 
 | 	sender = unescapespecial(s_clone(mp->sender)); | 
 |  | 
 | 	for(next=d_rm(&list); next != 0; next = d_rm(&list)) { | 
 | 		for(parent=next; parent->parent!=0; parent=parent->parent) | 
 | 			; | 
 | 		srcvr = unescapespecial(s_clone(next->addr)); | 
 | 		if(parent!=next) | 
 | 			syslog(0, "mail", "%s %.256s From %.256s %.256s (%.256s) %d", | 
 | 				tag, | 
 | 				s_to_c(srcvr), s_to_c(sender), | 
 | 				s_to_c(mp->date), s_to_c(parent->addr), mp->size); | 
 | 		else | 
 | 			syslog(0, "mail", "%s %.256s From %.256s %.256s %d", tag, | 
 | 				s_to_c(srcvr), s_to_c(sender), | 
 | 				s_to_c(mp->date), mp->size); | 
 | 		s_free(srcvr); | 
 | 	} | 
 | 	s_free(sender); | 
 | } | 
 |  | 
 | /* log a mail refusal */ | 
 | extern void | 
 | logrefusal(dest *dp, message *mp, char *msg) | 
 | { | 
 | 	char buf[2048]; | 
 | 	char *cp, *ep; | 
 | 	String *sender, *srcvr; | 
 |  | 
 | 	srcvr = unescapespecial(s_clone(dp->addr)); | 
 | 	sender = unescapespecial(s_clone(mp->sender)); | 
 |  | 
 | 	sprint(buf, "error %.256s From %.256s %.256s\nerror+ ", s_to_c(srcvr), | 
 | 		s_to_c(sender), s_to_c(mp->date)); | 
 | 	s_free(srcvr); | 
 | 	s_free(sender); | 
 | 	cp = buf + strlen(buf); | 
 | 	ep = buf + sizeof(buf) - sizeof("error + "); | 
 | 	while(*msg && cp<ep) { | 
 | 		*cp++ = *msg; | 
 | 		if (*msg++ == '\n') { | 
 | 			strcpy(cp, "error+ "); | 
 | 			cp += sizeof("error+ ") - 1; | 
 | 		} | 
 | 	} | 
 | 	*cp = 0; | 
 | 	syslog(0, "mail", "%s", buf); | 
 | } |