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 }