Update to dhcpcd-9.3.1 with the following changes:
* dhcpcd: carrier handling issue fixed from 9.3.0 * dhcpcd: log if interface type is unsupported in debug * duid: memory leak fixed if UUID wanted but none available * privsep: fix receiving inet and no BPF running * privsep: allow gettimeofday for SECCOMP * privsep: fix stderr redirection again
This commit is contained in:
parent
5d858a7a6b
commit
597ffba2d5
|
@ -506,7 +506,7 @@ arp_announceaddr(struct dhcpcd_ctx *ctx, const struct in_addr *ia)
|
|||
struct ipv4_addr *iap;
|
||||
|
||||
TAILQ_FOREACH(ifp, ctx->ifaces, next) {
|
||||
if (!ifp->active || ifp->carrier <= LINK_DOWN)
|
||||
if (!ifp->active || !if_is_link_up(ifp))
|
||||
continue;
|
||||
iap = ipv4_iffindaddr(ifp, ia, NULL);
|
||||
if (iap == NULL)
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#define CONFIG_H
|
||||
|
||||
#define PACKAGE "dhcpcd"
|
||||
#define VERSION "9.3.0"
|
||||
#define VERSION "9.3.1"
|
||||
|
||||
#ifndef PRIVSEP_USER
|
||||
# define PRIVSEP_USER "_" PACKAGE
|
||||
|
|
|
@ -55,7 +55,6 @@
|
|||
#define LINK_UP 1
|
||||
#define LINK_UNKNOWN 0
|
||||
#define LINK_DOWN -1
|
||||
#define LINK_DOWN_IFFUP -2
|
||||
|
||||
#define IF_DATA_IPV4 0
|
||||
#define IF_DATA_ARP 1
|
||||
|
|
|
@ -178,8 +178,9 @@ duid_get(struct dhcpcd_ctx *ctx, const struct interface *ifp)
|
|||
if (ifp == NULL) {
|
||||
if (ctx->duid_type != DUID_DEFAULT &&
|
||||
ctx->duid_type != DUID_UUID)
|
||||
return 0;
|
||||
len = duid_make_uuid(data);
|
||||
len = 0;
|
||||
else
|
||||
len = duid_make_uuid(data);
|
||||
if (len == 0)
|
||||
free(data);
|
||||
else
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
#define DHCPCD_NOALIAS (1ULL << 39)
|
||||
#define DHCPCD_IA_FORCED (1ULL << 40)
|
||||
#define DHCPCD_STOPPING (1ULL << 41)
|
||||
#define DHCPCD_DEPARTED (1ULL << 42)
|
||||
#define DHCPCD_LAUNCHER (1ULL << 42)
|
||||
#define DHCPCD_HOSTNAME_SHORT (1ULL << 43)
|
||||
#define DHCPCD_EXITING (1ULL << 44)
|
||||
#define DHCPCD_WAITIP4 (1ULL << 45)
|
||||
|
|
|
@ -193,6 +193,17 @@ if_setflag(struct interface *ifp, short setflag, short unsetflag)
|
|||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
if_is_link_up(const struct interface *ifp)
|
||||
{
|
||||
|
||||
return ifp->flags & IFF_UP &&
|
||||
(ifp->carrier == LINK_UP ||
|
||||
(ifp->carrier == LINK_UNKNOWN &&
|
||||
!(ifp->options == NULL ||
|
||||
ifp->options->options & DHCPCD_LINK)));
|
||||
}
|
||||
|
||||
int
|
||||
if_randomisemac(struct interface *ifp)
|
||||
{
|
||||
|
@ -411,11 +422,16 @@ if_check_arphrd(struct interface *ifp, unsigned int active, bool if_noconf)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
if (if_noconf)
|
||||
active = IF_INACTIVE;
|
||||
if (active)
|
||||
logwarnx("%s: unsupported interface type 0x%.2x",
|
||||
if (active) {
|
||||
int i;
|
||||
|
||||
if (if_noconf)
|
||||
active = IF_INACTIVE;
|
||||
i = active ? LOG_WARNING : LOG_DEBUG;
|
||||
logmessage(i, "%s: unsupported"
|
||||
" interface type 0x%.2x",
|
||||
ifp->name, ifp->hwtype);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -621,12 +637,14 @@ if_discover(struct dhcpcd_ctx *ctx, struct ifaddrs **ifaddrs,
|
|||
#endif
|
||||
default:
|
||||
/* Don't allow unless explicit */
|
||||
if (if_noconf)
|
||||
active = IF_INACTIVE;
|
||||
if (active)
|
||||
logwarnx("%s: unsupported"
|
||||
if (active) {
|
||||
if (if_noconf)
|
||||
active = IF_INACTIVE;
|
||||
i = active ? LOG_WARNING : LOG_DEBUG;
|
||||
logmessage(i, "%s: unsupported"
|
||||
" interface type 0x%.2x",
|
||||
ifp->name, sdl->sdl_type);
|
||||
}
|
||||
/* Pretend it's ethernet */
|
||||
ifp->hwtype = ARPHRD_ETHER;
|
||||
break;
|
||||
|
|
|
@ -146,6 +146,7 @@ int if_getflags(struct interface *);
|
|||
int if_setflag(struct interface *, short, short);
|
||||
#define if_up(ifp) if_setflag((ifp), (IFF_UP | IFF_RUNNING), 0)
|
||||
#define if_down(ifp) if_setflag((ifp), 0, IFF_UP);
|
||||
bool if_is_link_up(const struct interface *);
|
||||
bool if_valid_hwaddr(const uint8_t *, size_t);
|
||||
struct if_head *if_discover(struct dhcpcd_ctx *, struct ifaddrs **,
|
||||
int, char * const *);
|
||||
|
|
|
@ -253,6 +253,17 @@ ps_bpf_dispatch(struct dhcpcd_ctx *ctx,
|
|||
uint8_t *bpf;
|
||||
size_t bpf_len;
|
||||
|
||||
switch (psm->ps_cmd) {
|
||||
#ifdef ARP
|
||||
case PS_BPF_ARP:
|
||||
#endif
|
||||
case PS_BPF_BOOTP:
|
||||
break;
|
||||
default:
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
ifp = if_findindex(ctx->ifaces, psm->ps_id.psi_ifindex);
|
||||
/* interface may have departed .... */
|
||||
if (ifp == NULL)
|
||||
|
@ -270,9 +281,6 @@ ps_bpf_dispatch(struct dhcpcd_ctx *ctx,
|
|||
case PS_BPF_BOOTP:
|
||||
dhcp_packet(ifp, bpf, bpf_len, (unsigned int)psm->ps_flags);
|
||||
break;
|
||||
default:
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -89,6 +89,28 @@ ps_inet_recvdhcp6(void *arg)
|
|||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
ps_inet_canstart(const struct dhcpcd_ctx *ctx)
|
||||
{
|
||||
|
||||
#ifdef INET
|
||||
if ((ctx->options & (DHCPCD_IPV4 | DHCPCD_MASTER)) ==
|
||||
(DHCPCD_IPV4 | DHCPCD_MASTER))
|
||||
return true;
|
||||
#endif
|
||||
#if defined(INET6) && !defined(__sun)
|
||||
if (ctx->options & DHCPCD_IPV6)
|
||||
return true;
|
||||
#endif
|
||||
#ifdef DHCP6
|
||||
if ((ctx->options & (DHCPCD_IPV6 | DHCPCD_MASTER)) ==
|
||||
(DHCPCD_IPV6 | DHCPCD_MASTER))
|
||||
return true;
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int
|
||||
ps_inet_startcb(void *arg)
|
||||
{
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#ifndef PRIVSEP_INET_H
|
||||
#define PRIVSEP_INET_H
|
||||
|
||||
bool ps_inet_canstart(const struct dhcpcd_ctx *);
|
||||
pid_t ps_inet_start(struct dhcpcd_ctx *);
|
||||
int ps_inet_stop(struct dhcpcd_ctx *);
|
||||
ssize_t ps_inet_cmd(struct dhcpcd_ctx *, struct ps_msghdr *, struct msghdr *);
|
||||
|
|
Loading…
Reference in New Issue