Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

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