From a0a42860d214974f2706d2a47203af9bc884f512 Mon Sep 17 00:00:00 2001 From: Omar Polo Date: Sat, 24 Jun 2023 09:14:35 +0000 Subject: [PATCH] send host addresses to the server process --- config.c | 26 ++++++++++++++++++++++++++ gmid.h | 1 + server.c | 1 + 3 files changed, 28 insertions(+) diff --git a/config.c b/config.c index 61fec21..5899f9e 100644 --- a/config.c +++ b/config.c @@ -307,6 +307,7 @@ config_send(struct conf *conf) TAILQ_FOREACH(h, &conf->hosts, vhosts) { struct vhost vcopy; + struct address *addr, acopy; memcpy(&vcopy, h, sizeof(vcopy)); vcopy.cert_path = NULL; @@ -329,6 +330,21 @@ config_send(struct conf *conf) return -1; } + TAILQ_FOREACH(addr, &h->addrs, addrs) { + memcpy(&acopy, addr, sizeof(acopy)); + memset(&acopy.addrs, 0, sizeof(acopy.addrs)); + + if (proc_compose(ps, PROC_SERVER, + IMSG_RECONF_HOST_ADDR, &acopy, sizeof(acopy)) + == -1) + return -1; + } + + if (proc_flush_imsg(ps, PROC_SERVER, -1) == -1) { + log_warn("%s: proc_fush_imsg", __func__); + return -1; + } + TAILQ_FOREACH(l, &h->locations, locations) { struct location lcopy; int fd = -1; @@ -598,6 +614,16 @@ config_recv(struct conf *conf, struct imsg *imsg) h->domain); break; + case IMSG_RECONF_HOST_ADDR: + log_debug("receiving host addr"); + if (h == NULL) + fatalx("recv'd host address withouth host"); + IMSG_SIZE_CHECK(imsg, addr); + addr = xcalloc(1, sizeof(*addr)); + memcpy(addr, imsg->data, datalen); + TAILQ_INSERT_TAIL(&h->addrs, addr, addrs); + break; + case IMSG_RECONF_LOC: if (h == NULL) fatalx("recv'd location without host"); diff --git a/gmid.h b/gmid.h index 8947e68..04fee36 100644 --- a/gmid.h +++ b/gmid.h @@ -346,6 +346,7 @@ enum imsg_type { IMSG_RECONF_CERT, IMSG_RECONF_KEY, IMSG_RECONF_OCSP, + IMSG_RECONF_HOST_ADDR, IMSG_RECONF_LOC, IMSG_RECONF_ENV, IMSG_RECONF_ALIAS, diff --git a/server.c b/server.c index 18e8c91..30b67b8 100644 --- a/server.c +++ b/server.c @@ -1518,6 +1518,7 @@ server_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg) case IMSG_RECONF_CERT: case IMSG_RECONF_KEY: case IMSG_RECONF_OCSP: + case IMSG_RECONF_HOST_ADDR: case IMSG_RECONF_LOC: case IMSG_RECONF_ENV: case IMSG_RECONF_ALIAS: