Hi,
Here is a diff to remove the "smtpctl stop" command.
The proper way to stop a daemon is kill(1)/pkill(1) only.
It makes no sense to have different code path for that.
Eric.
Index: control.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/control.c,v
retrieving revision 1.114
diff -u -p -r1.114 control.c
--- control.c 1 Sep 2016 10:54:25 -0000 1.114
+++ control.c 3 Sep 2016 17:42:37 -0000
@@ -485,7 +485,7 @@ control_dispatch_ext(struct mproc *p, st
switch (imsg->hdr.type) {
case IMSG_CTL_SMTP_SESSION:
- if (env->sc_flags & (SMTPD_SMTP_PAUSED | SMTPD_EXITING)) {
+ if (env->sc_flags & SMTPD_SMTP_PAUSED) {
m_compose(p, IMSG_CTL_FAIL, 0, 0, -1, NULL, 0);
return;
}
@@ -511,22 +511,6 @@ control_dispatch_ext(struct mproc *p, st
kvp->val = val;
}
m_compose(p, IMSG_CTL_GET_STATS, 0, 0, -1, kvp, sizeof *kvp);
- return;
-
- case IMSG_CTL_SHUTDOWN:
- /* NEEDS_FIX */
- log_debug("debug: received shutdown request");
-
- if (c->euid)
- goto badcred;
-
- if (env->sc_flags & SMTPD_EXITING) {
- m_compose(p, IMSG_CTL_FAIL, 0, 0, -1, NULL, 0);
- return;
- }
- env->sc_flags |= SMTPD_EXITING;
- m_compose(p, IMSG_CTL_OK, 0, 0, -1, NULL, 0);
- m_compose(p_parent, IMSG_CTL_SHUTDOWN, 0, 0, -1, NULL, 0);
return;
case IMSG_CTL_VERBOSE:
Index: smtpctl.8
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtpctl.8,v
retrieving revision 1.57
diff -u -p -r1.57 smtpctl.8
--- smtpctl.8 14 Jun 2016 22:40:48 -0000 1.57
+++ smtpctl.8 3 Sep 2016 17:42:37 -0000
@@ -245,8 +245,6 @@ Displays runtime statistics concerning
.Xr smtpd 8 .
.It Cm show status
Shows if MTA, MDA and SMTP systems are currently running or paused.
-.It Cm stop
-Stop the server.
.It Cm trace Ar subsystem
Enables real-time tracing of
.Ar subsystem .
Index: smtpctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtpctl.c,v
retrieving revision 1.150
diff -u -p -r1.150 smtpctl.c
--- smtpctl.c 3 Sep 2016 16:06:26 -0000 1.150
+++ smtpctl.c 3 Sep 2016 17:42:37 -0000
@@ -864,13 +864,6 @@ do_show_status(int argc, struct paramete
}
static int
-do_stop(int argc, struct parameter *argv)
-{
- srv_send(IMSG_CTL_SHUTDOWN, NULL, 0);
- return srv_check_result(1);
-}
-
-static int
do_trace(int argc, struct parameter *argv)
{
int v;
@@ -1080,7 +1073,6 @@ main(int argc, char **argv)
cmd_install("show routes", do_show_routes);
cmd_install("show stats", do_show_stats);
cmd_install("show status", do_show_status);
- cmd_install("stop", do_stop);
cmd_install("trace <str>", do_trace);
cmd_install("uncorrupt <msgid>", do_uncorrupt);
cmd_install("unprofile <str>", do_unprofile);
Index: smtpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtpd.c,v
retrieving revision 1.282
diff -u -p -r1.282 smtpd.c
--- smtpd.c 1 Sep 2016 10:54:25 -0000 1.282
+++ smtpd.c 3 Sep 2016 17:42:37 -0000
@@ -257,10 +257,6 @@ parent_imsg(struct mproc *p, struct imsg
m_end(&m);
profiling = v;
return;
-
- case IMSG_CTL_SHUTDOWN:
- parent_shutdown(0);
- return;
}
}
@@ -1752,7 +1748,6 @@ imsg_to_str(int type)
CASE(IMSG_CTL_REMOVE);
CASE(IMSG_CTL_SCHEDULE);
CASE(IMSG_CTL_SHOW_STATUS);
- CASE(IMSG_CTL_SHUTDOWN);
CASE(IMSG_CTL_TRACE_DISABLE);
CASE(IMSG_CTL_TRACE_ENABLE);
CASE(IMSG_CTL_UPDATE_TABLE);
Index: smtpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtpd.h,v
retrieving revision 1.522
diff -u -p -r1.522 smtpd.h
--- smtpd.h 3 Sep 2016 16:06:26 -0000 1.522
+++ smtpd.h 3 Sep 2016 17:42:37 -0000
@@ -161,7 +161,7 @@ union lookup {
* Bump IMSG_VERSION whenever a change is made to enum imsg_type.
* This will ensure that we can never use a wrong version of smtpctl with
smtpd.
*/
-#define IMSG_VERSION 15
+#define IMSG_VERSION 16
enum imsg_type {
IMSG_NONE,
@@ -195,7 +195,6 @@ enum imsg_type {
IMSG_CTL_REMOVE,
IMSG_CTL_SCHEDULE,
IMSG_CTL_SHOW_STATUS,
- IMSG_CTL_SHUTDOWN,
IMSG_CTL_TRACE_DISABLE,
IMSG_CTL_TRACE_ENABLE,
IMSG_CTL_UPDATE_TABLE,
@@ -572,7 +571,7 @@ struct smtpd {
#define SMTPD_OPT_NOACTION 0x00000002
uint32_t sc_opts;
-#define SMTPD_EXITING 0x00000001
+#define SMTPD_EXITING 0x00000001 /* unused */
#define SMTPD_MDA_PAUSED 0x00000002
#define SMTPD_MTA_PAUSED 0x00000004
#define SMTPD_SMTP_PAUSED 0x00000008