aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2006-11-13 21:32:58 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2006-11-13 21:32:58 +0000
commitff2b5645d2b061c43a487b6762805376feccfde7 (patch)
tree61b82a435532f1eff7294866bbd92ec34f665d22 /etc
parent0a9c8c654ecb719d308ee36bc16cad4d8260b1cd (diff)
downloadmailfromd-ff2b5645d2b061c43a487b6762805376feccfde7.tar.gz
mailfromd-ff2b5645d2b061c43a487b6762805376feccfde7.tar.bz2
*** empty log message ***
git-svn-id: file:///svnroot/mailfromd/trunk@889 7a8a7f39-df28-0410-adc6-e0d955640f24
Diffstat (limited to 'etc')
-rw-r--r--etc/sendmail-8.13.7.diff386
1 files changed, 0 insertions, 386 deletions
diff --git a/etc/sendmail-8.13.7.diff b/etc/sendmail-8.13.7.diff
deleted file mode 100644
index 3e94e2f1..00000000
--- a/etc/sendmail-8.13.7.diff
+++ /dev/null
@@ -1,386 +0,0 @@
-Index: libmilter/Makefile.m4
-diff -pur libmilter-orig/Makefile.m4 libmilter/Makefile.m4
---- libmilter-orig/Makefile.m4 2006-07-30 16:11:14.000000000 +0300
-+++ libmilter/Makefile.m4 2006-07-30 16:12:29.000000000 +0300
-@@ -9,11 +9,11 @@ define(`confMT', `true')
- SMSRCDIR= ifdef(`confSMSRCDIR', `confSMSRCDIR', `${SRCDIR}/sendmail')
- PREPENDDEF(`confINCDIRS', `-I${SMSRCDIR} ')
-
--bldPRODUCT_START(`library', `libmilter')
-+bldPRODUCT_START(`library', `libmilter-fork')
- define(`bldINSTALLABLE', `true')
- define(`LIBMILTER_EXTRAS', `errstring.c strl.c')
- APPENDDEF(`confENVDEF', `-DNOT_SENDMAIL -Dsm_snprintf=snprintf')
--define(`bldSOURCES', `main.c engine.c listener.c handler.c comm.c smfi.c signal.c sm_gethost.c LIBMILTER_EXTRAS ')
-+define(`bldSOURCES', `main.c engine.c listener.c handler.c comm.c smfi.c sm_gethost.c LIBMILTER_EXTRAS ')
- define(`confBEFORE', `LIBMILTER_EXTRAS')
- bldPUSH_INSTALL_TARGET(`install-mfapi')
- bldPRODUCT_END
-Index: libmilter/handler.c
-diff -pur libmilter-orig/handler.c libmilter/handler.c
---- libmilter-orig/handler.c 2006-07-30 16:11:14.000000000 +0300
-+++ libmilter/handler.c 2006-07-30 16:12:29.000000000 +0300
-@@ -13,7 +13,6 @@ SM_RCSID("@(#)$Id: handler.c,v 8.36 2003
-
- #include "libmilter.h"
-
--
- /*
- ** HANDLE_SESSION -- Handle a connected session in its own context
- **
-@@ -34,15 +33,8 @@ mi_handle_session(ctx)
- return MI_FAILURE;
- ctx->ctx_id = (sthread_t) sthread_get_id();
-
-- /*
-- ** Detach so resources are free when the thread returns.
-- ** If we ever "wait" for threads, this call must be removed.
-- */
--
-- if (pthread_detach(ctx->ctx_id) != 0)
-- ret = MI_FAILURE;
-- else
-- ret = mi_engine(ctx);
-+ ret = mi_engine(ctx);
-+
- if (ValidSocket(ctx->ctx_sd))
- {
- (void) closesocket(ctx->ctx_sd);
-Index: libmilter/libmilter.h
-diff -pur libmilter-orig/libmilter.h libmilter/libmilter.h
---- libmilter-orig/libmilter.h 2006-07-30 16:11:14.000000000 +0300
-+++ libmilter/libmilter.h 2006-07-30 16:12:29.000000000 +0300
-@@ -39,15 +39,7 @@ SM_IDSTR(MilterlId, "@(#)$Id: libmilter.
- # define MI_SOCK_READ_FAIL(x) ((x) < 0)
- # define MI_SOCK_WRITE(s, b, l) write(s, b, l)
-
--# define thread_create(ptid,wr,arg) pthread_create(ptid, NULL, wr, arg)
--# define sthread_get_id() pthread_self()
--
--typedef pthread_mutex_t smutex_t;
--# define smutex_init(mp) (pthread_mutex_init(mp, NULL) == 0)
--# define smutex_destroy(mp) (pthread_mutex_destroy(mp) == 0)
--# define smutex_lock(mp) (pthread_mutex_lock(mp) == 0)
--# define smutex_unlock(mp) (pthread_mutex_unlock(mp) == 0)
--# define smutex_trylock(mp) (pthread_mutex_trylock(mp) == 0)
-+# define sthread_get_id() getpid()
-
- #if SM_CONF_POLL
-
-Index: libmilter/listener.c
-diff -pur libmilter-orig/listener.c libmilter/listener.c
---- libmilter-orig/listener.c 2006-07-30 16:11:14.000000000 +0300
-+++ libmilter/listener.c 2006-07-30 17:10:53.000000000 +0300
-@@ -12,7 +12,7 @@
- SM_RCSID("@(#)$Id$")
-
- /*
--** listener.c -- threaded network listener
-+** listener.c -- a network listener
- */
-
- #include "libmilter.h"
-@@ -26,7 +26,6 @@ SM_RCSID("@(#)$Id: listener.c,v 8.115 20
- # include <arpa/inet.h>
- # endif /* NETINET || NETINET6 */
-
--static smutex_t L_Mutex;
- static int L_family;
- static SOCKADDR_LEN_T L_socksize;
- static socket_t listenfd = INVALID_SOCKET;
-@@ -69,15 +68,12 @@ mi_opensocket(conn, backlog, dbg, rmsock
- "%s: Opening listen socket on conn %s",
- smfi->xxfi_name, conn);
- }
-- (void) smutex_init(&L_Mutex);
-- (void) smutex_lock(&L_Mutex);
- listenfd = mi_milteropen(conn, backlog, rmsocket, smfi->xxfi_name);
- if (!ValidSocket(listenfd))
- {
- smi_log(SMI_LOG_FATAL,
- "%s: Unable to create listening socket on conn %s",
- smfi->xxfi_name, conn);
-- (void) smutex_unlock(&L_Mutex);
- return MI_FAILURE;
- }
- #if !SM_CONF_POLL
-@@ -85,11 +81,9 @@ mi_opensocket(conn, backlog, dbg, rmsock
- {
- smi_log(SMI_LOG_ERR, "%s: fd %d is larger than FD_SETSIZE %d",
- smfi->xxfi_name, listenfd, FD_SETSIZE);
-- (void) smutex_unlock(&L_Mutex);
- return MI_FAILURE;
- }
- #endif /* !SM_CONF_POLL */
-- (void) smutex_unlock(&L_Mutex);
- return MI_SUCCESS;
- }
-
-@@ -549,22 +543,6 @@ mi_milteropen(conn, backlog, rmsocket, n
- L_family = addr.sa.sa_family;
- return sock;
- }
--/*
--** MI_THREAD_HANDLE_WRAPPER -- small wrapper to handle session
--**
--** Parameters:
--** arg -- argument to pass to mi_handle_session()
--**
--** Returns:
--** results from mi_handle_session()
--*/
--
--static void *
--mi_thread_handle_wrapper(arg)
-- void *arg;
--{
-- return (void *) mi_handle_session(arg);
--}
-
- /*
- ** MI_CLOSENER -- close listen socket
-@@ -579,7 +557,6 @@ mi_thread_handle_wrapper(arg)
- void
- mi_closener()
- {
-- (void) smutex_lock(&L_Mutex);
- if (ValidSocket(listenfd))
- {
- #if NETUNIX
-@@ -624,7 +601,6 @@ mi_closener()
- }
- #endif /* NETUNIX */
- }
-- (void) smutex_unlock(&L_Mutex);
- }
-
- /*
-@@ -693,6 +669,23 @@ mi_closener()
- #else /* BROKEN_PTHREAD_SLEEP */
- # define MI_SLEEP(s) sleep((s))
- #endif /* BROKEN_PTHREAD_SLEEP */
-+
-+int
-+start_subprocess(int (*handler)(SMFICTX_PTR ctx), SMFICTX_PTR ctx)
-+{
-+ pid_t pid = fork();
-+ if (pid == -1)
-+ return -1;
-+ if (pid != 0)
-+ return 0;
-+
-+ /* Child */
-+ close(listenfd);
-+ listenfd = INVALID_SOCKET;
-+ reset_signals();
-+ exit(handler(ctx));
-+}
-+
-
- int
- mi_listener(conn, dbg, smfi, timeout, backlog)
-@@ -714,7 +707,6 @@ mi_listener(conn, dbg, smfi, timeout, ba
- int acnt = 0; /* error count for accept() failures */
- int scnt = 0; /* error count for select() failures */
- int save_errno = 0;
-- sthread_t thread_id;
- _SOCK_ADDR cliaddr;
- SOCKADDR_LEN_T clilen;
- SMFICTX_PTR ctx;
-@@ -727,14 +719,12 @@ mi_listener(conn, dbg, smfi, timeout, ba
- clilen = L_socksize;
- while ((mistop = mi_stop()) == MILTER_CONT)
- {
-- (void) smutex_lock(&L_Mutex);
- if (!ValidSocket(listenfd))
- {
- ret = MI_FAILURE;
- smi_log(SMI_LOG_ERR,
- "%s: listenfd=%d corrupted, terminating, errno=%d",
- smfi->xxfi_name, listenfd, errno);
-- (void) smutex_unlock(&L_Mutex);
- break;
- }
-
-@@ -745,13 +735,11 @@ mi_listener(conn, dbg, smfi, timeout, ba
- r = FD_RD_READY(listenfd, rds, excs, &chktime);
- if (r == 0) /* timeout */
- {
-- (void) smutex_unlock(&L_Mutex);
- continue; /* just check mi_stop() */
- }
- if (r < 0)
- {
- save_errno = errno;
-- (void) smutex_unlock(&L_Mutex);
- if (save_errno == EINTR)
- continue;
- scnt++;
-@@ -771,7 +759,6 @@ mi_listener(conn, dbg, smfi, timeout, ba
- {
- /* some error: just stop for now... */
- ret = MI_FAILURE;
-- (void) smutex_unlock(&L_Mutex);
- smi_log(SMI_LOG_ERR,
- "%s: %s() returned exception for socket, abort",
- smfi->xxfi_name, MI_POLLSELECT);
-@@ -783,7 +770,6 @@ mi_listener(conn, dbg, smfi, timeout, ba
- connfd = accept(listenfd, (struct sockaddr *) &cliaddr,
- &clilen);
- save_errno = errno;
-- (void) smutex_unlock(&L_Mutex);
-
- /*
- ** If remote side closes before
-@@ -920,18 +906,18 @@ mi_listener(conn, dbg, smfi, timeout, ba
- if (smfi->xxfi_body == NULL)
- ctx->ctx_pflags |= SMFIP_NOBODY;
-
-- if ((r = thread_create(&thread_id,
-- mi_thread_handle_wrapper,
-- (void *) ctx)) != 0)
-+ r = start_subprocess(mi_handle_session, ctx);
-+ (void) closesocket(connfd);
-+ free(ctx);
-+
-+ if (r != 0)
- {
- tcnt++;
- smi_log(SMI_LOG_ERR,
-- "%s: thread_create() failed: %d, %s",
-- smfi->xxfi_name, r,
-+ "%s: start_subprocess() failed: %d, %s",
-+ smfi->xxfi_name, errno,
- tcnt >= MAX_FAILS_T ? "abort" : "try again");
- MI_SLEEP(tcnt);
-- (void) closesocket(connfd);
-- free(ctx);
- if (tcnt >= MAX_FAILS_T)
- {
- ret = MI_FAILURE;
-@@ -950,6 +936,7 @@ mi_listener(conn, dbg, smfi, timeout, ba
- smfi->xxfi_name, mistop);
- mi_closener();
- }
-- (void) smutex_destroy(&L_Mutex);
- return ret;
- }
-+
-+
-Index: libmilter/main.c
-diff -pur libmilter-orig/main.c libmilter/main.c
---- libmilter-orig/main.c 2006-07-30 16:11:14.000000000 +0300
-+++ libmilter/main.c 2006-07-30 16:12:29.000000000 +0300
-@@ -15,7 +15,8 @@ SM_RCSID("@(#)$Id: main.c,v 8.79 2003/10
- #include "libmilter.h"
- #include <fcntl.h>
- #include <sys/stat.h>
--
-+#include <sys/types.h>
-+#include <sys/wait.h>
-
- static smfiDesc_ptr smfi = NULL;
-
-@@ -200,6 +201,76 @@ smfi_setbacklog(obacklog)
- return MI_SUCCESS;
- }
-
-+static int MilterStop = MILTER_CONT;
-+
-+int
-+mi_stop()
-+{
-+ return MilterStop;
-+}
-+
-+void
-+mi_stop_milters(int v)
-+{
-+ if (MilterStop < v)
-+ MilterStop = v;
-+ mi_closener();
-+ kill(0, SIGKILL);
-+ /* FIXME: Wait for subprocesses to finish? */
-+}
-+
-+static void
-+sig_stop(sig)
-+ int sig;
-+{
-+ MilterStop = MILTER_STOP;
-+}
-+
-+static void
-+sig_child(sig)
-+ int sig;
-+{
-+ pid_t pid;
-+ int status;
-+
-+ while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
-+ if (WIFEXITED(status)) {
-+ if (WEXITSTATUS(status))
-+ smi_log(SMI_LOG_WARN,
-+ "Child %lu exited with status %d",
-+ (unsigned long) pid,
-+ WEXITSTATUS(status));
-+ } else if (WIFSIGNALED(status))
-+ smi_log(SMI_LOG_WARN,
-+ "Child %lu terminated on signal %d",
-+ WTERMSIG(status));
-+ else
-+ smi_log(SMI_LOG_WARN,
-+ "Child %lu terminated, reason unknown",
-+ WTERMSIG(status));
-+ }
-+ signal (sig, sig_child);
-+}
-+
-+void
-+setup_signals()
-+{
-+ signal(SIGPIPE, SIG_IGN);
-+ signal(SIGCHLD, sig_child);
-+ signal(SIGHUP, sig_stop);
-+ signal(SIGTERM, sig_stop);
-+ signal(SIGINT, sig_stop);
-+}
-+
-+void
-+reset_signals()
-+{
-+ signal(SIGPIPE, SIG_DFL);
-+ signal(SIGCHLD, SIG_DFL);
-+ signal(SIGHUP, SIG_DFL);
-+ signal(SIGTERM, SIG_DFL);
-+ signal(SIGINT, SIG_DFL);
-+}
-
- /*
- ** SMFI_MAIN -- setup milter connnection and start listener.
-@@ -216,7 +287,9 @@ smfi_main()
- {
- int r;
-
-- (void) signal(SIGPIPE, SIG_IGN);
-+ setup_signals();
-+ setsid();
-+
- if (conn == NULL)
- {
- smi_log(SMI_LOG_FATAL, "%s: missing connection information",
-@@ -224,14 +297,6 @@ smfi_main()
- return MI_FAILURE;
- }
-
-- (void) atexit(mi_clean_signals);
-- if (mi_control_startup(smfi->xxfi_name) != MI_SUCCESS)
-- {
-- smi_log(SMI_LOG_FATAL,
-- "%s: Couldn't start signal thread",
-- smfi->xxfi_name);
-- return MI_FAILURE;
-- }
- r = MI_SUCCESS;
-
- /* Startup the listener */

Return to:

Send suggestions and report system problems to the System administrator.