diff options
author | pav <pav@FreeBSD.org> | 2004-06-01 06:56:57 +0800 |
---|---|---|
committer | pav <pav@FreeBSD.org> | 2004-06-01 06:56:57 +0800 |
commit | e19d753cc6966fee48f376addff6aae688a8c808 (patch) | |
tree | 4e97c01dd0b22bcc3909983753c6db585a0e6376 /mail | |
parent | 460df9ccfb92b2606f6aae199b81048c2297a2a1 (diff) | |
download | freebsd-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/Makefile | 17 | ||||
-rw-r--r-- | mail/milter-greylist/files/patch-conf.c | 71 |
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); |