aboutsummaryrefslogtreecommitdiff
path: root/mail/qmailadmin
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2013-06-15 23:19:53 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2013-06-15 23:19:53 +0000
commita0f82dcc8301144746f83bc1ebe82e395a7d382f (patch)
tree291ecedcf5dd3341dde10b4e627b51430d29ce99 /mail/qmailadmin
parentfc7548b8efd1c618fe33ee3a8e4c6e95e17ccbb5 (diff)
downloadports-a0f82dcc8301144746f83bc1ebe82e395a7d382f.tar.gz
ports-a0f82dcc8301144746f83bc1ebe82e395a7d382f.zip
- 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 <mlerota@claresco.hr> Obtained from: https://sourceforge.net/p/qmailadmin/patches/36/
Notes
Notes: svn path=/head/; revision=321021
Diffstat (limited to 'mail/qmailadmin')
-rw-r--r--mail/qmailadmin/Makefile6
-rw-r--r--mail/qmailadmin/files/extra-ezmlm-idx7.patch378
-rw-r--r--mail/qmailadmin/files/patch-mailinglist.c33
3 files changed, 383 insertions, 34 deletions
diff --git a/mail/qmailadmin/Makefile b/mail/qmailadmin/Makefile
index 9b976f1d32cd..c68d4590ab68 100644
--- a/mail/qmailadmin/Makefile
+++ b/mail/qmailadmin/Makefile
@@ -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= spamcmd-needs-email
.include <bsd.port.options.mk>
+.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
diff --git a/mail/qmailadmin/files/extra-ezmlm-idx7.patch b/mail/qmailadmin/files/extra-ezmlm-idx7.patch
new file mode 100644
index 000000000000..be4cd42dcbd2
--- /dev/null
+++ b/mail/qmailadmin/files/extra-ezmlm-idx7.patch
@@ -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 ("<SMALL>(%s)</SMALL>", TmpBuf);
+- printf ("<BR>\n");
+- sprintf (TmpBuf, html_text[273], listname);
+- build_option_str ("CHECKBOX", "opt6", "q", TmpBuf);
+- printf ("<BR>\n");
+- sprintf (TmpBuf, html_text[274], listname, listname, listname);
+- printf ("&nbsp; &nbsp; <SMALL>(%s)</SMALL></P>", TmpBuf);
++ printf ("</P>");
+
+ /* Remote Administration */
+ printf ("<P><B><U>%s</U></B><BR>\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);
+
diff --git a/mail/qmailadmin/files/patch-mailinglist.c b/mail/qmailadmin/files/patch-mailinglist.c
deleted file mode 100644
index d19c26d7bbca..000000000000
--- a/mail/qmailadmin/files/patch-mailinglist.c
+++ /dev/null
@@ -1,33 +0,0 @@
---- mailinglist.c~ 2009-03-09 10:35:01.000000000 +0900
-+++ mailinglist.c 2013-03-25 23:48:29.000000000 +0900
-@@ -681,13 +681,15 @@
- dup2(handles[1],fileno(stdout));
- sprintf(TmpBuf1, "%s/ezmlm-list", EZMLMDIR);
- if(mod == 1) {
-- sprintf(TmpBuf2, "%s/%s/mod", RealDir, ActionUser);
-+ sprintf(TmpBuf2, "%s/%s", RealDir, ActionUser);
-+ execl(TmpBuf1, "ezmlm-list", TmpBuf2, "mod", NULL);
- } else if(mod == 2) {
-- sprintf(TmpBuf2, "%s/%s/digest", RealDir, ActionUser);
-+ sprintf(TmpBuf2, "%s/%s", RealDir, ActionUser);
-+ execl(TmpBuf1, "ezmlm-list", TmpBuf2, "digest", NULL);
- } else {
- sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser);
-+ execl(TmpBuf1, "ezmlm-list", TmpBuf2, NULL);
- }
-- execl(TmpBuf1, "ezmlm-list", TmpBuf2, NULL);
- exit(127);
- } else {
- close(handles[1]);
-@@ -799,9 +801,9 @@
- 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);
-+ execl(subpath, "ezmlm-sub", listpath, dir, email, NULL);
- exit(127);
- } else wait(&pid);