commit a0a42860d214974f2706d2a47203af9bc884f512 from: Omar Polo date: Sat Jun 24 09:14:35 2023 UTC send host addresses to the server process commit - 9fda962861db6c2322384e64fc737f25d4314d66 commit + a0a42860d214974f2706d2a47203af9bc884f512 blob - 61fec219e2b9e033732a8323b5994a6575bb41fd blob + 5899f9eb3b260b49596daed011908e55a4c0c79b --- config.c +++ 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; @@ -327,6 +328,21 @@ config_send(struct conf *conf) if (config_open_send(ps, PROC_SERVER, IMSG_RECONF_OCSP, h->ocsp_path) == -1) 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) { @@ -596,6 +612,16 @@ config_recv(struct conf *conf, struct imsg *imsg) if (load_file(imsg->fd, &h->ocsp, &h->ocsplen) == -1) fatalx("failed to load ocsp for %s", 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: blob - 8947e68a144d2bc7174694d25f5ccd307ba7b198 blob + 04fee36be9ee706b841a3e6f8fa81e7144deb242 --- gmid.h +++ 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, blob - 18e8c91350428e9f2187966fcc6e62397da4a3ca blob + 30b67b88539f333766c01ab536aaa63251e9bb5d --- server.c +++ server.c @@ -1518,6 +1518,7 @@ server_dispatch_parent(int fd, struct privsep_proc *p, 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: