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/src Sync
details: https://anonhg.NetBSD.org/src/rev/796da7462f73
branches: trunk
changeset: 935422:796da7462f73
user: roy <roy%NetBSD.org@localhost>
date: Thu Jul 02 13:59:19 2020 +0000
description:
Sync
diffstat:
external/bsd/dhcpcd/dist/src/dhcp6.c | 6 +-
external/bsd/dhcpcd/dist/src/dhcpcd.c | 73 +++++++++++++++++-------------
external/bsd/dhcpcd/dist/src/if-bsd.c | 9 +++-
external/bsd/dhcpcd/dist/src/if-options.c | 36 ++++++++++++--
external/bsd/dhcpcd/dist/src/ipv6.c | 1 +
external/bsd/dhcpcd/dist/src/ipv6.h | 3 +-
external/bsd/dhcpcd/dist/src/ipv6nd.c | 62 +++++++++++++++++++------
external/bsd/dhcpcd/dist/src/logerr.c | 46 ++++++++++++++++--
external/bsd/dhcpcd/dist/src/privsep.c | 12 +---
external/bsd/dhcpcd/dist/src/script.c | 41 +++++++++--------
10 files changed, 193 insertions(+), 96 deletions(-)
diffs (truncated from 708 to 300 lines):
diff -r 07606c5a499f -r 796da7462f73 external/bsd/dhcpcd/dist/src/dhcp6.c
--- a/external/bsd/dhcpcd/dist/src/dhcp6.c Thu Jul 02 13:57:40 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcp6.c Thu Jul 02 13:59:19 2020 +0000
@@ -3183,14 +3183,12 @@
state->state = DH6S_BOUND;
state->failed = false;
- if ((state->renew != 0 || state->rebind != 0) &&
- state->renew != ND6_INFINITE_LIFETIME)
+ if (state->renew && state->renew != ND6_INFINITE_LIFETIME)
eloop_timeout_add_sec(ifp->ctx->eloop,
state->renew,
state->state == DH6S_INFORMED ?
dhcp6_startinform : dhcp6_startrenew, ifp);
- if ((state->rebind != 0 || state->expire != 0) &&
- state->rebind != ND6_INFINITE_LIFETIME)
+ if (state->rebind && state->rebind != ND6_INFINITE_LIFETIME)
eloop_timeout_add_sec(ifp->ctx->eloop,
state->rebind, dhcp6_startrebind, ifp);
if (state->expire != ND6_INFINITE_LIFETIME)
diff -r 07606c5a499f -r 796da7462f73 external/bsd/dhcpcd/dist/src/dhcpcd.c
--- a/external/bsd/dhcpcd/dist/src/dhcpcd.c Thu Jul 02 13:57:40 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/dhcpcd.c Thu Jul 02 13:59:19 2020 +0000
@@ -339,6 +339,7 @@
return 0;
#else
int i;
+ unsigned int logopts = loggetopts();
if (ctx->options & DHCPCD_DAEMONISE &&
!(ctx->options & (DHCPCD_DAEMONISED | DHCPCD_NOWAITIP)))
@@ -359,7 +360,7 @@
return;
/* Don't use loginfo because this makes no sense in a log. */
- if (!(loggetopts() & LOGERR_QUIET))
+ if (!(logopts & LOGERR_QUIET))
(void)fprintf(stderr, "forked to background, child pid %d\n",
getpid());
i = EXIT_SUCCESS;
@@ -369,16 +370,11 @@
eloop_event_delete(ctx->eloop, ctx->fork_fd);
close(ctx->fork_fd);
ctx->fork_fd = -1;
-#ifdef PRIVSEP
- if (ctx->options & DHCPCD_PRIVSEP) {
- /* Aside from Linux, we don't have access to /dev/null */
- fclose(stdout);
- fclose(stderr);
- } else
-#endif
- {
- (void)freopen(_PATH_DEVNULL, "w", stdout);
- (void)freopen(_PATH_DEVNULL, "w", stderr);
+
+ if (isatty(loggeterrfd())) {
+ logopts &= ~LOGERR_ERR;
+ logsetopts(logopts);
+ logseterrfd(-1);
}
#endif
}
@@ -867,7 +863,6 @@
{
struct interface *ifp = arg;
struct if_options *ifo = ifp->options;
- int carrier;
if (ifo->options & DHCPCD_LINK) {
switch (ifp->carrier) {
@@ -879,19 +874,8 @@
case LINK_UNKNOWN:
/* No media state available.
* Loop until both IFF_UP and IFF_RUNNING are set */
- carrier = if_carrier(ifp);
- if (carrier == LINK_UNKNOWN) {
- if (IF_UPANDRUNNING(ifp))
- carrier = LINK_UP;
- else {
- eloop_timeout_add_msec(ifp->ctx->eloop,
- IF_POLL_UP * MSEC_PER_SEC,
- dhcpcd_startinterface, ifp);
- return;
- }
- }
- dhcpcd_handlecarrier(ifp->ctx, carrier,
- ifp->flags, ifp->name);
+ if (ifo->poll == 0)
+ if_pollinit(ifp);
return;
}
}
@@ -979,6 +963,7 @@
dhcpcd_prestartinterface(void *arg)
{
struct interface *ifp = arg;
+ struct dhcpcd_ctx *ctx = ifp->ctx;
bool anondown;
if (ifp->carrier == LINK_DOWN &&
@@ -990,7 +975,7 @@
} else
anondown = false;
- if ((!(ifp->ctx->options & DHCPCD_MASTER) ||
+ if ((!(ctx->options & DHCPCD_MASTER) ||
ifp->options->options & DHCPCD_IF_UP || anondown) &&
!(ifp->flags & IFF_UP))
{
@@ -1001,6 +986,9 @@
logerr(__func__);
}
+ if (ifp->options->poll != 0)
+ if_pollinit(ifp);
+
dhcpcd_startinterface(ifp);
}
@@ -1299,7 +1287,9 @@
if ((ifo = read_config(ctx, NULL, NULL, NULL)) == NULL)
return;
add_options(ctx, NULL, ifo, ctx->argc, ctx->argv);
- /* We need to preserve these two options. */
+ /* We need to preserve these options. */
+ if (ctx->options & DHCPCD_STARTED)
+ ifo->options |= DHCPCD_STARTED;
if (ctx->options & DHCPCD_MASTER)
ifo->options |= DHCPCD_MASTER;
if (ctx->options & DHCPCD_DAEMONISED)
@@ -1409,6 +1399,9 @@
}
if (sig != SIGCHLD && ctx->options & DHCPCD_FORKED) {
+ if (sig == SIGHUP)
+ return;
+
pid_t pid = pidfile_read(ctx->pidfile);
if (pid == -1) {
if (errno != ENOENT)
@@ -1861,9 +1854,7 @@
#endif
#ifdef PRIVSEP
ctx.ps_root_fd = ctx.ps_data_fd = -1;
-#ifdef PRIVSEP_COMTROLLER
- ctx.ps_ctl_fd = -1;
-#endif
+ ctx.ps_inet_fd = ctx.ps_control_fd = -1;
TAILQ_INIT(&ctx.ps_processes);
#endif
rt_init(&ctx);
@@ -2210,7 +2201,9 @@
}
loginfox(PACKAGE "-" VERSION " starting");
- freopen(_PATH_DEVNULL, "r", stdin);
+ if (freopen(_PATH_DEVNULL, "r", stdin) == NULL)
+ logerr("%s: freopen stdin", __func__);
+
#ifdef PRIVSEP
ps_init(&ctx);
@@ -2275,6 +2268,22 @@
if_disable_rtadv();
#endif
+ if (isatty(STDOUT_FILENO) &&
+ freopen(_PATH_DEVNULL, "r", stdout) == NULL)
+ logerr("%s: freopen stdout", __func__);
+ if (isatty(STDERR_FILENO)) {
+ int fd = dup(STDERR_FILENO);
+
+ if (fd == -1)
+ logerr("%s: dup", __func__);
+ else if (logseterrfd(fd) == -1)
+ logerr("%s: logseterrfd", __func__);
+ else if (freopen(_PATH_DEVNULL, "r", stderr) == NULL) {
+ logseterrfd(-1);
+ logerr("%s: freopen stderr", __func__);
+ }
+ }
+
/* If we're not running in privsep, we need to create the DB
* directory here. */
if (!(ctx.options & DHCPCD_PRIVSEP)) {
@@ -2328,7 +2337,7 @@
/* Cache the default vendor option. */
if (dhcp_vendor(ctx.vendor, sizeof(ctx.vendor)) == -1)
- logerrx("dhcp_vendor");
+ logerr("dhcp_vendor");
/* Start handling kernel messages for interfaces, addresses and
* routes. */
diff -r 07606c5a499f -r 796da7462f73 external/bsd/dhcpcd/dist/src/if-bsd.c
--- a/external/bsd/dhcpcd/dist/src/if-bsd.c Thu Jul 02 13:57:40 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-bsd.c Thu Jul 02 13:59:19 2020 +0000
@@ -358,6 +358,10 @@
{
struct ifmediareq ifmr = { .ifm_status = 0 };
+ /* Not really needed, but the other OS update flags here also */
+ if (if_getflags(ifp) == -1)
+ return LINK_UNKNOWN;
+
strlcpy(ifmr.ifm_name, ifp->name, sizeof(ifmr.ifm_name));
if (ioctl(ifp->ctx->pf_inet_fd, SIOCGIFMEDIA, &ifmr) == -1 ||
!(ifmr.ifm_status & IFM_AVALID))
@@ -1002,7 +1006,10 @@
if (ia->addr_flags & IN6_IFF_TENTATIVE)
ifa.ifra_flags |= IN6_IFF_TENTATIVE;
#endif
-#if !defined(IPV6CTL_ACCEPT_RTADV) && !defined(ND6_IFF_ACCEPT_RTADV)
+#if (defined(__NetBSD__) || defined(__OpenBSD__)) && \
+ (defined(IPV6CTL_ACCEPT_RTADV) || defined(ND6_IFF_ACCEPT_RTADV))
+ /* These kernels don't accept userland setting IN6_IFF_AUTOCONF */
+#else
if (ia->flags & IPV6_AF_AUTOCONF)
ifa.ifra_flags |= IN6_IFF_AUTOCONF;
#endif
diff -r 07606c5a499f -r 796da7462f73 external/bsd/dhcpcd/dist/src/if-options.c
--- a/external/bsd/dhcpcd/dist/src/if-options.c Thu Jul 02 13:57:40 2020 +0000
+++ b/external/bsd/dhcpcd/dist/src/if-options.c Thu Jul 02 13:59:19 2020 +0000
@@ -55,6 +55,10 @@
#include "logerr.h"
#include "sa.h"
+#define IN_CONFIG_BLOCK(ifo) ((ifo)->options & DHCPCD_FORKED)
+#define SET_CONFIG_BLOCK(ifo) ((ifo)->options |= DHCPCD_FORKED)
+#define CLEAR_CONFIG_BLOCK(ifo) ((ifo)->options &= ~DHCPCD_FORKED)
+
const struct option cf_options[] = {
{"background", no_argument, NULL, 'b'},
{"script", required_argument, NULL, 'c'},
@@ -158,6 +162,7 @@
{"inactive", no_argument, NULL, O_INACTIVE},
{"mudurl", required_argument, NULL, O_MUDURL},
{"link_rcvbuf", required_argument, NULL, O_LINK_RCVBUF},
+ {"poll", optional_argument, NULL, O_POLL},
{NULL, 0, NULL, '\0'}
};
@@ -673,7 +678,7 @@
break;
case 'c':
ARG_REQUIRED;
- if (ifname != NULL) {
+ if (IN_CONFIG_BLOCK(ifo)) {
logerrx("%s: per interface scripts"
" are no longer supported",
ifname);
@@ -743,7 +748,7 @@
ARG_REQUIRED;
/* per interface logging is not supported
* don't want to overide the commandline */
- if (ifname == NULL && ctx->logfile == NULL) {
+ if (!IN_CONFIG_BLOCK(ifo) && ctx->logfile == NULL) {
logclose();
ctx->logfile = strdup(arg);
logopen(ctx->logfile);
@@ -946,7 +951,7 @@
break;
case 'z':
ARG_REQUIRED;
- if (ifname == NULL)
+ if (!IN_CONFIG_BLOCK(ifo))
ctx->ifav = splitv(&ctx->ifac, ctx->ifav, arg);
break;
case 'A':
@@ -1192,7 +1197,7 @@
break;
case 'Z':
ARG_REQUIRED;
- if (ifname == NULL)
+ if (!IN_CONFIG_BLOCK(ifo))
ctx->ifdv = splitv(&ctx->ifdc, ctx->ifdv, arg);
break;
case '1':
@@ -1296,7 +1301,7 @@
#endif
case O_IAID:
ARG_REQUIRED;
- if (ifname == NULL) {
+ if (!IN_CONFIG_BLOCK(ifo)) {
logerrx("IAID must belong in an interface block");
return -1;
}
@@ -1338,7 +1343,7 @@
logwarnx("%s: IA_PD not compiled in", ifname);
return -1;
#else
- if (ifname == NULL) {
+ if (!IN_CONFIG_BLOCK(ifo)) {
logerrx("IA PD must belong in an "
"interface block");
return -1;
@@ -1346,7 +1351,7 @@
i = D6_OPTION_IA_PD;
#endif
}
Home |
Main Index |
Thread Index |
Old Index