diff options
Diffstat (limited to 'usr.sbin/smtpd/control.c')
| -rw-r--r-- | usr.sbin/smtpd/control.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/usr.sbin/smtpd/control.c b/usr.sbin/smtpd/control.c index e1eb8a925a9..86de6d06357 100644 --- a/usr.sbin/smtpd/control.c +++ b/usr.sbin/smtpd/control.c @@ -1,4 +1,4 @@ -/* $OpenBSD: control.c,v 1.78 2012/11/12 14:58:53 eric Exp $ */ +/* $OpenBSD: control.c,v 1.79 2012/11/20 09:47:45 eric Exp $ */ /* * Copyright (c) 2012 Gilles Chehade <gilles@openbsd.org> @@ -94,6 +94,28 @@ control_imsg(struct imsgev *iev, struct imsg *imsg) return; } } + if (iev->proc == PROC_SCHEDULER) { + switch (imsg->hdr.type) { + case IMSG_SCHEDULER_MESSAGES: + c = control_connbyfd(imsg->hdr.peerid); + if (c == NULL) + return; + imsg_compose_event(&c->iev, IMSG_SCHEDULER_MESSAGES, 0, + 0, -1, imsg->data, imsg->hdr.len-sizeof imsg->hdr); + return; + } + } + if (iev->proc == PROC_QUEUE) { + switch (imsg->hdr.type) { + case IMSG_SCHEDULER_ENVELOPES: + c = control_connbyfd(imsg->hdr.peerid); + if (c == NULL) + return; + imsg_compose_event(&c->iev, IMSG_SCHEDULER_ENVELOPES, 0, + 0, -1, imsg->data, imsg->hdr.len-sizeof imsg->hdr); + return; + } + } switch (imsg->hdr.type) { case IMSG_STAT_INCREMENT: @@ -591,6 +613,22 @@ control_dispatch_ext(int fd, short event, void *arg) imsg_compose_event(&c->iev, IMSG_CTL_OK, 0, 0, -1, NULL, 0); break; + case IMSG_SCHEDULER_MESSAGES: + if (euid) + goto badcred; + imsg_compose_event(env->sc_ievs[PROC_SCHEDULER], + IMSG_SCHEDULER_MESSAGES, fd, 0, -1, imsg.data, + imsg.hdr.len - sizeof(imsg.hdr)); + break; + + case IMSG_SCHEDULER_ENVELOPES: + if (euid) + goto badcred; + imsg_compose_event(env->sc_ievs[PROC_SCHEDULER], + IMSG_SCHEDULER_ENVELOPES, fd, 0, -1, imsg.data, + imsg.hdr.len - sizeof(imsg.hdr)); + break; + case IMSG_SCHEDULER_SCHEDULE: if (euid) goto badcred; |
