Ken A wrote:
thanks! -e did it.

correction.. sendmail says EX_NOPERM is a permanent error, and issues it's own DSN immediately. "dsn=5.0.0, stat=Insufficient permission".
Ken


Ken

pod wrote:
"KA" == Ken A <[EMAIL PROTECTED]> writes:

    KA> I'm testing deliver with sendmail and fs quotas.

    KA> On an over quota condition, deliver accepts the mail, deletes it,
    KA> then issues a MDN immediately.

KA> Is there a way to get deliver to soft fail like procmail does with
    KA> a 400 error and queue the mail, then let sendmail handle the MDN,
    KA> following it's "confTO_QUEUEWARN" and "confTO_QUEUERETURN" ?

Last time I looked at deliver it seemed like there were very few
conditions it considered as a temporary failure and thus for it to return
EX_TEMPFAIL.  I also was considering over-quota conditions (also
filesystem quotas).

The '-e' option to deliver will, possibly by accidental side-effect, avoid
calling the deliver-generated bounce code.  Instead deliver will write
some error text on stderr and exit EX_NOPERM.

The code in question is src/deliver/deliver.c lines 810 -- 835 which
occurs right after attempting to save the message (i.e. ret is the return
code from the save attempt).  The '-e' option is what sets
stderr_rejection.


Tried with -e, but sendmail says EX_NOPERM is a permanent error, and issues it's own DSN immediately. "dsn=5.0.0, stat=Insufficient permission". :-(

Ken



    if (ret < 0) {
        const char *error, *msgid;
        bool syntax, temporary_error;
        int ret;

        error = mail_storage_get_last_error(storage, &syntax,
                            &temporary_error);
        if (temporary_error)
            return EX_TEMPFAIL;

        msgid = mail_get_first_header(mail, "Message-ID");
        i_info("msgid=%s: Rejected: %s",
               msgid == NULL ? "" : str_sanitize(msgid, 80),
               str_sanitize(error, 512));

        /* we'll have to reply with permanent failure */
        if (stderr_rejection) {
            fprintf(stderr, "%s\n", error);
            return EX_NOPERM;
        }
        ret = mail_send_rejection(mail, destination, error);
        if (ret != 0)
            return ret < 0 ? EX_TEMPFAIL : ret;
        /* ok, rejection sent */
    }

As Timo has said elsewhere "deliver could use a rewrite some day..".







--
Ken Anderson
Pacific.Net

Reply via email to