| #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); |
| } |