Mercurial > hg > mlmmj
changeset 812:58a2cba0be3e
Fix potential crash when mail to the owner arrives with no From: header.
author | Ben Schmidt |
---|---|
date | Mon, 16 Jan 2012 21:30:29 +1100 |
parents | 262752ddbbf5 |
children | 74d5ebb67b34 |
files | ChangeLog src/mlmmj-process.c |
diffstat | 2 files changed, 25 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Jan 16 21:30:27 2012 +1100 +++ b/ChangeLog Mon Jan 16 21:30:29 2012 +1100 @@ -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
--- a/src/mlmmj-process.c Mon Jan 16 21:30:27 2012 +1100 +++ b/src/mlmmj-process.c Mon Jan 16 21:30:29 2012 +1100 @@ -569,6 +569,30 @@ 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 @@ } } - /* 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