86 lines
2 KiB
C
86 lines
2 KiB
C
|
|
#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);
|
||
|
|
}
|