On Fri, Jul 09, 2010 at 08:56:38PM +0200, Philipp Leusmann wrote:

> It would be nice, if somebody else, also running a Debian Lenny (it's lenny, 
> not etch) system could verify this behavior.
> 
> Anybody here?
> 
> I will also reinstall postfix and try again.

If it is compiled with debugging symbols, you could try to single-step
through check_table_result() to see why the "DEFER" case is not matched.

#define STREQUAL(x,y,l) (strncasecmp((x), (y), (l)) == 0 && (y)[l] == 0)

    ...

    if (STREQUAL(value, "DEFER", cmd_len)) {
        dsn_split(&dp, "4.7.1", cmd_text);
        return (smtpd_check_reject(state, MAIL_ERROR_POLICY,
                                   var_map_defer_code,
                                   smtpd_dsn_fix(DSN_STATUS(dp.dsn),
                                                 reply_class),
                                   "<%s>: %s rejected: %s",
                                   reply_name, reply_class,
                                   *dp.text ? dp.text : "Access denied"));
    }

So assuming that strncasecmp() is working correctly, the length cmd_len
computed via strcspn() is correct, and your result starts with
"DEFER<SPACE_or_TAB>" (which logs suggest), there is no way to get past
this block and not return before the generic_checks() call lower in the
function.

-- 
        Viktor.

Reply via email to