Oh, oh. Now that this sits before the insert_messages() call, you are
correct that a good address will be dropped if there is a bad address. The
former behavior was that the good address would receive mail, but the
sender would be told of a failure on account of the bad address.

Good catch. What's your suggestion for fixing it?

Instead of this check before insert_messages, the following should do the trick:


Index: pipe.c
===================================================================
RCS file: /cvsroot-dbmail/dbmail/pipe.c,v
retrieving revision 1.128.2.2
diff -r1.128.2.2 pipe.c
550a551,554
>               /* If there was already an error during resolving,
>                    let's skip this delivery. */
>               if (delivery->dsn.class != DSN_CLASS_OK) continue;
>


This will prevent unnecessary insertion attempts. If a delivery gets FAIL status during resolving, it won't get overwritten anymore with TEMP_FAIL in insert_messages. This will cause the call to dsn_user_worstcase_list in main.c:freeall: to return a correct FAIL.

Best regards,
Michael

Reply via email to