summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2017-08-11 18:00:38 +0000
committerkrw <krw@openbsd.org>2017-08-11 18:00:38 +0000
commite2038c9d9672d38ab6d06d3202c1174862262f70 (patch)
tree0cc92a5fb568d0682e189c3067f84ba19f68a003
parentUse getopts for option parsing (diff)
downloadwireguard-openbsd-e2038c9d9672d38ab6d06d3202c1174862262f70.tar.xz
wireguard-openbsd-e2038c9d9672d38ab6d06d3202c1174862262f70.zip
Don't write out resolv.conf unless the contents
are changed or dhclient's interface takes over the default route.
-rw-r--r--sbin/dhclient/privsep.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sbin/dhclient/privsep.c b/sbin/dhclient/privsep.c
index 7d77fc1662b..4b48908d1c3 100644
--- a/sbin/dhclient/privsep.c
+++ b/sbin/dhclient/privsep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: privsep.c,v 1.63 2017/08/10 17:15:05 krw Exp $ */
+/* $OpenBSD: privsep.c,v 1.64 2017/08/11 18:00:38 krw Exp $ */
/*
* Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
@@ -41,10 +41,11 @@ dispatch_imsg(char *name, int rdomain, int ioctlfd, int routefd,
struct imsgbuf *ibuf)
{
static char *resolv_conf;
+ static int lastidx;
struct imsg imsg;
ssize_t n;
size_t sz;
- int index;
+ int index, newidx;
index = if_nametoindex(name);
if (index == 0)
@@ -114,15 +115,19 @@ dispatch_imsg(char *name, int rdomain, int ioctlfd, int routefd,
strlcpy(resolv_conf,
imsg.data, sz);
}
+ lastidx = 0;
}
break;
case IMSG_WRITE_RESOLV_CONF:
if (imsg.hdr.len != IMSG_HEADER_SIZE)
log_warnx("bad IMSG_WRITE_RESOLV_CONF");
- else if (default_route_index(rdomain, routefd) ==
- index)
- priv_write_resolv_conf(resolv_conf);
+ else {
+ newidx = default_route_index(rdomain, routefd);
+ if (newidx == index && newidx != lastidx)
+ priv_write_resolv_conf(resolv_conf);
+ lastidx = newidx;
+ }
break;
case IMSG_HUP: