diff options
author | krw <krw@openbsd.org> | 2020-11-19 22:30:19 +0000 |
---|---|---|
committer | krw <krw@openbsd.org> | 2020-11-19 22:30:19 +0000 |
commit | 467775f8e0946934bce950d008911aae77e4683f (patch) | |
tree | 67034a921b95c573f5c01729f7e593dff1d9ad5a /sbin/dhclient | |
parent | Always check for EBUSY when the return value of ic_set_key() is tested. (diff) | |
download | wireguard-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.c | 8 | ||||
-rw-r--r-- | sbin/dhclient/kroute.c | 7 |
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) { |