Update to dhcpcd-9.3.3 with the following changes:
* dhcpcd: Don't create a launcher process if keeping in foreground * dhcpcd: Add --noconfigure option * control: Create an unpriv socket for non master mode * options: Don't log unknown ones when printing pidfile location
This commit is contained in:
parent
98e71a6eeb
commit
d55488a43d
2
external/bsd/dhcpcd/dist/hooks/15-timezone
vendored
2
external/bsd/dhcpcd/dist/hooks/15-timezone
vendored
@ -42,6 +42,6 @@ BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6)
|
||||
;;
|
||||
esac
|
||||
|
||||
if $if_up; then
|
||||
if $if_configured && $if_up; then
|
||||
set_zoneinfo
|
||||
fi
|
||||
|
@ -153,6 +153,6 @@ BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6)
|
||||
;;
|
||||
esac
|
||||
|
||||
if $if_up && [ "$reason" != ROUTERADVERT ]; then
|
||||
if $if_configured && $if_up && [ "$reason" != ROUTERADVERT ]; then
|
||||
set_hostname
|
||||
fi
|
||||
|
36
external/bsd/dhcpcd/dist/src/control.c
vendored
36
external/bsd/dhcpcd/dist/src/control.c
vendored
@ -274,9 +274,11 @@ control_handle_unpriv(void *arg)
|
||||
}
|
||||
|
||||
static int
|
||||
make_path(char *path, size_t len, const char *ifname, sa_family_t family)
|
||||
make_path(char *path, size_t len, const char *ifname, sa_family_t family,
|
||||
bool unpriv)
|
||||
{
|
||||
const char *per;
|
||||
const char *sunpriv;
|
||||
|
||||
switch(family) {
|
||||
case AF_INET:
|
||||
@ -289,8 +291,13 @@ make_path(char *path, size_t len, const char *ifname, sa_family_t family)
|
||||
per = "";
|
||||
break;
|
||||
}
|
||||
if (unpriv)
|
||||
sunpriv = ifname ? ".unpriv" : "unpriv.";
|
||||
else
|
||||
sunpriv = "";
|
||||
return snprintf(path, len, CONTROLSOCKET,
|
||||
ifname ? ifname : "", ifname ? per : "", ifname ? "." : "");
|
||||
ifname ? ifname : "", ifname ? per : "",
|
||||
sunpriv, ifname ? "." : "");
|
||||
}
|
||||
|
||||
static int
|
||||
@ -303,10 +310,7 @@ make_sock(struct sockaddr_un *sa, const char *ifname, sa_family_t family,
|
||||
return -1;
|
||||
memset(sa, 0, sizeof(*sa));
|
||||
sa->sun_family = AF_UNIX;
|
||||
if (unpriv)
|
||||
strlcpy(sa->sun_path, UNPRIVSOCKET, sizeof(sa->sun_path));
|
||||
else
|
||||
make_path(sa->sun_path, sizeof(sa->sun_path), ifname, family);
|
||||
make_path(sa->sun_path, sizeof(sa->sun_path), ifname, family, unpriv);
|
||||
return fd;
|
||||
}
|
||||
|
||||
@ -346,9 +350,12 @@ control_start1(struct dhcpcd_ctx *ctx, const char *ifname, sa_family_t family,
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((fmode & S_UNPRIV) != S_UNPRIV)
|
||||
if ((fmode & S_PRIV) == S_PRIV)
|
||||
strlcpy(ctx->control_sock, sa.sun_path,
|
||||
sizeof(ctx->control_sock));
|
||||
else
|
||||
strlcpy(ctx->control_sock_unpriv, sa.sun_path,
|
||||
sizeof(ctx->control_sock_unpriv));
|
||||
return fd;
|
||||
}
|
||||
|
||||
@ -360,7 +367,9 @@ control_start(struct dhcpcd_ctx *ctx, const char *ifname, sa_family_t family)
|
||||
#ifdef PRIVSEP
|
||||
if (IN_PRIVSEP_SE(ctx)) {
|
||||
make_path(ctx->control_sock, sizeof(ctx->control_sock),
|
||||
ifname, family);
|
||||
ifname, family, false);
|
||||
make_path(ctx->control_sock_unpriv, sizeof(ctx->control_sock),
|
||||
ifname, family, true);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@ -371,11 +380,7 @@ control_start(struct dhcpcd_ctx *ctx, const char *ifname, sa_family_t family)
|
||||
ctx->control_fd = fd;
|
||||
eloop_event_add(ctx->eloop, fd, control_handle, ctx);
|
||||
|
||||
if (ifname == NULL &&
|
||||
(fd = control_start1(ctx, NULL, AF_UNSPEC, S_UNPRIV)) != -1)
|
||||
{
|
||||
/* We must be in master mode, so create an unprivileged socket
|
||||
* to allow normal users to learn the status of dhcpcd. */
|
||||
if ((fd = control_start1(ctx, ifname, family, S_UNPRIV)) != -1) {
|
||||
ctx->control_unpriv_fd = fd;
|
||||
eloop_event_add(ctx->eloop, fd, control_handle_unpriv, ctx);
|
||||
}
|
||||
@ -414,8 +419,7 @@ control_stop(struct dhcpcd_ctx *ctx)
|
||||
if (IN_PRIVSEP_SE(ctx)) {
|
||||
if (ps_root_unlink(ctx, ctx->control_sock) == -1)
|
||||
retval = -1;
|
||||
if (ctx->options & DHCPCD_MASTER &&
|
||||
control_unlink(ctx, UNPRIVSOCKET) == -1)
|
||||
if (ps_root_unlink(ctx, ctx->control_sock_unpriv) == -1)
|
||||
retval = -1;
|
||||
return retval;
|
||||
} else if (ctx->options & DHCPCD_FORKED)
|
||||
@ -434,7 +438,7 @@ control_stop(struct dhcpcd_ctx *ctx)
|
||||
eloop_event_delete(ctx->eloop, ctx->control_unpriv_fd);
|
||||
close(ctx->control_unpriv_fd);
|
||||
ctx->control_unpriv_fd = -1;
|
||||
if (control_unlink(ctx, UNPRIVSOCKET) == -1)
|
||||
if (control_unlink(ctx, ctx->control_sock_unpriv) == -1)
|
||||
retval = -1;
|
||||
}
|
||||
|
||||
|
7
external/bsd/dhcpcd/dist/src/defs.h
vendored
7
external/bsd/dhcpcd/dist/src/defs.h
vendored
@ -29,7 +29,7 @@
|
||||
#define CONFIG_H
|
||||
|
||||
#define PACKAGE "dhcpcd"
|
||||
#define VERSION "9.3.2"
|
||||
#define VERSION "9.3.3"
|
||||
|
||||
#ifndef PRIVSEP_USER
|
||||
# define PRIVSEP_USER "_" PACKAGE
|
||||
@ -60,10 +60,7 @@
|
||||
# define PIDFILE RUNDIR "/%s%s%spid"
|
||||
#endif
|
||||
#ifndef CONTROLSOCKET
|
||||
# define CONTROLSOCKET RUNDIR "/%s%s%ssock"
|
||||
#endif
|
||||
#ifndef UNPRIVSOCKET
|
||||
# define UNPRIVSOCKET RUNDIR "/unpriv.sock"
|
||||
# define CONTROLSOCKET RUNDIR "/%s%s%s%ssock"
|
||||
#endif
|
||||
#ifndef RDM_MONOFILE
|
||||
# define RDM_MONOFILE DBDIR "/rdm_monotonic"
|
||||
|
1
external/bsd/dhcpcd/dist/src/dhcpcd.h
vendored
1
external/bsd/dhcpcd/dist/src/dhcpcd.h
vendored
@ -180,6 +180,7 @@ struct dhcpcd_ctx {
|
||||
int control_unpriv_fd;
|
||||
struct fd_list_head control_fds;
|
||||
char control_sock[sizeof(CONTROLSOCKET) + IF_NAMESIZE];
|
||||
char control_sock_unpriv[sizeof(CONTROLSOCKET) + IF_NAMESIZE + 7];
|
||||
gid_t control_group;
|
||||
|
||||
/* DHCP Enterprise options, RFC3925 */
|
||||
|
4
external/bsd/dhcpcd/dist/src/if-options.h
vendored
4
external/bsd/dhcpcd/dist/src/if-options.h
vendored
@ -91,7 +91,7 @@
|
||||
#define DHCPCD_IPV6RS (1ULL << 31)
|
||||
#define DHCPCD_IPV6RA_REQRDNSS (1ULL << 32)
|
||||
#define DHCPCD_PRIVSEP (1ULL << 33)
|
||||
#define DHCPCD_UNPRIV (1ULL << 34)
|
||||
#define DHCPCD_CONFIGURE (1ULL << 34)
|
||||
#define DHCPCD_IPV4 (1ULL << 35)
|
||||
#define DHCPCD_FORKED (1ULL << 36)
|
||||
#define DHCPCD_IPV6 (1ULL << 37)
|
||||
@ -180,6 +180,8 @@
|
||||
#define O_INACTIVE O_BASE + 47
|
||||
#define O_MUDURL O_BASE + 48
|
||||
#define O_MSUSERCLASS O_BASE + 49
|
||||
#define O_CONFIGURE O_BASE + 50
|
||||
#define O_NOCONFIGURE O_BASE + 51
|
||||
|
||||
extern const struct option cf_options[];
|
||||
|
||||
|
18
external/bsd/dhcpcd/dist/src/ipv4ll.c
vendored
18
external/bsd/dhcpcd/dist/src/ipv4ll.c
vendored
@ -228,6 +228,8 @@ ipv4ll_not_found(struct interface *ifp)
|
||||
#endif
|
||||
loginfox("%s: using IPv4LL address %s",
|
||||
ifp->name, inet_ntoa(state->pickedaddr));
|
||||
if (!(ifp->options->options & DHCPCD_CONFIGURE))
|
||||
goto run;
|
||||
if (ia == NULL) {
|
||||
if (ifp->ctx->options & DHCPCD_TEST)
|
||||
goto test;
|
||||
@ -252,6 +254,7 @@ test:
|
||||
return;
|
||||
}
|
||||
rt_build(ifp->ctx, AF_INET);
|
||||
run:
|
||||
astate = arp_announceaddr(ifp->ctx, &ia->addr);
|
||||
if (astate != NULL)
|
||||
astate->announced_cb = ipv4ll_announced_arp;
|
||||
@ -281,7 +284,8 @@ ipv4ll_defend_failed(struct interface *ifp)
|
||||
struct ipv4ll_state *state = IPV4LL_STATE(ifp);
|
||||
|
||||
ipv4ll_freearp(ifp);
|
||||
ipv4_deladdr(state->addr, 1);
|
||||
if (ifp->options->options & DHCPCD_CONFIGURE)
|
||||
ipv4_deladdr(state->addr, 1);
|
||||
state->addr = NULL;
|
||||
rt_build(ifp->ctx, AF_INET);
|
||||
script_runreason(ifp, "IPV4LL");
|
||||
@ -373,7 +377,8 @@ ipv4ll_start(void *arg)
|
||||
if (ia != NULL && ia->addr_flags & IN_IFF_DUPLICATED) {
|
||||
state->pickedaddr = ia->addr; /* So it's not picked again. */
|
||||
repick = true;
|
||||
ipv4_deladdr(ia, 0);
|
||||
if (ifp->options->options & DHCPCD_CONFIGURE)
|
||||
ipv4_deladdr(ia, 0);
|
||||
ia = NULL;
|
||||
}
|
||||
#endif
|
||||
@ -431,7 +436,8 @@ ipv4ll_drop(struct interface *ifp)
|
||||
|
||||
state = IPV4LL_STATE(ifp);
|
||||
if (state && state->addr != NULL) {
|
||||
ipv4_deladdr(state->addr, 1);
|
||||
if (ifp->options->options & DHCPCD_CONFIGURE)
|
||||
ipv4_deladdr(state->addr, 1);
|
||||
state->addr = NULL;
|
||||
dropped = true;
|
||||
}
|
||||
@ -442,7 +448,8 @@ ipv4ll_drop(struct interface *ifp)
|
||||
|
||||
TAILQ_FOREACH_SAFE(ia, &istate->addrs, next, ian) {
|
||||
if (IN_LINKLOCAL(ntohl(ia->addr.s_addr))) {
|
||||
ipv4_deladdr(ia, 0);
|
||||
if (ifp->options->options & DHCPCD_CONFIGURE)
|
||||
ipv4_deladdr(ia, 0);
|
||||
dropped = true;
|
||||
}
|
||||
}
|
||||
@ -534,7 +541,8 @@ ipv4ll_handleifa(int cmd, struct ipv4_addr *ia, pid_t pid)
|
||||
else if (ia->addr_flags & IN_IFF_DUPLICATED) {
|
||||
logerrx("%s: DAD detected %s", ifp->name, ia->saddr);
|
||||
ipv4ll_freearp(ifp);
|
||||
ipv4_deladdr(ia, 1);
|
||||
if (ifp->options->options & DHCPCD_CONFIGURE)
|
||||
ipv4_deladdr(ia, 1);
|
||||
state->addr = NULL;
|
||||
rt_build(ifp->ctx, AF_INET);
|
||||
ipv4ll_found(ifp);
|
||||
|
3
external/bsd/dhcpcd/dist/src/route.c
vendored
3
external/bsd/dhcpcd/dist/src/route.c
vendored
@ -713,6 +713,8 @@ rt_build(struct dhcpcd_ctx *ctx, int af)
|
||||
#endif
|
||||
|
||||
RB_TREE_FOREACH_SAFE(rt, &routes, rtn) {
|
||||
if (!(rt->rt_ifp->options->options & DHCPCD_CONFIGURE))
|
||||
continue;
|
||||
#ifdef BSD
|
||||
if (rt_is_default(rt) &&
|
||||
if_missfilter(rt->rt_ifp, &rt->rt_gateway) == -1)
|
||||
@ -771,7 +773,6 @@ rt_build(struct dhcpcd_ctx *ctx, int af)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
getfail:
|
||||
rt_headclear(&routes, AF_UNSPEC);
|
||||
rt_headclear(&kroutes, AF_UNSPEC);
|
||||
|
Loading…
Reference in New Issue
Block a user