Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/roy]: src/external/bsd/dhcpcd/dist Update to dhcpcd-9.3.0 with the follo...
details: https://anonhg.NetBSD.org/src/rev/b04147b6f49d
branches: roy
changeset: 940196:b04147b6f49d
user: roy <roy%NetBSD.org@localhost>
date: Mon Oct 05 16:01:13 2020 +0000
description:
Update to dhcpcd-9.3.0 with the following changes:
* dhcpcd: Backticks have been removed from quoting filenames
* dhcpcd: Only manipulate stdin, stdout and stderr if they are valid
* duid: Adjust option so the type can be specified
* logerr: Don't leak logfile fd to scripts
* privsep: Run the launcher process in the sandbox
* BSD: Use `ifi_link_state` as the single source of truth about carrier
* BSD: Ignore vether(4) devices by default
diffstat:
external/bsd/dhcpcd/dist/README.md | 5 -
external/bsd/dhcpcd/dist/src/bpf.c | 7 +-
external/bsd/dhcpcd/dist/src/defs.h | 2 +-
external/bsd/dhcpcd/dist/src/dev.h | 4 +-
external/bsd/dhcpcd/dist/src/dhcp-common.c | 2 +-
external/bsd/dhcpcd/dist/src/dhcp.c | 18 +-
external/bsd/dhcpcd/dist/src/dhcp6.c | 10 +-
external/bsd/dhcpcd/dist/src/dhcpcd.c | 216 +++++++++++++------------
external/bsd/dhcpcd/dist/src/dhcpcd.conf.5.in | 19 +-
external/bsd/dhcpcd/dist/src/dhcpcd.h | 8 +-
external/bsd/dhcpcd/dist/src/duid.c | 14 +-
external/bsd/dhcpcd/dist/src/duid.h | 1 +
external/bsd/dhcpcd/dist/src/if-bsd.c | 96 +++++-----
external/bsd/dhcpcd/dist/src/if-options.c | 52 +++---
external/bsd/dhcpcd/dist/src/if-options.h | 2 -
external/bsd/dhcpcd/dist/src/if.c | 49 +---
external/bsd/dhcpcd/dist/src/if.h | 5 +-
external/bsd/dhcpcd/dist/src/ipv6nd.c | 2 +-
external/bsd/dhcpcd/dist/src/logerr.c | 2 +-
external/bsd/dhcpcd/dist/src/script.c | 2 +-
20 files changed, 257 insertions(+), 259 deletions(-)
diffs (truncated from 1277 to 300 lines):
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/README.md
--- a/external/bsd/dhcpcd/dist/README.md Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/README.md Mon Oct 05 16:01:13 2020 +0000
@@ -89,11 +89,6 @@
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, _dhcp or dhcpcd).
-
-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.
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/bpf.c
--- a/external/bsd/dhcpcd/dist/src/bpf.c Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/bpf.c Mon Oct 05 16:01:13 2020 +0000
@@ -70,14 +70,14 @@
(insn)->jt = 0; \
(insn)->jf = 0; \
(insn)->k = (uint32_t)(v); \
-};
+}
#define BPF_SET_JUMP(insn, c, v, t, f) { \
(insn)->code = (c); \
(insn)->jt = (t); \
(insn)->jf = (f); \
(insn)->k = (uint32_t)(v); \
-};
+}
size_t
bpf_frame_header_len(const struct interface *ifp)
@@ -585,9 +585,6 @@
};
#define BPF_BOOTP_ETHER_LEN __arraycount(bpf_bootp_ether)
-#define BOOTP_MIN_SIZE sizeof(struct ip) + sizeof(struct udphdr) + \
- sizeof(struct bootp)
-
static const struct bpf_insn bpf_bootp_base[] = {
/* Make sure it's an IPv4 packet. */
BPF_STMT(BPF_LD + BPF_B + BPF_IND, 0),
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/defs.h
--- a/external/bsd/dhcpcd/dist/src/defs.h Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/defs.h Mon Oct 05 16:01:13 2020 +0000
@@ -29,7 +29,7 @@
#define CONFIG_H
#define PACKAGE "dhcpcd"
-#define VERSION "9.2.0"
+#define VERSION "9.3.0"
#ifndef PRIVSEP_USER
# define PRIVSEP_USER "_" PACKAGE
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/dev.h
--- a/external/bsd/dhcpcd/dist/src/dev.h Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dev.h Mon Oct 05 16:01:13 2020 +0000
@@ -31,7 +31,7 @@
// dev plugin setup
struct dev {
const char *name;
- int (*initialized)(const char *);
+ int (*initialised)(const char *);
int (*listening)(void);
int (*handle_device)(void *);
int (*start)(void);
@@ -47,7 +47,7 @@
// hooks for dhcpcd
#ifdef PLUGIN_DEV
#include "dhcpcd.h"
-int dev_initialized(struct dhcpcd_ctx *, const char *);
+int dev_initialised(struct dhcpcd_ctx *, const char *);
int dev_listening(struct dhcpcd_ctx *);
int dev_start(struct dhcpcd_ctx *, int (*)(void *, int, const char *));
void dev_stop(struct dhcpcd_ctx *);
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/dhcp-common.c
--- a/external/bsd/dhcpcd/dist/src/dhcp-common.c Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp-common.c Mon Oct 05 16:01:13 2020 +0000
@@ -615,7 +615,7 @@
}
/* Trim any extra data.
- * Maybe we need a settng to reject DHCP options with extra data? */
+ * Maybe we need a setting to reject DHCP options with extra data? */
if (opt->type & OT_ARRAY)
return (ssize_t)(dl - (dl % sz));
return (ssize_t)sz;
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/dhcp.c
--- a/external/bsd/dhcpcd/dist/src/dhcp.c Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp.c Mon Oct 05 16:01:13 2020 +0000
@@ -1164,7 +1164,7 @@
logdebugx("reading standard input");
sbytes = read(fileno(stdin), buf.buf, sizeof(buf.buf));
} else {
- logdebugx("%s: reading lease `%s'",
+ logdebugx("%s: reading lease: %s",
ifp->name, state->leasefile);
sbytes = dhcp_readfile(ifp->ctx, state->leasefile,
buf.buf, sizeof(buf.buf));
@@ -2314,7 +2314,7 @@
state->state = DHS_BOUND;
if (!state->lease.frominfo &&
!(ifo->options & (DHCPCD_INFORM | DHCPCD_STATIC))) {
- logdebugx("%s: writing lease `%s'",
+ logdebugx("%s: writing lease: %s",
ifp->name, state->leasefile);
if (dhcp_writefile(ifp->ctx, state->leasefile, 0640,
state->new, state->new_len) == -1)
@@ -2865,10 +2865,10 @@
print_string(sname, sizeof(sname), OT_STRING | OT_DOMAIN,
bootp->sname, sizeof(bootp->sname));
if (a == NULL)
- logmessage(loglevel, "%s: %s %s %s `%s'",
+ logmessage(loglevel, "%s: %s %s %s %s",
ifp->name, msg, tfrom, inet_ntoa(addr), sname);
else
- logmessage(loglevel, "%s: %s %s %s %s `%s'",
+ logmessage(loglevel, "%s: %s %s %s %s %s",
ifp->name, msg, a, tfrom, inet_ntoa(addr), sname);
} else {
if (r != 0) {
@@ -3477,6 +3477,16 @@
#ifdef PRIVSEP
const struct dhcp_state *state = D_CSTATE(ifp);
+ /* It's possible that an interface departs and arrives in short
+ * order to receive a BPF frame out of order.
+ * There is a similar check in ARP, but much lower down the stack.
+ * It's not needed for other inet protocols because we send the
+ * message as a whole and select the interface off that and then
+ * check state. BPF on the other hand is very interface
+ * specific and we do need this check. */
+ if (state == NULL)
+ return;
+
/* Ignore double reads */
if (IN_PRIVSEP(ifp->ctx)) {
switch (state->state) {
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/dhcp6.c
--- a/external/bsd/dhcpcd/dist/src/dhcp6.c Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp6.c Mon Oct 05 16:01:13 2020 +0000
@@ -147,7 +147,7 @@
uint16_t dhcp6_opt;
};
-const struct dhcp_compat dhcp_compats[] = {
+static const struct dhcp_compat dhcp_compats[] = {
{ DHO_DNSSERVER, D6_OPTION_DNS_SERVERS },
{ DHO_HOSTNAME, D6_OPTION_FQDN },
{ DHO_DNSDOMAIN, D6_OPTION_FQDN },
@@ -2588,7 +2588,7 @@
logdebugx("reading standard input");
bytes = read(fileno(stdin), buf.buf, sizeof(buf.buf));
} else {
- logdebugx("%s: reading lease `%s'",
+ logdebugx("%s: reading lease: %s",
ifp->name, state->leasefile);
bytes = dhcp_readfile(ifp->ctx, state->leasefile,
buf.buf, sizeof(buf.buf));
@@ -3218,7 +3218,7 @@
ifp->name, state->expire);
rt_build(ifp->ctx, AF_INET6);
if (!confirmed && !timedout) {
- logdebugx("%s: writing lease `%s'",
+ logdebugx("%s: writing lease: %s",
ifp->name, state->leasefile);
if (dhcp_writefile(ifp->ctx, state->leasefile, 0640,
state->new, state->new_len) == -1)
@@ -3657,12 +3657,12 @@
"/tmp/dhcp6.reply%d.raw", replyn++);
fd = open(fname, O_RDONLY, 0);
if (fd == -1) {
- logerr("%s: open `%s'", __func__, fname);
+ logerr("%s: open: %s", __func__, fname);
return;
}
tlen = read(fd, tbuf, sizeof(tbuf));
if (tlen == -1)
- logerr("%s: read `%s'", __func__, fname);
+ logerr("%s: read: %s", __func__, fname);
close(fd);
/* Copy across ServerID so we can work with our own server. */
diff -r a00fa22b4bc9 -r b04147b6f49d external/bsd/dhcpcd/dist/src/dhcpcd.c
--- a/external/bsd/dhcpcd/dist/src/dhcpcd.c Sun Sep 06 14:54:28 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcpcd.c Mon Oct 05 16:01:13 2020 +0000
@@ -26,7 +26,7 @@
* SUCH DAMAGE.
*/
-const char dhcpcd_copyright[] = "Copyright (c) 2006-2020 Roy Marples";
+static const char dhcpcd_copyright[] = "Copyright (c) 2006-2020 Roy Marples";
#include <sys/file.h>
#include <sys/ioctl.h>
@@ -360,7 +360,7 @@
return;
/* Don't use loginfo because this makes no sense in a log. */
- if (!(logopts & LOGERR_QUIET))
+ if (!(logopts & LOGERR_QUIET) && ctx->stderr_valid)
(void)fprintf(stderr,
"forked to background, child pid %d\n", getpid());
i = EXIT_SUCCESS;
@@ -432,8 +432,6 @@
/* De-activate the interface */
ifp->active = IF_INACTIVE;
ifp->options->options &= ~DHCPCD_STOPPING;
- /* Set the link state to unknown as we're no longer tracking it. */
- ifp->carrier = LINK_UNKNOWN;
if (!(ctx->options & (DHCPCD_MASTER | DHCPCD_TEST)))
eloop_exit(ctx->eloop, EXIT_FAILURE);
@@ -700,43 +698,36 @@
return;
}
- loginfox("%s: connected to Access Point `%s'", ifp->name, pssid);
+ loginfox("%s: connected to Access Point: %s", ifp->name, pssid);
}
void
-dhcpcd_handlecarrier(struct dhcpcd_ctx *ctx, int carrier, unsigned int flags,
- const char *ifname)
+dhcpcd_handlecarrier(struct interface *ifp, int carrier, unsigned int flags)
{
- struct interface *ifp;
-
- ifp = if_find(ctx->ifaces, ifname);
- if (ifp == NULL ||
- ifp->options == NULL || !(ifp->options->options & DHCPCD_LINK) ||
- !ifp->active)
- return;
+ bool nolink = ifp->options == NULL ||
+ !(ifp->options->options & DHCPCD_LINK);
+ ifp->flags = flags;
if (carrier == LINK_UNKNOWN) {
- if (ifp->wireless) {
+ if (ifp->wireless)
carrier = LINK_DOWN;
- ifp->flags = flags;
- } else
- carrier = if_carrier(ifp);
- } else
- ifp->flags = flags;
- if (carrier == LINK_UNKNOWN)
- carrier = IF_UPANDRUNNING(ifp) ? LINK_UP : LINK_DOWN;
+ else
+ carrier = IF_UPANDRUNNING(ifp) ? LINK_UP : LINK_DOWN;
+ }
if (carrier == LINK_DOWN || (ifp->flags & IFF_UP) == 0) {
if (ifp->carrier != LINK_DOWN) {
- if (ifp->carrier == LINK_UP)
- loginfox("%s: carrier lost", ifp->name);
#ifdef NOCARRIER_PRESERVE_IP
if (ifp->flags & IFF_UP &&
- !(ifp->options->options & DHCPCD_ANONYMOUS))
+ (ifp->options == NULL ||
+ !(ifp->options->options & DHCPCD_ANONYMOUS)))
ifp->carrier = LINK_DOWN_IFFUP;
else
#endif
ifp->carrier = LINK_DOWN;
+ if (!ifp->active || nolink)
+ return;
+ loginfox("%s: carrier lost", ifp->name);
script_runreason(ifp, "NOCARRIER");
#ifdef NOCARRIER_PRESERVE_IP
if (ifp->flags & IFF_UP &&
@@ -767,13 +758,14 @@
}
} else if (carrier == LINK_UP && ifp->flags & IFF_UP) {
if (ifp->carrier != LINK_UP) {
- loginfox("%s: carrier acquired", ifp->name);
ifp->carrier = LINK_UP;
+ if (ifp->active)
+ loginfox("%s: carrier acquired", ifp->name);
#if !defined(__linux__) && !defined(__NetBSD__)
/* BSD does not emit RTM_NEWADDR or RTM_CHGADDR when the
* hardware address changes so we have to go
* through the disovery process to work it out. */
- dhcpcd_handleinterface(ctx, 0, ifp->name);
+ dhcpcd_handleinterface(ifp->ctx, 0, ifp->name);
#endif
if (ifp->wireless) {
uint8_t ossid[IF_SSIDLEN];
@@ -784,8 +776,9 @@
if_getssid(ifp);
/* If we changed SSID network, drop leases */
- if (ifp->ssid_len != olen ||
- memcmp(ifp->ssid, ossid, ifp->ssid_len))
+ if ((ifp->ssid_len != olen ||
+ memcmp(ifp->ssid, ossid, ifp->ssid_len)) &&
+ ifp->active)
Home |
Main Index |
Thread Index |
Old Index