Commit Diff


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: