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.c40
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;