diff options
author | Stef Walter <stef@memberwebs.com> | 2004-09-20 16:11:42 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2004-09-20 16:11:42 +0000 |
commit | df924a4670bb57435638bf797ea5edb27154cc67 (patch) | |
tree | e40a7b332aea5820bf36285409c801d341e9b8d5 /common | |
parent | 4e45f085f043f8f44236f2b84cf343d8fa03dc18 (diff) |
Complete fix of smtp fail logic
Diffstat (limited to 'common')
-rw-r--r-- | common/smtppass.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/common/smtppass.c b/common/smtppass.c index 7f2d833..6a30ad8 100644 --- a/common/smtppass.c +++ b/common/smtppass.c @@ -465,6 +465,8 @@ static void connection_loop(int sock) setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &(g_state.timeout), sizeof(g_state.timeout)) < 0) sp_message(NULL, LOG_WARNING, "couldn't set timeouts on incoming connection"); + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC); + /* Look for thread and also clean up others */ for(i = 0; i < g_state.max_threads; i++) { @@ -1333,7 +1335,7 @@ int sp_fail_data(spctx_t* ctx, const char* smtp_status) if(pref || crlf) { - x = (x > 256 ? 256 : x) + KL(SMTP_REJPREFIX) + KL(CRLF) + 1; + x = (len > 256 ? 256 : len) + KL(SMTP_REJPREFIX) + KL(CRLF) + 1; t = (char*)alloca(x + 1); /* Note that we truncate long lines */ @@ -1372,8 +1374,17 @@ static int read_server_response(spctx_t* ctx) return 0; } -void sp_setup_env(spctx_t* ctx, int file) +void sp_setup_forked(spctx_t* ctx, int file) { + /* Signals we've messed with */ + signal(SIGPIPE, SIG_DFL); + signal(SIGHUP, SIG_DFL); + signal(SIGINT, SIG_DFL); + signal(SIGTERM, SIG_DFL); + + siginterrupt(SIGINT, 0); + siginterrupt(SIGTERM, 0); + if(ctx->sender) setenv("SENDER", ctx->sender, 1); |