From owner-svn-ports-all@FreeBSD.ORG Sat Jun 15 23:19:54 2013 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id A1F6C85B; Sat, 15 Jun 2013 23:19:54 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 8488F1D18; Sat, 15 Jun 2013 23:19:54 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5FNJsrj066048; Sat, 15 Jun 2013 23:19:54 GMT (envelope-from bdrewery@svn.freebsd.org) Received: (from bdrewery@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r5FNJsLB066046; Sat, 15 Jun 2013 23:19:54 GMT (envelope-from bdrewery@svn.freebsd.org) Message-Id: <201306152319.r5FNJsLB066046@svn.freebsd.org> From: Bryan Drewery Date: Sat, 15 Jun 2013 23:19:54 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r321021 - in head/mail/qmailadmin: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jun 2013 23:19:54 -0000 Author: bdrewery Date: Sat Jun 15 23:19:53 2013 New Revision: 321021 URL: http://svnweb.freebsd.org/changeset/ports/321021 Log: - Fix configuring ezmlm-idx-7 mailing lists. Only apply the patch [1] when using ezmlm-idx as it is not backwards compatible with ezmlm. Reported by: Marko Lerota Obtained from: https://sourceforge.net/p/qmailadmin/patches/36/ Added: head/mail/qmailadmin/files/extra-ezmlm-idx7.patch (contents, props changed) Deleted: head/mail/qmailadmin/files/patch-mailinglist.c Modified: head/mail/qmailadmin/Makefile Modified: head/mail/qmailadmin/Makefile ============================================================================== --- head/mail/qmailadmin/Makefile Sat Jun 15 21:39:15 2013 (r321020) +++ head/mail/qmailadmin/Makefile Sat Jun 15 23:19:53 2013 (r321021) @@ -3,7 +3,7 @@ PORTNAME= qmailadmin PORTVERSION= 1.2.15 -PORTREVISION= 3 +PORTREVISION= 4 PORTEPOCH= 2 CATEGORIES= mail www MASTER_SITES= SF/${PORTNAME}/${PORTNAME}-stable/${PORTVERSION} \ @@ -78,6 +78,10 @@ SPAM_NEEDS_EMAIL_CONFIGURE_ENABLE= spamc .include +.if ${PORT_OPTIONS:MIDX} +EXTRA_PATCHES+= ${FILESDIR}/extra-ezmlm-idx7.patch +.endif + .if ${PORT_OPTIONS:MSPAM_DETECTION} && defined(SPAM_COMMAND) CONFIGURE_ARGS+= --enable-spam-command="${SPAM_COMMAND}" .endif Added: head/mail/qmailadmin/files/extra-ezmlm-idx7.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/mail/qmailadmin/files/extra-ezmlm-idx7.patch Sat Jun 15 23:19:53 2013 (r321021) @@ -0,0 +1,378 @@ +Index: mailinglist.c +=================================================================== +--- mailinglist.c (revision 312) ++++ mailinglist.c (working copy) +@@ -59,6 +59,10 @@ + #define REPLYTO_LIST 2 + #define REPLYTO_ADDRESS 3 + ++#define GROUP_SUBSCRIBER 0 ++#define GROUP_MODERATOR 1 ++#define GROUP_DIGEST 2 ++ + void set_options(); + void default_options(); + +@@ -533,7 +537,7 @@ + arguments[argc++]=TmpBuf3; + arguments[argc++]=ActionUser; + arguments[argc++]=Domain; +- arguments[argc]=NULL; ++ arguments[argc]=(char *) NULL; + + execv(TmpBuf1, arguments); + exit(127); +@@ -541,29 +545,6 @@ + wait(&pid); + } + +- /* +- * ezmlm-make -e leaves .qmail-listname-(accept||reject) links for some reason. +- * (causing file permission errors in "show mailing lists") Also, it doesn't +- * delete dir/digest/ when turning off digests. This section cleans up... +- */ +- if(listopt['M'-'A'] == 'M') { /* moderation off */ +- sprintf(tmp, "%s/.qmail-%s-accept-default", RealDir, dotqmail_name); +- unlink (tmp); +- sprintf(tmp, "%s/.qmail-%s-reject-default", RealDir, dotqmail_name); +- unlink (tmp); +- } +- if(listopt['D'-'A'] == 'D') { /* digest off */ +- sprintf(tmp, "%s/.qmail-%s-digest-return-default", RealDir, dotqmail_name); +- unlink (tmp); +- sprintf(tmp, "%s/.qmail-%s-digest-owner", RealDir, dotqmail_name); +- unlink (tmp); +- +- /* delete the digest directory */ +- sprintf(tmp, "%s/%s/digest", RealDir, ActionUser); +- vdelfiles(tmp); +- chdir(RealDir); +- } +- + /* Check for prefix setting */ + GetValue(TmpCGI, tmp, "prefix=", sizeof(tmp)); + +@@ -617,10 +598,10 @@ + #ifdef EZMLMIDX + /* if this is a new list, add owner as subscriber */ + if (newlist && (*list_owner != '\0')) { +- ezmlm_sub ("", list_owner); ++ ezmlm_sub (GROUP_SUBSCRIBER, list_owner); + if (listopt['M'-'A'] == 'm') { /* moderation on */ + /* add owner as moderator/remote admin as well */ +- ezmlm_sub ("mod", list_owner); ++ ezmlm_sub (GROUP_MODERATOR, list_owner); + } + } + #endif +@@ -680,14 +661,14 @@ + close(handles[0]); + dup2(handles[1],fileno(stdout)); + sprintf(TmpBuf1, "%s/ezmlm-list", EZMLMDIR); +- if(mod == 1) { +- sprintf(TmpBuf2, "%s/%s/mod", RealDir, ActionUser); +- } else if(mod == 2) { +- sprintf(TmpBuf2, "%s/%s/digest", RealDir, ActionUser); ++ sprintf(TmpBuf2, "%s/%s", RealDir, ActionUser); ++ if(mod == GROUP_MODERATOR) { ++ execl(TmpBuf1, "ezmlm-list", TmpBuf2, "mod", (char *)NULL); ++ } else if(mod == GROUP_DIGEST) { ++ execl(TmpBuf1, "ezmlm-list", TmpBuf2, "digest", (char *)NULL); + } else { +- sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser); ++ execl(TmpBuf1, "ezmlm-list", TmpBuf2, (char *)NULL); + } +- execl(TmpBuf1, "ezmlm-list", TmpBuf2, NULL); + exit(127); + } else { + close(handles[1]); +@@ -790,7 +771,7 @@ + void addlistdig() { addlistgroup( "add_listdig.html" ); } + + /* returns 0 for success */ +-int ezmlm_sub (char *dir, char *email) ++int ezmlm_sub (int mod, char *email) + { + int pid; + char subpath[MAX_BUFF]; +@@ -799,9 +780,14 @@ + pid=fork(); + if (pid==0) { + snprintf(subpath, sizeof(subpath), "%s/ezmlm-sub", EZMLMDIR); +- snprintf(listpath, sizeof(listpath), "%s/%s/%s", +- RealDir, ActionUser, dir); +- execl(subpath, "ezmlm-sub", listpath, email, NULL); ++ snprintf(listpath, sizeof(listpath), "%s/%s", RealDir, ActionUser); ++ if (mod == GROUP_MODERATOR) { ++ execl(subpath, "ezmlm-sub", listpath, "mod", email, (char *)NULL); ++ } else if (mod == GROUP_DIGEST) { ++ execl(subpath, "ezmlm-sub", listpath, "digest", email, (char *)NULL); ++ } else { ++ execl(subpath, "ezmlm-sub", listpath, email, (char *)NULL); ++ } + exit(127); + } else wait(&pid); + +@@ -824,9 +810,9 @@ + + if ( check_email_addr(Newu) ) { + snprinth (StatusMessage, sizeof(StatusMessage), "%s %H\n", html_text[148], Newu); +- if (mod == 1) { ++ if (mod == GROUP_MODERATOR) { + addlistmod(); +- } else if (mod == 2) { ++ } else if (mod == GROUP_DIGEST) { + addlistdig(); + } else { + addlistuser(); +@@ -835,18 +821,16 @@ + exit(0); + } + +- if(mod == 1 ) { +- ezmlm_sub ("mod", Newu); ++ ezmlm_sub (mod, Newu); ++ if(mod == GROUP_MODERATOR ) { + snprinth (StatusMessage, sizeof(StatusMessage), "%H %s %H@%H\n", Newu, + html_text[194], ActionUser, Domain); + send_template( "add_listmod.html" ); +- } else if(mod == 2) { +- ezmlm_sub ("digest", Newu); ++ } else if(mod == GROUP_DIGEST) { + snprinth (StatusMessage, sizeof(StatusMessage), "%H %s %H@%H\n", Newu, + html_text[240], ActionUser, Domain); + send_template( "add_listdig.html" ); + } else { +- ezmlm_sub ("", Newu); + snprinth (StatusMessage, sizeof(StatusMessage), "%H %s %H@%H\n", Newu, + html_text[193], ActionUser, Domain); + send_template( "add_listuser.html" ); +@@ -888,21 +872,21 @@ + pid=fork(); + if (pid==0) { + sprintf(TmpBuf1, "%s/ezmlm-unsub", EZMLMDIR); +- if(mod == 1) { +- sprintf(TmpBuf2, "%s/%s/mod", RealDir, ActionUser); +- } else if(mod == 2 ) { +- sprintf(TmpBuf2, "%s/%s/digest", RealDir, ActionUser); ++ sprintf(TmpBuf2, "%s/%s", RealDir, ActionUser); ++ if(mod == GROUP_MODERATOR) { ++ execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, "mod", Newu, (char *)NULL); ++ } else if(mod == GROUP_DIGEST ) { ++ execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, "digest", Newu, (char *)NULL); + } else { +- sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser); ++ execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, Newu, (char *)NULL); + } +- execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, Newu, NULL); + exit(127); + } else wait(&pid); + +- if(mod == 1) { ++ if(mod == GROUP_MODERATOR) { + snprinth (StatusMessage, sizeof(StatusMessage), "%H %s %H@%H\n", Newu, html_text[197], + ActionUser, Domain); +- } else if(mod == 2) { ++ } else if(mod == GROUP_DIGEST) { + snprinth (StatusMessage, sizeof(StatusMessage), "%H %s %H@%H\n", Newu, html_text[242], + ActionUser, Domain); + } else { +@@ -1092,42 +1076,96 @@ + // default to false for lowercase letters + for (c = 'a'; c <= 'z'; checkopt[(int) c++] = 0); + +- // figure out some options in the -default file ++ // ------ newer configuration reads ++ ++ // -s: Subscription moderation. touching dir/modsub ++ sprintf(TmpBuf, "%s/modsub", ActionUser); ++ checkopt['s'] = file_exists(TmpBuf); ++ // -h: Help subscription. Don't require confirmation. Not recommented! ++ sprintf(TmpBuf, "%s/nosubconfirm", ActionUser); ++ checkopt['h'] = file_exists(TmpBuf); ++ // -j Jump off. Unsubscribe does not require confirmation. ++ sprintf(TmpBuf, "%s/nounsubconfirm", ActionUser); ++ checkopt['j'] = file_exists(TmpBuf); ++ ++ // -m: Message moderation. touch dir/modpost ++ sprintf(TmpBuf, "%s/modpost", ActionUser); // valid for newer ezmlm-versions ++ checkopt['m'] = file_exists(TmpBuf); ++ // -o: Reject others than; applicable to message moderated lists only ++ sprintf(TmpBuf, "%s/modpostonly", ActionUser); ++ checkopt['o'] = file_exists(TmpBuf); ++ // -u: User posts only. subscribers, digest-subscribers and dir/allow ++ sprintf(TmpBuf, "%s/subpostonly", ActionUser); ++ checkopt['u'] = file_exists(TmpBuf); ++ ++ // -f: Subject Prefix. outgoing subject will be pre-fixed with the list name ++ sprintf(TmpBuf, "%s/prefix", ActionUser); ++ checkopt['f'] = file_exists(TmpBuf); ++ // -t: Message Trailer. create dir/text/trailer ++ sprintf(TmpBuf, "%s/addtrailer", ActionUser); ++ checkopt['t'] = file_exists(TmpBuf); ++ ++ // -a: Archived: touch dir/archived and dir/indexed ++ sprintf(TmpBuf, "%s/archived", ActionUser); ++ checkopt['a'] = file_exists(TmpBuf); ++ // -i: indexed for WWW archive access ++ sprintf(TmpBuf, "%s/threaded", ActionUser); ++ checkopt['i'] = file_exists(TmpBuf); ++ // -p: Public archive. touch dir/public ++ sprintf(TmpBuf, "%s/public", ActionUser); ++ checkopt['p'] = file_exists(TmpBuf); ++ // -g: Guard archive. Access requests from unrecognized SENDERs will be rejected. ++ sprintf(TmpBuf, "%s/subgetonly", ActionUser); ++ checkopt['g'] = file_exists(TmpBuf); ++ // -b: Block archive. Only moderators are allowed to access the archive. ++ sprintf(TmpBuf, "%s/modgetonly", ActionUser); ++ checkopt['b'] = file_exists(TmpBuf); ++ ++ // -d: Digest ++ sprintf(TmpBuf, "%s/digested", ActionUser); ++ checkopt['d'] = file_exists(TmpBuf); ++ ++ // -r: Remote admin. touching dir/remote ++ sprintf(TmpBuf, "%s/remote", ActionUser); ++ checkopt['r'] = file_exists(TmpBuf); ++ // -l List subscribers. administrators can request a subscriber ++ sprintf(TmpBuf, "%s/modcanlist", ActionUser); ++ checkopt['l'] = file_exists(TmpBuf); ++ // -n New text file. administrators may edit texts ++ sprintf(TmpBuf, "%s/modcanedit", ActionUser); ++ checkopt['n'] = file_exists(TmpBuf); ++ ++ // ------ end of newer configuration reads ++ ++ // ------ read in old ezmlm's values ++ // figure out some options in the -default file; + sprintf(TmpBuf, ".qmail-%s-default", dotqmail_name); + if( (fs=fopen(TmpBuf, "r")) !=NULL ) { + while(fgets(TmpBuf2, sizeof(TmpBuf2), fs)) { ++ // -b: Block archive. Only moderators are allowed to access the archive. + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-get", 'P')) > 0) { + checkopt['b'] = 1; + } ++ // -g: Guard archive. Access requests from unrecognized SENDERs will be rejected. + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-get", 's')) > 0) { + checkopt['g'] = 1; + } ++ // -h: Help subscription. Don't require confirmation. Not recommented! + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-manage", 'S')) > 0) { + checkopt['h'] = 1; + } ++ // -j Jump off. Unsubscribe does not require confirmation. + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-manage", 'U')) > 0) { + checkopt['j'] = 1; + } ++ // -l List subscribers. administrators can request a subscriber + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-manage", 'l')) > 0) { + checkopt['l'] = 1; + } ++ // -n New text file. administrators may edit texts + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-manage", 'e')) > 0) { + checkopt['n'] = 1; + } +- if((strstr(TmpBuf2, "ezmlm-request")) != 0) { +- checkopt['q'] = 1; +- } +- } +- fclose(fs); +- } +- +- // figure out some options in the -accept-default file +- sprintf(TmpBuf, ".qmail-%s-accept-default", dotqmail_name); +- if( (fs=fopen(TmpBuf, "r")) !=NULL ) { +- while(fgets(TmpBuf2, sizeof(TmpBuf2), fs)) { +- if(strstr(TmpBuf2, "ezmlm-archive") !=0) { +- checkopt['i'] = 1; +- } + } + fclose(fs); + } +@@ -1136,43 +1174,21 @@ + sprintf(TmpBuf, ".qmail-%s", dotqmail_name); + if( (fs=fopen(TmpBuf, "r")) !=NULL ) { + while(fgets(TmpBuf2, sizeof(TmpBuf2), fs)) { ++ // -o: Reject others than; applicable to message moderated lists only + if((get_ezmlmidx_line_arguments(TmpBuf2, "ezmlm-store", 'P')) > 0) { + checkopt['o'] = 1; + } +- if((strstr(TmpBuf2, "ezmlm-gate")) != 0 || (strstr(TmpBuf2, "ezmlm-issubn")) != 0) { +- checkopt['u'] = 1; +- } +- if(strstr(TmpBuf2, "ezmlm-archive") !=0) { +- checkopt['i'] = 1; +- } + } + fclose(fs); + } + +- sprintf(TmpBuf, ".qmail-%s-accept-default", dotqmail_name); +- checkopt['m'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/archived", ActionUser); +- checkopt['a'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/digest/bouncer", ActionUser); +- checkopt['d'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/prefix", ActionUser); +- checkopt['f'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/public", ActionUser); +- checkopt['p'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/remote", ActionUser); +- checkopt['r'] = file_exists(TmpBuf); +- +- sprintf(TmpBuf, "%s/modsub", ActionUser); +- checkopt['s'] = file_exists(TmpBuf); +- ++ // -t: Message Trailer. create dir/text/trailer + sprintf(TmpBuf, "%s/text/trailer", ActionUser); +- checkopt['t'] = file_exists(TmpBuf); +- ++ if (file_exists(TmpBuf)) { ++ checkopt['t'] = 1; ++ } ++ // ------ end of read in old ezmlm's values ++ + /* update the uppercase option letters (just the opposite of the lowercase) */ + for (c = 'A'; c <= 'Z'; c++) + { +@@ -1208,7 +1224,7 @@ + checkopt['n'] = 0; /* Remote admins can edit text files */ + checkopt['o'] = 0; /* Others rejected (for Moderated lists only */ + checkopt['p'] = 1; /* Public */ +- checkopt['q'] = 1; /* Service listname-request */ ++ checkopt['q'] = 1; /* Service listname-request, no longer supported */ + checkopt['r'] = 0; /* Remote Administration */ + checkopt['s'] = 0; /* Subscriptions are moderated */ + checkopt['t'] = 0; /* Add Trailer to outgoing messages */ +@@ -1293,12 +1309,7 @@ + build_option_str ("CHECKBOX", "opt5", "d", html_text[271]); + sprintf (TmpBuf, html_text[272], listname); + printf ("(%s)", TmpBuf); +- printf ("
\n"); +- sprintf (TmpBuf, html_text[273], listname); +- build_option_str ("CHECKBOX", "opt6", "q", TmpBuf); +- printf ("
\n"); +- sprintf (TmpBuf, html_text[274], listname, listname, listname); +- printf ("    (%s)

", TmpBuf); ++ printf ("

"); + + /* Remote Administration */ + printf ("

%s
\n", html_text[275]); +Index: mailinglist.h +--- mailinglist.h (revision 312) ++++ mailinglist.h (working copy) +@@ -13,7 +13,7 @@ + void dellistgroupnow(int mod); + void delmailinglist(); + void delmailinglistnow(); +-int ezmlm_sub (char *dir, char *email); ++int ezmlm_sub (int mod, char *email); + void modmailinglist(); + void modmailinglistnow(); + void show_list_group(char *template); +