aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorpav <pav@FreeBSD.org>2004-06-01 06:56:57 +0800
committerpav <pav@FreeBSD.org>2004-06-01 06:56:57 +0800
commite19d753cc6966fee48f376addff6aae688a8c808 (patch)
tree4e97c01dd0b22bcc3909983753c6db585a0e6376 /mail
parent460df9ccfb92b2606f6aae199b81048c2297a2a1 (diff)
downloadfreebsd-ports-gnome-e19d753cc6966fee48f376addff6aae688a8c808.tar.gz
freebsd-ports-gnome-e19d753cc6966fee48f376addff6aae688a8c808.tar.zst
freebsd-ports-gnome-e19d753cc6966fee48f376addff6aae688a8c808.zip
- Fix crash upon configuration reload
PR: ports/67419 Submitted by: Cyril Guibourg <aragorn+ports@teaser.fr> (maintainer) Obtained from: author
Diffstat (limited to 'mail')
-rw-r--r--mail/milter-greylist/Makefile17
-rw-r--r--mail/milter-greylist/files/patch-conf.c71
2 files changed, 80 insertions, 8 deletions
diff --git a/mail/milter-greylist/Makefile b/mail/milter-greylist/Makefile
index 663f73c8edbb..a5c1a2ff6e60 100644
--- a/mail/milter-greylist/Makefile
+++ b/mail/milter-greylist/Makefile
@@ -7,6 +7,7 @@
PORTNAME= milter-greylist
PORTVERSION= 1.2.2
+PORTREVISION= 1
CATEGORIES= mail
MASTER_SITES= ftp://ftp.espci.fr/pub/milter-greylist/
EXTRACT_SUFX= .tgz
@@ -31,15 +32,15 @@ post-extract:
${FILESDIR}/milter-greylist.sh > ${WRKSRC}/milter-greylist.sh
post-install:
- ${MKDIR} /var/milter-greylist /var/db/milter-greylist
- ${CHOWN} smmsp /var/milter-greylist /var/db/milter-greylist
- ${MKDIR} ${PREFIX}/etc/rc.d
- ${INSTALL_SCRIPT} ${WRKSRC}/milter-greylist.sh ${PREFIX}/etc/rc.d/
+ @${MKDIR} /var/milter-greylist /var/db/milter-greylist
+ @${CHOWN} smmsp /var/milter-greylist /var/db/milter-greylist
+ @${MKDIR} ${PREFIX}/etc/rc.d
+ @${INSTALL_SCRIPT} ${WRKSRC}/milter-greylist.sh ${PREFIX}/etc/rc.d/
.if !defined(NOPORTDOCS)
- ${MKDIR} ${DOCSDIR}
- ${MKDIR} ${EXAMPLESDIR}
- ${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
- ${INSTALL_DATA} ${WRKSRC}/greylist.conf ${EXAMPLESDIR}
+ @${MKDIR} ${DOCSDIR}
+ @${MKDIR} ${EXAMPLESDIR}
+ @${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
+ @${INSTALL_DATA} ${WRKSRC}/greylist.conf ${EXAMPLESDIR}
.endif
@${CAT} ${PKGMESSAGE}
diff --git a/mail/milter-greylist/files/patch-conf.c b/mail/milter-greylist/files/patch-conf.c
new file mode 100644
index 000000000000..87658b336712
--- /dev/null
+++ b/mail/milter-greylist/files/patch-conf.c
@@ -0,0 +1,71 @@
+--- conf.c.orig Fri Apr 2 17:06:52 2004
++++ conf.c Mon May 31 16:58:06 2004
+@@ -34,7 +34,7 @@
+ #ifdef HAVE_SYS_CDEFS_H
+ #include <sys/cdefs.h>
+ #ifdef __RCSID
+-__RCSID("$Id: conf.c,v 1.15 2004/04/02 15:06:52 manu Exp $");
++__RCSID("$Id: conf.c,v 1.15 (sigsev patch) 2004/04/02 15:06:52 manu Exp $");
+ #endif
+ #endif
+
+@@ -83,6 +83,8 @@
+ conf_load(void) /* exceptlist must be write-locked */
+ {
+ FILE *stream;
++ pthread_t tid;
++ pthread_attr_t attr;
+
+ /*
+ * Reset the configuration to its default
+@@ -100,8 +102,49 @@
+ return;
+ }
+
++ /*
++ * On some platforms, the thread stack limit is too low and
++ * conf_parse will get a SIGSEGV because it overflows the
++ * stack.
++ *
++ * In order to fix this, we spawn a new thread just for
++ * parsing the config file, and we request a stack big
++ * enough to hold the parser data. 2 MB seems okay.
++ */
++
+ conf_in = stream;
+- conf_parse();
++
++ if (pthread_attr_init(&attr) != 0) {
++ syslog(LOG_ERR, "pthread_attr_init failed: %s",
++ strerror(errno));
++ exit(EX_OSERR);
++ }
++
++ if (pthread_attr_setstacksize(&attr, 2 * 1024 * 1024) != 0) {
++ syslog(LOG_ERR, "pthread_attr_setstacksize failed: %s",
++ strerror(errno));
++ exit(EX_OSERR);
++ }
++
++ if (pthread_create(&tid, &attr,
++ (void *(*)(void *))conf_parse, NULL) != 0) {
++ syslog(LOG_ERR, "pthread_create failed: %s",
++ strerror(errno));
++ exit(EX_OSERR);
++ }
++
++ if (pthread_join(tid, NULL) != 0) {
++ syslog(LOG_ERR, "pthread_join failed: %s",
++ strerror(errno));
++ exit(EX_OSERR);
++ }
++
++ if (pthread_attr_destroy(&attr) != 0) {
++ syslog(LOG_ERR, "pthread_attr_destroy failed: %s",
++ strerror(errno));
++ exit(EX_OSERR);
++ }
++
+ fclose(stream);
+
+ (void)gettimeofday(&conffile_modified, NULL);