summaryrefslogtreecommitdiffstats
path: root/sbin/dhclient
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2020-11-19 22:30:19 +0000
committerkrw <krw@openbsd.org>2020-11-19 22:30:19 +0000
commit467775f8e0946934bce950d008911aae77e4683f (patch)
tree67034a921b95c573f5c01729f7e593dff1d9ad5a /sbin/dhclient
parentAlways check for EBUSY when the return value of ic_set_key() is tested. (diff)
downloadwireguard-openbsd-467775f8e0946934bce950d008911aae77e4683f.tar.xz
wireguard-openbsd-467775f8e0946934bce950d008911aae77e4683f.zip
Avoid spurious resolv.conf updates when
1) The RTM_PROPOSAL telling unwind(8) about DNS servers is seen. 2) The interface is in the process of getting a new or renewed lease. 3) The default route is not UP. Edge cases discovered while debugging urtwn(4) link bouncing.
Diffstat (limited to 'sbin/dhclient')
-rw-r--r--sbin/dhclient/dhclient.c8
-rw-r--r--sbin/dhclient/kroute.c7
2 files changed, 9 insertions, 6 deletions
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index 315a04cc3de..47955e4d593 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhclient.c,v 1.681 2020/11/18 18:42:54 krw Exp $ */
+/* $OpenBSD: dhclient.c,v 1.682 2020/11/19 22:30:19 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -374,7 +374,8 @@ rtm_dispatch(struct interface_info *ifi, struct rt_msghdr *rtm)
release_lease(ifi); /* OK even if we sent it. */
ifi->state = S_PREBOOT;
quit = TERMINATE;
- }
+ } else
+ return; /* Ignore tell_unwind() proposals. */
break;
case RTM_DESYNC:
@@ -448,7 +449,8 @@ rtm_dispatch(struct interface_info *ifi, struct rt_msghdr *rtm)
*/
if (quit == 0 && ifi->active != NULL &&
(ifi->flags & IFI_AUTOCONF) != 0 &&
- (ifi->flags & IFI_IN_CHARGE) != 0)
+ (ifi->flags & IFI_IN_CHARGE) != 0 &&
+ ifi->state == S_BOUND)
write_resolv_conf();
}
diff --git a/sbin/dhclient/kroute.c b/sbin/dhclient/kroute.c
index 0cef5caecc3..d068b788db0 100644
--- a/sbin/dhclient/kroute.c
+++ b/sbin/dhclient/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.190 2020/11/18 16:31:47 krw Exp $ */
+/* $OpenBSD: kroute.c,v 1.191 2020/11/19 22:30:19 krw Exp $ */
/*
* Copyright 2012 Kenneth R Westerback <krw@openbsd.org>
@@ -619,7 +619,8 @@ default_route_index(int rdomain, int routefd)
if (m_rtmsg.m_rtm.rtm_version == RTM_VERSION &&
m_rtmsg.m_rtm.rtm_type == RTM_GET &&
m_rtmsg.m_rtm.rtm_pid == pid &&
- m_rtmsg.m_rtm.rtm_seq == seq) {
+ m_rtmsg.m_rtm.rtm_seq == seq &&
+ (m_rtmsg.m_rtm.rtm_flags & RTF_UP) == RTF_UP) {
if (m_rtmsg.m_rtm.rtm_errno != 0) {
log_warnx("%s: read(RTM_GET): %s", log_procname,
strerror(m_rtmsg.m_rtm.rtm_errno));
@@ -817,7 +818,7 @@ priv_write_resolv_conf(int index, int routefd, int rdomain, char *contents,
} while (newidx == 0 && retries < 3);
if (newidx == 0) {
- log_debug("%s: %s not updated, no default route",
+ log_debug("%s: %s not updated, no default route is UP",
log_procname, path);
return;
} else if (newidx != index) {