Monday's patch left dbmail-smtp with a segfault for any delivery besides
"normal" due to not checking if normal was selected before calling
mail_adr_list() and passing a NULL for the first option. This patch adds a
test to make sure that "normal" has been selected before the function call.
Incidentally, mail_adr_list() should probably do some input validation so as
not to crash even if called with NULL arguments... I'll work up a patch for
that this evening.
Ilja, would it be easier if I started posting patches to SourceForge again?
Aaron
--- dbmail-2.0rc1-fixes/main.c 2004-02-10 01:46:35.000000000 -0800
+++ dbmail-2.0rc2-fixes/main.c 2004-02-11 10:45:42.000000000 -0800
@@ -217,26 +217,30 @@
if (returnpath.total_nodes == 0)
trace(TRACE_DEBUG, "main(): no return path found.");
- /* parse for destination addresses */
- trace(TRACE_DEBUG, "main(): scanning for [%s]",
- deliver_to_header);
- if (mail_adr_list(deliver_to_header, &users, &mimelist) !=0)
- trace(TRACE_STOP, "main(): scanner found no email addresses (scanned for %s)",
- deliver_to_header);
-
- /* Loop through the users list, moving the entries into the dsnusers list. */
- for(tmp = list_getstart(&users); tmp != NULL; tmp = tmp->nextnode)
+ /* If the NORMAL delivery mode has been selected... */
+ if (deliver_to_header)
{
- deliver_to_user_t dsnuser;
- char *tmpaddr;
-
- tmpaddr = (char *)tmp->data;
-
- dsnuser_init(&dsnuser);
- dsnuser.address = tmpaddr;
-
- list_nodeadd(&dsnusers, &dsnuser, sizeof(deliver_to_user_t));
-
+ /* parse for destination addresses */
+ trace(TRACE_DEBUG, "main(): scanning for [%s]",
+ deliver_to_header);
+ if (mail_adr_list(deliver_to_header, &users, &mimelist) !=0)
+ trace(TRACE_STOP, "main(): scanner found no email addresses (scanned for %s)",
+ deliver_to_header);
+
+ /* Loop through the users list, moving the entries into the dsnusers list. */
+ for(tmp = list_getstart(&users); tmp != NULL; tmp = tmp->nextnode)
+ {
+ deliver_to_user_t dsnuser;
+ char *tmpaddr;
+
+ tmpaddr = (char *)tmp->data;
+
+ dsnuser_init(&dsnuser);
+ dsnuser.address = tmpaddr;
+
+ list_nodeadd(&dsnusers, &dsnuser, sizeof(deliver_to_user_t));
+
+ }
}
/* inserting messages into the database */