diff --git a/mail/mlmmj/Makefile b/mail/mlmmj/Makefile index 292636766d0d..1797d99b8a2f 100644 --- a/mail/mlmmj/Makefile +++ b/mail/mlmmj/Makefile @@ -1,50 +1,50 @@ # Created by: Christian Laursen PORTNAME= mlmmj PORTVERSION= 1.3.0 -PORTREVISION= 6 +PORTREVISION= 7 CATEGORIES= mail MASTER_SITES= http://mlmmj.org/releases/ MAINTAINER= bapt@FreeBSD.org COMMENT= Simple and slim mailing list manager LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE USES= cpe gmake iconv shebangfix tar:bzip2 SHEBANG_FILES= contrib/web/perl-user/mlmmj.cgi GNU_CONFIGURE= yes CONFIGURE_ARGS= --enable-receive-strip CPPFLAGS+= -I${ICONV_INCLUDE_PATH} LDFLAGS+= ${ICONV_LIB_PATH} OPTIONS_DEFINE= DOCS PERL PHP OPTIONS_SUB= yes PERL_RUN_DEPENDS= p5-URI>0:net/p5-URI \ p5-CGI-FastTemplate>0:www/p5-CGI-FastTemplate \ p5-HTML-Parser>0:www/p5-HTML-Parser PHP_USES= php:web post-patch: @${REINPLACE_CMD} -e \ '/^AM_CFLAGS/s|-g ||' ${WRKSRC}/src/Makefile.in post-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR} (cd ${WRKSRC} && ${INSTALL_DATA} \ ChangeLog FAQ README* TODO TUNABLES UPGRADE \ ${STAGEDIR}${DOCSDIR}) post-install-PERL-on: @(cd ${WRKSRC}/contrib/web && ${COPYTREE_SHARE} "perl-*" \ ${STAGEDIR}${WWWDIR}) @${CHMOD} ${BINMODE} ${STAGEDIR}${WWWDIR}/perl-user/mlmmj.cgi post-install-PHP-on: @(cd ${WRKSRC}/contrib/web && ${COPYTREE_SHARE} "php-*" \ ${STAGEDIR}${WWWDIR}) .include diff --git a/mail/mlmmj/files/patch-originalfromemail b/mail/mlmmj/files/patch-originalfromemail index 4ee0b485e3a2..c6bc45d2f129 100644 --- a/mail/mlmmj/files/patch-originalfromemail +++ b/mail/mlmmj/files/patch-originalfromemail @@ -1,79 +1,110 @@ +diff --git src/listcontrol.c src/listcontrol.c +index d0c2e14..96e98d9 100644 +--- src/listcontrol.c ++++ src/listcontrol.c +@@ -191,7 +191,7 @@ int listcontrol(struct email_container *fromemails, const char *listdir, + if(fromemails->emailcount != 1 && ctrl != CTRL_BOUNCES) { + errno = 0; + log_error(LOG_ARGS, "Ignoring mail with invalid From: " +- "which was not a bounce"); ++ "which was not a bounce: %d", fromemails->emailcount); + return -1; + } + diff --git src/mlmmj-process.c src/mlmmj-process.c -index 82e4d04..fee5603 100644 +index 82e4d04..a9003e7 100644 --- src/mlmmj-process.c +++ src/mlmmj-process.c -@@ -473,6 +473,7 @@ int main(int argc, char **argv) +@@ -473,10 +473,12 @@ int main(int argc, char **argv) struct stat st; uid_t uid; struct email_container fromemails = { 0, NULL }; + struct email_container originalfromemails = { 0, NULL }; struct email_container toemails = { 0, NULL }; struct email_container ccemails = { 0, NULL }; struct email_container rpemails = { 0, NULL }; -@@ -488,6 +489,7 @@ int main(int argc, char **argv) + struct email_container dtemails = { 0, NULL }; ++ struct email_container *testfrom = NULL; + struct strlist *access_rules = NULL; + struct strlist *delheaders = NULL; + struct strlist allheaders; +@@ -488,6 +490,7 @@ int main(int argc, char **argv) { "Return-Path:", 0, NULL }, { "Delivered-To:", 0, NULL }, { "Subject:", 0, NULL }, + { "X-Original-From:", 0, NULL }, { NULL, 0, NULL } }; -@@ -708,6 +710,11 @@ int main(int argc, char **argv) +@@ -708,6 +711,11 @@ int main(int argc, char **argv) for(i = 0; i < readhdrs[0].valuecount; i++) { find_email_adr(readhdrs[0].values[i], &fromemails); } + /* X-Original-From: addresses */ + for(i = 0; i < readhdrs[6].valuecount; i++) { + find_email_adr(readhdrs[6].values[i], &originalfromemails); + } + /* discard malformed mail with invalid From: unless it's a bounce */ if(fromemails.emailcount != 1 && (recipextra == NULL || -@@ -1036,7 +1043,10 @@ int main(int argc, char **argv) +@@ -812,7 +820,11 @@ int main(int argc, char **argv) + log_error(LOG_ARGS, "listcontrol(from, %s, %s, %s, %s, %s, %s, %s)\n", listdir, toemails.emaillist[0], mlmmjsub, mlmmjunsub, mlmmjsend, mlmmjbounce, donemailname); + #endif + unlink(mailfile); +- listcontrol(&fromemails, listdir, recipextra, ++ if (originalfromemails.emailcount > 0) ++ testfrom = &originalfromemails; ++ else ++ testfrom = &fromemails; ++ listcontrol(testfrom, listdir, recipextra, + mlmmjsub, mlmmjunsub, mlmmjsend, mlmmjbounce, + donemailname); + +@@ -1036,7 +1048,10 @@ int main(int argc, char **argv) if(!send && (subonlypost || modonlypost || modnonsubposts)) { /* Don't send a mail about denial to the list, but silently * discard and exit. */ - if (strcasecmp(listaddr, posteraddr) == 0) { + char *testaddr = posteraddr; + if (originalfromemails.emailcount > 0) + testaddr = originalfromemails.emaillist[0]; + if (strcasecmp(listaddr, testaddr) == 0) { log_error(LOG_ARGS, "Discarding %s because" " there are sender restrictions but" " From: was the list address", -@@ -1047,10 +1057,10 @@ int main(int argc, char **argv) +@@ -1047,10 +1062,10 @@ int main(int argc, char **argv) exit(EXIT_SUCCESS); } if(subonlypost) { - foundaddr = (is_subbed(listdir, posteraddr, 0) != + foundaddr = (is_subbed(listdir, testaddr, 0) != SUB_NONE); } else if (modonlypost) { - foundaddr = is_moderator(listdir, posteraddr, NULL); + foundaddr = is_moderator(listdir, testaddr, NULL); } if(!foundaddr) { if(modnonsubposts) { -@@ -1086,10 +1096,10 @@ int main(int argc, char **argv) +@@ -1086,10 +1101,10 @@ int main(int argc, char **argv) } MY_ASSERT(txt); register_unformatted(txt, "subject", subject); - register_unformatted(txt, "posteraddr", posteraddr); + register_unformatted(txt, "posteraddr", testaddr); register_originalmail(txt, donemailname); queuefilename = prepstdreply(txt, listdir, - "$listowner$", posteraddr, NULL); + "$listowner$", testaddr, NULL); MY_ASSERT(queuefilename) close_text(txt); myfree(listaddr); -@@ -1101,7 +1111,7 @@ int main(int argc, char **argv) +@@ -1101,7 +1116,7 @@ int main(int argc, char **argv) execlp(mlmmjsend, mlmmjsend, "-L", listdir, "-l", "1", - "-T", posteraddr, + "-T", testaddr, "-F", fromaddr, "-m", queuefilename, (char *)NULL);