Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/bsd/dhcpcd/dist Update to dhcpcd-9.0.0 with the fol...
details: https://anonhg.NetBSD.org/src/rev/8432ecd6525a
branches: trunk
changeset: 970719:8432ecd6525a
user: roy <roy%NetBSD.org@localhost>
date: Thu Apr 02 12:38:54 2020 +0000
description:
Update to dhcpcd-9.0.0 with the following changes:
* Decode interface complex interface names eth0.100:2 eth0i100:2.
This allows us to ignore some virtual interfaces by default
* ARP: Report L2 header address on conflict for more clarity
* DHCP: Support jumbo frames (untested)
* DHCP6: Clean up old lease on failure to confirm/rebind, etc
* RA: Prefer older routers
* INET6: Obscure prefixes are now calculated correctly
* Privilege Separation
* default hostname is now a blank string rather than localhost
* Leases are now dumped over the control socket - you get RA's now as well.
* Better support for many IPv6 routers
* RTM_MISS filtering
* RA: Deprecate stale addresses by setting pltime 0
* DHCP6: Deprecate stale addresses by setting pltime 0
diffstat:
external/bsd/dhcpcd/dist/LICENSE | 2 +-
external/bsd/dhcpcd/dist/README.md | 10 +-
external/bsd/dhcpcd/dist/hooks/00-linux | 11 +
external/bsd/dhcpcd/dist/hooks/30-hostname.in | 158 ++++
external/bsd/dhcpcd/dist/hooks/dhcpcd-run-hooks.8.in | 15 +-
external/bsd/dhcpcd/dist/src/arp.c | 166 +++-
external/bsd/dhcpcd/dist/src/arp.h | 12 +-
external/bsd/dhcpcd/dist/src/auth.c | 2 +-
external/bsd/dhcpcd/dist/src/auth.h | 2 +-
external/bsd/dhcpcd/dist/src/bpf.h | 4 +-
external/bsd/dhcpcd/dist/src/common.c | 5 +-
external/bsd/dhcpcd/dist/src/common.h | 71 +-
external/bsd/dhcpcd/dist/src/control.c | 57 +-
external/bsd/dhcpcd/dist/src/control.h | 5 +-
external/bsd/dhcpcd/dist/src/defs.h | 14 +-
external/bsd/dhcpcd/dist/src/dev.h | 2 +-
external/bsd/dhcpcd/dist/src/dhcp-common.c | 2 +-
external/bsd/dhcpcd/dist/src/dhcp-common.h | 5 +-
external/bsd/dhcpcd/dist/src/dhcp.h | 10 +-
external/bsd/dhcpcd/dist/src/dhcp6.h | 27 +-
external/bsd/dhcpcd/dist/src/dhcpcd-embedded.c | 12 +-
external/bsd/dhcpcd/dist/src/dhcpcd-embedded.h | 2 +-
external/bsd/dhcpcd/dist/src/dhcpcd.conf.5.in | 42 +-
external/bsd/dhcpcd/dist/src/dhcpcd.h | 28 +-
external/bsd/dhcpcd/dist/src/duid.c | 26 +-
external/bsd/dhcpcd/dist/src/duid.h | 6 +-
external/bsd/dhcpcd/dist/src/eloop.c | 337 +++++--
external/bsd/dhcpcd/dist/src/eloop.h | 44 +-
external/bsd/dhcpcd/dist/src/if-options.h | 12 +-
external/bsd/dhcpcd/dist/src/if.c | 137 ++-
external/bsd/dhcpcd/dist/src/if.h | 41 +-
external/bsd/dhcpcd/dist/src/ipv4.c | 3 +-
external/bsd/dhcpcd/dist/src/ipv4.h | 2 +-
external/bsd/dhcpcd/dist/src/ipv4ll.c | 6 +-
external/bsd/dhcpcd/dist/src/ipv4ll.h | 2 +-
external/bsd/dhcpcd/dist/src/ipv6nd.h | 14 +-
external/bsd/dhcpcd/dist/src/logerr.h | 48 +-
external/bsd/dhcpcd/dist/src/privsep-bpf.c | 374 +++++++++
external/bsd/dhcpcd/dist/src/privsep-bpf.h | 51 +
external/bsd/dhcpcd/dist/src/privsep-bsd.c | 123 +++
external/bsd/dhcpcd/dist/src/privsep-inet.c | 622 ++++++++++++++++
external/bsd/dhcpcd/dist/src/privsep-inet.h | 58 +
external/bsd/dhcpcd/dist/src/privsep-root.c | 589 +++++++++++++++
external/bsd/dhcpcd/dist/src/privsep-root.h | 54 +
external/bsd/dhcpcd/dist/src/privsep.c | 736 +++++++++++++++++++
external/bsd/dhcpcd/dist/src/privsep.h | 171 ++++
external/bsd/dhcpcd/dist/src/route.c | 31 +-
external/bsd/dhcpcd/dist/src/route.h | 2 +-
external/bsd/dhcpcd/dist/src/sa.c | 2 +-
external/bsd/dhcpcd/dist/src/sa.h | 2 +-
external/bsd/dhcpcd/dist/src/script.h | 8 +-
51 files changed, 3753 insertions(+), 412 deletions(-)
diffs (truncated from 5594 to 300 lines):
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/LICENSE
--- a/external/bsd/dhcpcd/dist/LICENSE Thu Apr 02 12:35:13 2020 +0000
+++ b/external/bsd/dhcpcd/dist/LICENSE Thu Apr 02 12:38:54 2020 +0000
@@ -1,4 +1,4 @@
-Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
+Copyright (c) 2006-2020 Roy Marples <roy%marples.name@localhost>
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/README.md
--- a/external/bsd/dhcpcd/dist/README.md Thu Apr 02 12:35:13 2020 +0000
+++ b/external/bsd/dhcpcd/dist/README.md Thu Apr 02 12:38:54 2020 +0000
@@ -89,11 +89,19 @@
dhcpcd-7 defaults the database directory to `/var/db/dhcpcd` instead of
`/var/db` and now stores dhcpcd.duid and dhcpcd.secret in there instead of
in /etc.
+dhcpcd-9 requires this directory and contents to be writeable by the
+unprivileged user (default _dhcpcd).
The Makefile `_confinstall` target will attempt to move the files correctly from
the old locations to the new locations.
-Of course this won't work if dhcpcd-7 is packaged up, so packagers will need to
+
+Of course this won't work if dhcpcd is packaged up, so packagers will need to
install similar logic into their dhcpcd package.
+dhcpcd-9 defaults the run directory to `/var/run/dhcpcd` instead of
+`/var/run` and the prefix of dhcpcd has been removed from the files.
+dhcpcd-9 may also run in a chroot, `/var/chroot/dhcpcd` so all the files
+could be relative to that.
+
## ChangeLog
We no longer supply a ChangeLog.
However, you're more than welcome to read the
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/hooks/00-linux
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/00-linux Thu Apr 02 12:38:54 2020 +0000
@@ -0,0 +1,11 @@
+# setup chroot mounts
+
+if [ "$reason" = CHROOT ] && [ -n "$chroot" ]; then
+ for d in /dev /proc /sys /run/udev; do
+ [ -d "$d" ] || continue
+ if ! mountpoint -q "$chroot$d"; then
+ mkdir -p "$chroot$d"
+ mount --bind $d "$chroot$d"
+ fi
+ done
+fi
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/hooks/30-hostname.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/30-hostname.in Thu Apr 02 12:38:54 2020 +0000
@@ -0,0 +1,158 @@
+# Set the hostname from DHCP data if required
+
+# A hostname can either be a short hostname or a FQDN.
+# hostname_fqdn=true
+# hostname_fqdn=false
+# hostname_fqdn=server
+
+# A value of server means just what the server says, don't manipulate it.
+# This could lead to an inconsistent hostname on a DHCPv4 and DHCPv6 network
+# where the DHCPv4 hostname is short and the DHCPv6 has an FQDN.
+# DHCPv6 has no hostname option.
+# RFC4702 section 3.1 says FQDN should be prefered over hostname.
+#
+# As such, the default is hostname_fqdn=true so that a consistent hostname
+# is always assigned.
+: ${hostname_fqdn:=true}
+
+# If we used to set the hostname, but relinquish control of it, we should
+# reset to the default value.
+: ${hostname_default=@DEFAULT_HOSTNAME@}
+
+# Some systems don't have hostname(1)
+_hostname()
+{
+ if [ -z "${1+x}" ]; then
+ if [ -r /proc/sys/kernel/hostname ]; then
+ read name </proc/sys/kernel/hostname && echo "$name"
+ elif type hostname >/dev/null 2>/dev/null; then
+ hostname
+ elif sysctl kern.hostname >/dev/null 2>&1; then
+ sysctl -n kern.hostname
+ elif sysctl kernel.hostname >/dev/null 2>&1; then
+ sysctl -n kernel.hostname
+ else
+ return 1
+ fi
+ return $?
+ fi
+
+ if [ -w /proc/sys/kernel/hostname ]; then
+ echo "$1" >/proc/sys/kernel/hostname
+ elif [ -n "$1" ] && type hostname >/dev/null 2>&1; then
+ hostname "$1"
+ elif sysctl kern.hostname >/dev/null 2>&1; then
+ sysctl -w "kern.hostname=$1" >/dev/null
+ elif sysctl kernel.hostname >/dev/null 2>&1; then
+ sysctl -w "kernel.hostname=$1" >/dev/null
+ else
+ # May fail to set a blank hostname
+ hostname "$1"
+ fi
+}
+
+is_default_hostname()
+{
+ case "$1" in
+ ""|"$hostname_default"|localhost|localhost.localdomain)
+ return 0;;
+ esac
+ return 1
+}
+
+need_hostname()
+{
+ # Always load the hostname variable for future use
+ hostname="$(_hostname)"
+ is_default_hostname "$hostname" && return 0
+
+ case "$force_hostname" in
+ [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) return 0;;
+ esac
+
+ if [ -n "$old_fqdn" ]; then
+ if ${hfqdn} || ! ${hshort}; then
+ [ "$hostname" = "$old_fqdn" ]
+ else
+ [ "$hostname" = "${old_fqdn%%.*}" ]
+ fi
+ elif [ -n "$old_host_name" ]; then
+ if ${hfqdn}; then
+ if [ -n "$old_domain_name" ] &&
+ [ "$old_host_name" = "${old_host_name#*.}" ]
+ then
+ [ "$hostname" = \
+ "$old_host_name.$old_domain_name" ]
+ else
+ [ "$hostname" = "$old_host_name" ]
+ fi
+ elif ${hshort}; then
+ [ "$hostname" = "${old_host_name%%.*}" ]
+ else
+ [ "$hostname" = "$old_host_name" ]
+ fi
+ else
+ # No old hostname
+ false
+ fi
+}
+
+try_hostname()
+{
+ [ "$hostname" = "$1" ] && return 0
+ if valid_domainname "$1"; then
+ syslog info "Setting hostname: $1"
+ _hostname "$1"
+ else
+ syslog err "Invalid hostname: $1"
+ fi
+}
+
+set_hostname()
+{
+ hfqdn=false
+ hshort=false
+ case "$hostname_fqdn" in
+ [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) hfqdn=true;;
+ ""|[Ss][Ee][Rr][Vv][Ee][Rr]) ;;
+ *) hshort=true;;
+ esac
+
+ need_hostname || return
+
+ if [ -n "$new_fqdn" ]; then
+ if ${hfqdn} || ! ${hshort}; then
+ try_hostname "$new_fqdn"
+ else
+ try_hostname "${new_fqdn%%.*}"
+ fi
+ elif [ -n "$new_host_name" ]; then
+ if ${hfqdn}; then
+ if [ -n "$new_domain_name" ] &&
+ [ "$new_host_name" = "${new_host_name#*.}" ]
+ then
+ try_hostname "$new_host_name.$new_domain_name"
+ else
+ try_hostname "$new_host_name"
+ fi
+ elif ${hshort}; then
+ try_hostname "${new_host_name%%.*}"
+ else
+ try_hostname "$new_host_name"
+ fi
+ elif ! is_default_hostname "$hostname"; then
+ try_hostname "$hostname_default"
+ fi
+}
+
+# For ease of use, map DHCP6 names onto our DHCP4 names
+case "$reason" in
+BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6)
+ new_fqdn="$new_dhcp6_fqdn"
+ old_fqdn="$old_dhcp6_fqdn"
+ ;;
+esac
+
+if $if_up; then
+ set_hostname
+fi
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/hooks/dhcpcd-run-hooks.8.in
--- a/external/bsd/dhcpcd/dist/hooks/dhcpcd-run-hooks.8.in Thu Apr 02 12:35:13 2020 +0000
+++ b/external/bsd/dhcpcd/dist/hooks/dhcpcd-run-hooks.8.in Thu Apr 02 12:38:54 2020 +0000
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2006-2018 Roy Marples
+.\" Copyright (c) 2006-2020 Roy Marples
.\" All rights reserved
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 20, 2018
+.Dd January 21, 2020
.Dt DHCPCD-RUN-HOOKS 8
.Os
.Sh NAME
@@ -69,6 +69,7 @@
is run on and
.Ev $reason
is to the reason why
+q
.Nm
was invoked.
DHCP information to be configured is held in variables starting with the word
@@ -83,6 +84,8 @@
.Nm
could be invoked:
.Bl -tag -width EXPIREXXXEXPIRE6
+.It Dv CHROOT
+dhcpcd is starting up and needs to configure a chroot environment.
.It Dv PREINIT
dhcpcd is starting up and any pre-initialisation should be done.
.It Dv CARRIER
@@ -144,12 +147,14 @@
.Sh ENVIRONMENT
.Nm dhcpcd
will clear the environment variables aside from
-.Ev $PATH
-and
-.Ev $RC_SVCNAME .
+.Ev $PATH .
The following variables will then be set, along with any protocol supplied
ones.
.Bl -tag -width xnew_delegated_dhcp6_prefix
+.It Ev $chroot
+the directory where
+.Nm dhcpcd
+is chrooted.
.It Ev $interface
the name of the interface.
.It Ev $protocol
diff -r a7cf02ecb960 -r 8432ecd6525a external/bsd/dhcpcd/dist/src/arp.c
--- a/external/bsd/dhcpcd/dist/src/arp.c Thu Apr 02 12:35:13 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/arp.c Thu Apr 02 12:38:54 2020 +0000
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* dhcpcd - ARP handler
- * Copyright (c) 2006-2019 Roy Marples <roy%marples.name@localhost>
+ * Copyright (c) 2006-2020 Roy Marples <roy%marples.name@localhost>
* All rights reserved
* Redistribution and use in source and binary forms, with or without
@@ -41,7 +41,7 @@
#include <string.h>
#include <unistd.h>
-#define ELOOP_QUEUE 5
+#define ELOOP_QUEUE ELOOP_ARP
#include "config.h"
#include "arp.h"
#include "bpf.h"
@@ -53,10 +53,12 @@
#include "if-options.h"
#include "ipv4ll.h"
#include "logerr.h"
+#include "privsep.h"
#if defined(ARP)
-#define ARP_LEN \
- (sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN))
+#define ARP_LEN \
+ (FRAMEHDRLEN_MAX + \
+ sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN))
/* ARP debugging can be quite noisy. Enable this for more noise! */
//#define ARP_DEBUG
@@ -103,7 +105,13 @@
Home |
Main Index |
Thread Index |
Old Index