plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

log.c (2090B)


      1 #include "common.h"
      2 #include "send.h"
      3 
      4 /* configuration */
      5 #define LOGBiobuf "log/status"
      6 
      7 /* log mail delivery */
      8 extern void
      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
     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
     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 }