summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/control.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/smtpd/control.c')
-rw-r--r--usr.sbin/smtpd/control.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/usr.sbin/smtpd/control.c b/usr.sbin/smtpd/control.c
index 72554b51013..f5ea8296c75 100644
--- a/usr.sbin/smtpd/control.c
+++ b/usr.sbin/smtpd/control.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: control.c,v 1.116 2016/09/04 16:10:31 eric Exp $ */
+/* $OpenBSD: control.c,v 1.117 2016/09/08 12:06:43 eric Exp $ */
/*
* Copyright (c) 2012 Gilles Chehade <gilles@poolp.org>
@@ -63,7 +63,6 @@ static void control_shutdown(void);
static void control_listen(void);
static void control_accept(int, short, void *);
static void control_close(struct ctl_conn *);
-static void control_sig_handler(int, short, void *);
static void control_dispatch_ext(struct mproc *, struct imsg *);
static void control_digest_update(const char *, size_t, int);
static void control_broadcast_verbose(int, int);
@@ -89,6 +88,12 @@ control_imsg(struct mproc *p, struct imsg *imsg)
const void *data;
size_t sz;
+ if (imsg == NULL) {
+ if (p->proc != PROC_CLIENT)
+ control_shutdown();
+ return;
+ }
+
if (p->proc == PROC_PONY) {
switch (imsg->hdr.type) {
case IMSG_CTL_SMTP_SESSION:
@@ -186,19 +191,6 @@ control_imsg(struct mproc *p, struct imsg *imsg)
imsg_to_str(imsg->hdr.type));
}
-static void
-control_sig_handler(int sig, short event, void *p)
-{
- switch (sig) {
- case SIGINT:
- case SIGTERM:
- control_shutdown();
- break;
- default:
- fatalx("control_sig_handler: unexpected signal");
- }
-}
-
int
control_create_socket(void)
{
@@ -245,8 +237,6 @@ int
control(void)
{
struct passwd *pw;
- struct event ev_sigint;
- struct event ev_sigterm;
purge_config(PURGE_EVERYTHING);
@@ -271,10 +261,8 @@ control(void)
imsg_callback = control_imsg;
event_init();
- signal_set(&ev_sigint, SIGINT, control_sig_handler, NULL);
- signal_set(&ev_sigterm, SIGTERM, control_sig_handler, NULL);
- signal_add(&ev_sigint, NULL);
- signal_add(&ev_sigterm, NULL);
+ signal(SIGINT, SIG_IGN);
+ signal(SIGTERM, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, SIG_IGN);
@@ -305,7 +293,7 @@ control(void)
static void
control_shutdown(void)
{
- log_info("info: control process exiting");
+ log_debug("debug: control agent exiting");
_exit(0);
}