]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
Fix potential crash when mail to the owner arrives with no From: header.
authorBen Schmidt <none@none>
Mon, 16 Jan 2012 10:30:29 +0000 (21:30 +1100)
committerBen Schmidt <none@none>
Mon, 16 Jan 2012 10:30:29 +0000 (21:30 +1100)
ChangeLog
src/mlmmj-process.c

index 925ed56a3c325f72e58ec0103f91654d76835599..ec978a22b9a014b15455a987605ac0f193493e54 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,4 @@
+ o Fix potential crash when mail to the owner arrives with no From: header
  o Add %originalmail% directive and restore backward compatibility of
    $originalmail$
  o Allow more characters in control and text filenames for substitutions
index d9812ec789181e4073b3ea9d9a608eeae6842547..f2a90ac783d84696a2236b218e07590282a8f86c 100644 (file)
@@ -569,6 +569,30 @@ int main(int argc, char **argv)
        for(i = 0; i < readhdrs[0].valuecount; i++) {
                find_email_adr(readhdrs[0].values[i], &fromemails);
        }
+       /* discard malformed mail with invalid From: unless it's a bounce */
+       if(fromemails.emailcount != 1 &&
+                       (recipextra == NULL ||
+                       strncmp(recipextra, "bounces", 7) != 0)) {
+               for(i = 0; i < fromemails.emailcount; i++)
+                       printf("fromemails.emaillist[%d] = %s\n",
+                                       i, fromemails.emaillist[i]);
+               discardname = concatstr(3, listdir,
+                               "/queue/discarded/", randomstr);
+               log_error(LOG_ARGS, "Discarding %s due to invalid From:",
+                               mailfile);
+               for(i = 0; i < fromemails.emailcount; i++)
+                       log_error(LOG_ARGS, "fromemails.emaillist[%d] = %s\n",
+                                       i, fromemails.emaillist[i]);
+               rename(mailfile, discardname);
+               unlink(donemailname);
+               myfree(donemailname);
+               myfree(discardname);
+               myfree(randomstr);
+               /* TODO: free emailstructs */
+               exit(EXIT_SUCCESS);
+       }
+       maildata[3] = fromemails.emaillist[0];
+
        if (fromemails.emailcount)
                maildata[3] = fromemails.emaillist[0];
 
@@ -757,27 +781,6 @@ int main(int argc, char **argv)
                }
        }
 
-       /* discard malformed mail with invalid From: */
-       if(fromemails.emailcount != 1) {
-               for(i = 0; i < fromemails.emailcount; i++)
-                       printf("fromemails.emaillist[%d] = %s\n",
-                                       i, fromemails.emaillist[i]);
-               discardname = concatstr(3, listdir,
-                               "/queue/discarded/", randomstr);
-               log_error(LOG_ARGS, "Discarding %s due to invalid From:",
-                               mailfile);
-               for(i = 0; i < fromemails.emailcount; i++)
-                       log_error(LOG_ARGS, "fromemails.emaillist[%d] = %s\n",
-                                       i, fromemails.emaillist[i]);
-               rename(mailfile, discardname);
-               unlink(donemailname);
-               myfree(donemailname);
-               myfree(discardname);
-               myfree(randomstr);
-               /* TODO: free emailstructs */
-               exit(EXIT_SUCCESS);
-       }
-
        myfree(delheaders);
 
        if(strcmp(efrom, "") == 0) { /* don't send mails with <> in From