mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
Merge updates from master
This commit is contained in:
@@ -19,7 +19,7 @@ else
|
||||
SRC_URI="https://github.com/boogie-org/${PN}/archive/${PV}.tar.gz
|
||||
-> ${P}.tar.gz"
|
||||
|
||||
KEYWORDS="~amd64"
|
||||
KEYWORDS="amd64"
|
||||
fi
|
||||
|
||||
LICENSE="GPL-2+"
|
||||
|
||||
@@ -21,7 +21,7 @@ if [[ "${PV}" == *9999* ]] ; then
|
||||
else
|
||||
SRC_URI="https://gitlab.gentoo.org/dotnet/${PN}/-/archive/${PV}/${P}.tar.bz2"
|
||||
|
||||
KEYWORDS="~amd64 ~arm ~arm64"
|
||||
KEYWORDS="amd64 ~arm ~arm64"
|
||||
fi
|
||||
|
||||
SRC_URI+=" ${NUGET_URIS} "
|
||||
|
||||
@@ -26,7 +26,7 @@ RUNTIME_SLOT="${SDK_SLOT}.12"
|
||||
SLOT="${SDK_SLOT}/${RUNTIME_SLOT}"
|
||||
|
||||
LICENSE="MIT"
|
||||
KEYWORDS="~amd64 ~arm ~arm64"
|
||||
KEYWORDS="amd64 ~arm ~arm64"
|
||||
RESTRICT="splitdebug"
|
||||
|
||||
RDEPEND="
|
||||
|
||||
@@ -211,7 +211,7 @@ else
|
||||
SRC_URI="https://github.com/boogie-org/${PN}/archive/v${PV}.tar.gz
|
||||
-> ${P}.tar.gz"
|
||||
|
||||
KEYWORDS="~amd64"
|
||||
KEYWORDS="amd64"
|
||||
fi
|
||||
|
||||
SRC_URI+=" ${NUGET_URIS} "
|
||||
|
||||
@@ -373,7 +373,7 @@ else
|
||||
SRC_URI="https://github.com/dafny-lang/${PN}/archive/v${PV}.tar.gz
|
||||
-> ${P}.tar.gz"
|
||||
|
||||
KEYWORDS="~amd64"
|
||||
KEYWORDS="amd64"
|
||||
fi
|
||||
|
||||
SRC_URI+="
|
||||
|
||||
@@ -137,7 +137,10 @@ src_configure() {
|
||||
# see also https://www.mltframework.org/twiki/bin/view/MLT/ExtremeMakeover
|
||||
|
||||
if use python; then
|
||||
mycmakeargs+=( -DSWIG_PYTHON=ON )
|
||||
mycmakeargs+=(
|
||||
-DSWIG_PYTHON=ON
|
||||
-DPython3_EXECUTABLE="${PYTHON}"
|
||||
)
|
||||
fi
|
||||
|
||||
cmake_src_configure
|
||||
158
net-misc/dhcpcd/dhcpcd-10.0.5-r1.ebuild
Normal file
158
net-misc/dhcpcd/dhcpcd-10.0.5-r1.ebuild
Normal file
@@ -0,0 +1,158 @@
|
||||
# Copyright 1999-2023 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit systemd toolchain-funcs
|
||||
|
||||
if [[ ${PV} == 9999 ]]; then
|
||||
inherit git-r3
|
||||
EGIT_REPO_URI="https://github.com/NetworkConfiguration/dhcpcd.git"
|
||||
else
|
||||
MY_P="${P/_alpha/-alpha}"
|
||||
MY_P="${MY_P/_beta/-beta}"
|
||||
MY_P="${MY_P/_rc/-rc}"
|
||||
SRC_URI="https://github.com/NetworkConfiguration/dhcpcd/releases/download/v${PV}/${MY_P}.tar.xz"
|
||||
S="${WORKDIR}/${MY_P}"
|
||||
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux"
|
||||
fi
|
||||
|
||||
DESCRIPTION="A fully featured, yet light weight RFC2131 compliant DHCP client"
|
||||
HOMEPAGE="https://github.com/NetworkConfiguration/dhcpcd/ https://roy.marples.name/projects/dhcpcd/"
|
||||
|
||||
LICENSE="BSD-2 BSD ISC MIT"
|
||||
SLOT="0"
|
||||
IUSE="debug +embedded ipv6 privsep +udev"
|
||||
|
||||
DEPEND="udev? ( virtual/udev )"
|
||||
RDEPEND="
|
||||
${DEPEND}
|
||||
privsep? (
|
||||
acct-group/dhcpcd
|
||||
acct-user/dhcpcd
|
||||
)
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/10.0.5
|
||||
)
|
||||
|
||||
src_configure() {
|
||||
local myeconfargs=(
|
||||
--dbdir="${EPREFIX}/var/lib/dhcpcd"
|
||||
--libexecdir="${EPREFIX}/lib/dhcpcd"
|
||||
--localstatedir="${EPREFIX}/var"
|
||||
--prefix="${EPREFIX}"
|
||||
--with-hook=ntp.conf
|
||||
$(use_enable debug)
|
||||
$(use_enable embedded)
|
||||
$(use_enable ipv6)
|
||||
$(use_enable privsep)
|
||||
$(usex elibc_glibc '--with-hook=yp.conf' '')
|
||||
--rundir=$(usex kernel_linux "${EPREFIX}/run/dhcpcd" "${EPREFIX}/var/run/dhcpcd")
|
||||
$(usex privsep '--privsepuser=dhcpcd' '')
|
||||
$(usex udev '' '--without-dev --without-udev')
|
||||
CC="$(tc-getCC)"
|
||||
)
|
||||
econf "${myeconfargs[@]}"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
default
|
||||
keepdir /var/lib/dhcpcd
|
||||
newinitd "${FILESDIR}"/dhcpcd.initd-r1 dhcpcd
|
||||
systemd_newunit "${FILESDIR}"/dhcpcd.service-r1 dhcpcd.service
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
local dbdir="${EROOT}"/var/lib/dhcpcd old_files=()
|
||||
|
||||
local old_old_duid="${EROOT}"/var/lib/dhcpcd/dhcpcd.duid
|
||||
local old_duid="${EROOT}"/etc/dhcpcd.duid
|
||||
local new_duid="${dbdir}"/duid
|
||||
if [[ -e "${old_old_duid}" ]] ; then
|
||||
# Upgrade the duid file to the new format if needed
|
||||
if ! grep -q '..:..:..:..:..:..' "${old_old_duid}"; then
|
||||
sed -i -e 's/\(..\)/\1:/g; s/:$//g' "${old_old_duid}"
|
||||
fi
|
||||
|
||||
# Move the duid to /etc, a more sensible location
|
||||
if [[ ! -e "${old_duid}" ]] ; then
|
||||
cp -p "${old_old_duid}" "${new_duid}"
|
||||
fi
|
||||
old_files+=( "${old_old_duid}" )
|
||||
fi
|
||||
|
||||
# dhcpcd-7 moves the files out of /etc
|
||||
if [[ -e "${old_duid}" ]] ; then
|
||||
if [[ ! -e "${new_duid}" ]] ; then
|
||||
cp -p "${old_duid}" "${new_duid}"
|
||||
fi
|
||||
old_files+=( "${old_duid}" )
|
||||
fi
|
||||
local old_secret="${EROOT}"/etc/dhcpcd.secret
|
||||
local new_secret="${dbdir}"/secret
|
||||
if [[ -e "${old_secret}" ]] ; then
|
||||
if [[ ! -e "${new_secret}" ]] ; then
|
||||
cp -p "${old_secret}" "${new_secret}"
|
||||
fi
|
||||
old_files+=( "${old_secret}" )
|
||||
fi
|
||||
|
||||
# dhcpcd-7 renames some files in /var/lib/dhcpcd
|
||||
local old_rdm="${dbdir}"/dhcpcd-rdm.monotonic
|
||||
local new_rdm="${dbdir}"/rdm_monotonic
|
||||
if [[ -e "${old_rdm}" ]] ; then
|
||||
if [[ ! -e "${new_rdm}" ]] ; then
|
||||
cp -p "${old_rdm}" "${new_rdm}"
|
||||
fi
|
||||
old_files+=( "${old_rdm}" )
|
||||
fi
|
||||
local lease=
|
||||
for lease in "${dbdir}"/dhcpcd-*.lease*; do
|
||||
[[ -f "${lease}" ]] || continue
|
||||
old_files+=( "${lease}" )
|
||||
local new_lease=$(basename "${lease}" | sed -e "s/dhcpcd-//")
|
||||
[[ -e "${dbdir}/${new_lease}" ]] && continue
|
||||
cp "${lease}" "${dbdir}/${new_lease}"
|
||||
done
|
||||
|
||||
# Warn about removing stale files
|
||||
if [[ -n "${old_files[@]}" ]] ; then
|
||||
elog
|
||||
elog "dhcpcd-7 has copied dhcpcd.duid and dhcpcd.secret from"
|
||||
elog "${EROOT}/etc to ${dbdir}"
|
||||
elog "and copied leases in ${dbdir} to new files with the dhcpcd-"
|
||||
elog "prefix dropped."
|
||||
elog
|
||||
elog "You should remove these files if you don't plan on reverting"
|
||||
elog "to an older version:"
|
||||
local old_file=
|
||||
for old_file in ${old_files[@]}; do
|
||||
elog " ${old_file}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -z "${REPLACING_VERSIONS}" ]; then
|
||||
elog
|
||||
elog "dhcpcd has zeroconf support active by default."
|
||||
elog "This means it will always obtain an IP address even if no"
|
||||
elog "DHCP server can be contacted, which will break any existing"
|
||||
elog "failover support you may have configured in your net configuration."
|
||||
elog "This behaviour can be controlled with the noipv4ll configuration"
|
||||
elog "file option or the -L command line switch."
|
||||
elog "See the dhcpcd and dhcpcd.conf man pages for more details."
|
||||
|
||||
elog
|
||||
elog "Dhcpcd has duid enabled by default, and this may cause issues"
|
||||
elog "with some dhcp servers. For more information, see"
|
||||
elog "https://bugs.gentoo.org/show_bug.cgi?id=477356"
|
||||
fi
|
||||
|
||||
if ! has_version net-dns/bind-tools; then
|
||||
elog
|
||||
elog "If you activate the lookup-hostname hook to look up your hostname"
|
||||
elog "using the dns, you need to install net-dns/bind-tools."
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/issues/262
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/584b52db330a96471ff9301b85ce47ebb065a8a4
|
||||
|
||||
From 584b52db330a96471ff9301b85ce47ebb065a8a4 Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Sun, 12 Nov 2023 11:30:01 +0000
|
||||
Subject: [PATCH] control: Fix hangup for non privsep builds
|
||||
|
||||
Fix related to #262.
|
||||
--- a/src/control.c
|
||||
+++ b/src/control.c
|
||||
@@ -113,8 +113,9 @@ control_handle_read(struct fd_list *fd)
|
||||
ssize_t bytes;
|
||||
|
||||
bytes = read(fd->fd, buffer, sizeof(buffer) - 1);
|
||||
- if (bytes == -1) {
|
||||
+ if (bytes == -1)
|
||||
logerr(__func__);
|
||||
+ if (bytes == -1 || bytes == 0) {
|
||||
control_hangup(fd);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/issues/262
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/21d020b00e60e71b1300d89815f914145d7372f6
|
||||
|
||||
From 21d020b00e60e71b1300d89815f914145d7372f6 Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Sun, 12 Nov 2023 12:16:53 +0000
|
||||
Subject: [PATCH] dhcpcd: Detach from launcher before stopping root process
|
||||
|
||||
This fixes non privsep builds where the launcher reports dhcpcd
|
||||
hungup. Unsure why this happens, but it should not be a problem.
|
||||
|
||||
While here, shutdown has no effect on non STREAM sockets and
|
||||
remove the silly error logging in fork_cb that we read an
|
||||
error. We already printed the error so this makes no sense.
|
||||
|
||||
Hopefully fixes #262.
|
||||
--- a/src/dhcpcd.c
|
||||
+++ b/src/dhcpcd.c
|
||||
@@ -395,7 +395,6 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx)
|
||||
logerr("write");
|
||||
ctx->options |= DHCPCD_DAEMONISED;
|
||||
// dhcpcd_fork_cb will close the socket
|
||||
- shutdown(ctx->fork_fd, SHUT_RDWR);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1877,8 +1876,6 @@ dhcpcd_fork_cb(void *arg, unsigned short events)
|
||||
if (ctx->options & DHCPCD_FORKED) {
|
||||
if (exit_code == EXIT_SUCCESS)
|
||||
logdebugx("forked to background");
|
||||
- else
|
||||
- logerrx("exited with code %d", exit_code);
|
||||
eloop_exit(ctx->eloop, exit_code);
|
||||
} else
|
||||
dhcpcd_signal_cb(exit_code, ctx);
|
||||
@@ -2738,8 +2735,19 @@ main(int argc, char **argv, char **envp)
|
||||
if (ps_stopwait(&ctx) != EXIT_SUCCESS)
|
||||
i = EXIT_FAILURE;
|
||||
#endif
|
||||
- if (ctx.options & DHCPCD_STARTED && !(ctx.options & DHCPCD_FORKED))
|
||||
+ if (ctx.options & DHCPCD_STARTED && !(ctx.options & DHCPCD_FORKED)) {
|
||||
loginfox(PACKAGE " exited");
|
||||
+#ifdef USE_SIGNALS
|
||||
+ /* Detach from the launch process.
|
||||
+ * This *should* happen after we stop the root process,
|
||||
+ * but for some reason non privsep builds get a zero length
|
||||
+ * read in dhcpcd_fork_cb(). */
|
||||
+ if (ctx.fork_fd != -1) {
|
||||
+ if (write(ctx.fork_fd, &i, sizeof(i)) == -1)
|
||||
+ logerr("%s: write", __func__);
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
#ifdef PRIVSEP
|
||||
if (ps_root_stop(&ctx) == -1)
|
||||
i = EXIT_FAILURE;
|
||||
@@ -2753,12 +2761,6 @@ main(int argc, char **argv, char **envp)
|
||||
setproctitle_fini();
|
||||
#endif
|
||||
#ifdef USE_SIGNALS
|
||||
- if (ctx.options & DHCPCD_STARTED) {
|
||||
- /* Try to detach from the launch process. */
|
||||
- if (ctx.fork_fd != -1 &&
|
||||
- write(ctx.fork_fd, &i, sizeof(i)) == -1)
|
||||
- logerr("%s: write", __func__);
|
||||
- }
|
||||
if (ctx.options & (DHCPCD_FORKED | DHCPCD_PRIVSEP))
|
||||
_exit(i); /* so atexit won't remove our pidfile */
|
||||
#endif
|
||||
@@ -0,0 +1,105 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/issues/262
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/3b4c71859c45b9405f96a5ee8fce04bd3014b2d0
|
||||
|
||||
From 3b4c71859c45b9405f96a5ee8fce04bd3014b2d0 Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Mon, 13 Nov 2023 10:24:15 +0000
|
||||
Subject: [PATCH] control: Abort control recv path on hangup
|
||||
|
||||
This fixes a crash when we try and re-use it in another function.
|
||||
--- a/src/control.c
|
||||
+++ b/src/control.c
|
||||
@@ -106,7 +106,7 @@ control_hangup(struct fd_list *fd)
|
||||
control_free(fd);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static int
|
||||
control_handle_read(struct fd_list *fd)
|
||||
{
|
||||
char buffer[1024];
|
||||
@@ -117,7 +117,7 @@ control_handle_read(struct fd_list *fd)
|
||||
logerr(__func__);
|
||||
if (bytes == -1 || bytes == 0) {
|
||||
control_hangup(fd);
|
||||
- return;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
#ifdef PRIVSEP
|
||||
@@ -129,21 +129,23 @@ control_handle_read(struct fd_list *fd)
|
||||
fd->flags &= ~FD_SENDLEN;
|
||||
if (err == -1) {
|
||||
logerr(__func__);
|
||||
- return;
|
||||
+ return 0;
|
||||
}
|
||||
if (err == 1 &&
|
||||
ps_ctl_sendargs(fd, buffer, (size_t)bytes) == -1) {
|
||||
logerr(__func__);
|
||||
control_free(fd);
|
||||
+ return -1;
|
||||
}
|
||||
- return;
|
||||
+ return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
control_recvdata(fd, buffer, (size_t)bytes);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
-static void
|
||||
+static int
|
||||
control_handle_write(struct fd_list *fd)
|
||||
{
|
||||
struct iovec iov[2];
|
||||
@@ -170,7 +172,7 @@ control_handle_write(struct fd_list *fd)
|
||||
logerr("%s: write", __func__);
|
||||
}
|
||||
control_hangup(fd);
|
||||
- return;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
TAILQ_REMOVE(&fd->queue, data, next);
|
||||
@@ -183,7 +185,7 @@ control_handle_write(struct fd_list *fd)
|
||||
#endif
|
||||
|
||||
if (TAILQ_FIRST(&fd->queue) != NULL)
|
||||
- return;
|
||||
+ return 0;
|
||||
|
||||
#ifdef PRIVSEP
|
||||
if (IN_PRIVSEP_SE(fd->ctx) && !(fd->flags & FD_LISTEN)) {
|
||||
@@ -196,9 +198,9 @@ control_handle_write(struct fd_list *fd)
|
||||
if (eloop_event_add(fd->ctx->eloop, fd->fd, ELE_READ,
|
||||
control_handle_data, fd) == -1)
|
||||
logerr("%s: eloop_event_add", __func__);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
-
|
||||
static void
|
||||
control_handle_data(void *arg, unsigned short events)
|
||||
{
|
||||
@@ -207,10 +209,14 @@ control_handle_data(void *arg, unsigned short events)
|
||||
if (!(events & (ELE_READ | ELE_WRITE | ELE_HANGUP)))
|
||||
logerrx("%s: unexpected event 0x%04x", __func__, events);
|
||||
|
||||
- if (events & ELE_WRITE && !(events & ELE_HANGUP))
|
||||
- control_handle_write(fd);
|
||||
- if (events & ELE_READ)
|
||||
- control_handle_read(fd);
|
||||
+ if (events & ELE_WRITE && !(events & ELE_HANGUP)) {
|
||||
+ if (control_handle_write(fd) == -1)
|
||||
+ return;
|
||||
+ }
|
||||
+ if (events & ELE_READ) {
|
||||
+ if (control_handle_read(fd) == -1)
|
||||
+ return;
|
||||
+ }
|
||||
if (events & ELE_HANGUP)
|
||||
control_hangup(fd);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/issues/262
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/ea53344a2430736124bf9fa62acb0d3107acd58f
|
||||
|
||||
From ea53344a2430736124bf9fa62acb0d3107acd58f Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Mon, 13 Nov 2023 10:29:58 +0000
|
||||
Subject: [PATCH] dhcpcd: Remove stdio callback and detach on daemonise
|
||||
|
||||
For some reason, the stdio callback is extremely flaky on
|
||||
*some* Linux based distributions making it very hard to debug some
|
||||
things.
|
||||
Removing it is fine because we now enforce that we have file descriptors
|
||||
for stdin, stdout and stdrr on launch and dup them to /dev/null on daemonise.
|
||||
|
||||
It's also interesting to see behavioural differences between
|
||||
some socketpair implementations that emit a HANGUP and some don't.
|
||||
|
||||
As such, we now close the fork socket on daemonise once more AND
|
||||
in the fork_cb depending on if we hangup or read zero first.
|
||||
|
||||
Fixes #262
|
||||
--- a/src/dhcpcd.c
|
||||
+++ b/src/dhcpcd.c
|
||||
@@ -364,7 +364,7 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx)
|
||||
errno = ENOSYS;
|
||||
return;
|
||||
#else
|
||||
- int i;
|
||||
+ int exit_code;
|
||||
|
||||
if (ctx->options & DHCPCD_DAEMONISE &&
|
||||
!(ctx->options & (DHCPCD_DAEMONISED | DHCPCD_NOWAITIP)))
|
||||
@@ -385,16 +385,19 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx)
|
||||
return;
|
||||
|
||||
#ifdef PRIVSEP
|
||||
- ps_daemonised(ctx);
|
||||
+ if (IN_PRIVSEP(ctx))
|
||||
+ ps_daemonised(ctx);
|
||||
+ else
|
||||
#else
|
||||
- dhcpcd_daemonised(ctx);
|
||||
+ dhcpcd_daemonised(ctx);
|
||||
#endif
|
||||
|
||||
- i = EXIT_SUCCESS;
|
||||
- if (write(ctx->fork_fd, &i, sizeof(i)) == -1)
|
||||
- logerr("write");
|
||||
- ctx->options |= DHCPCD_DAEMONISED;
|
||||
- // dhcpcd_fork_cb will close the socket
|
||||
+ eloop_event_delete(ctx->eloop, ctx->fork_fd);
|
||||
+ exit_code = EXIT_SUCCESS;
|
||||
+ if (write(ctx->fork_fd, &exit_code, sizeof(exit_code)) == -1)
|
||||
+ logerr(__func__);
|
||||
+ close(ctx->fork_fd);
|
||||
+ ctx->fork_fd = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1814,30 +1817,6 @@ dhcpcd_readdump(struct dhcpcd_ctx *ctx)
|
||||
dhcpcd_readdump0, ctx);
|
||||
}
|
||||
|
||||
-static void
|
||||
-dhcpcd_stderr_cb(void *arg, unsigned short events)
|
||||
-{
|
||||
- struct dhcpcd_ctx *ctx = arg;
|
||||
- char log[BUFSIZ];
|
||||
- ssize_t len;
|
||||
-
|
||||
- if (events & ELE_HANGUP)
|
||||
- eloop_exit(ctx->eloop, EXIT_SUCCESS);
|
||||
-
|
||||
- if (!(events & ELE_READ))
|
||||
- return;
|
||||
-
|
||||
- len = read(ctx->stderr_fd, log, sizeof(log) - 1);
|
||||
- if (len == -1) {
|
||||
- if (errno != ECONNRESET)
|
||||
- logerr(__func__);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- log[len] = '\0';
|
||||
- fprintf(stderr, "%s", log);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
dhcpcd_fork_cb(void *arg, unsigned short events)
|
||||
{
|
||||
@@ -1928,7 +1907,7 @@ main(int argc, char **argv, char **envp)
|
||||
ssize_t len;
|
||||
#if defined(USE_SIGNALS) || !defined(THERE_IS_NO_FORK)
|
||||
pid_t pid;
|
||||
- int fork_fd[2], stderr_fd[2];
|
||||
+ int fork_fd[2];
|
||||
#endif
|
||||
#ifdef USE_SIGNALS
|
||||
int sig = 0;
|
||||
@@ -2013,22 +1992,17 @@ main(int argc, char **argv, char **envp)
|
||||
TAILQ_INIT(&ctx.ps_processes);
|
||||
#endif
|
||||
|
||||
- /* Check our streams for validity */
|
||||
- ctx.stdin_valid = fcntl(STDIN_FILENO, F_GETFD) != -1;
|
||||
- ctx.stdout_valid = fcntl(STDOUT_FILENO, F_GETFD) != -1;
|
||||
- ctx.stderr_valid = fcntl(STDERR_FILENO, F_GETFD) != -1;
|
||||
+ logopts = LOGERR_LOG | LOGERR_LOG_DATE | LOGERR_LOG_PID;
|
||||
|
||||
- /* Even we if we don't have input/outputs, we need to
|
||||
- * ensure they are setup for shells. */
|
||||
- if (!ctx.stdin_valid)
|
||||
+ /* Ensure we have stdin, stdout and stderr file descriptors.
|
||||
+ * This is important as we do run scripts which expect these. */
|
||||
+ if (fcntl(STDIN_FILENO, F_GETFD) == -1)
|
||||
dup_null(STDIN_FILENO);
|
||||
- if (!ctx.stdout_valid)
|
||||
+ if (fcntl(STDOUT_FILENO, F_GETFD) == -1)
|
||||
dup_null(STDOUT_FILENO);
|
||||
- if (!ctx.stderr_valid)
|
||||
+ if (fcntl(STDERR_FILENO, F_GETFD) == -1)
|
||||
dup_null(STDERR_FILENO);
|
||||
-
|
||||
- logopts = LOGERR_LOG | LOGERR_LOG_DATE | LOGERR_LOG_PID;
|
||||
- if (ctx.stderr_valid)
|
||||
+ else
|
||||
logopts |= LOGERR_ERR;
|
||||
|
||||
i = 0;
|
||||
@@ -2398,17 +2372,13 @@ main(int argc, char **argv, char **envp)
|
||||
loginfox(PACKAGE "-" VERSION " starting");
|
||||
|
||||
// We don't need stdin past this point
|
||||
- if (ctx.stdin_valid)
|
||||
- dup_null(STDIN_FILENO);
|
||||
+ dup_null(STDIN_FILENO);
|
||||
|
||||
#if defined(USE_SIGNALS) && !defined(THERE_IS_NO_FORK)
|
||||
if (!(ctx.options & DHCPCD_DAEMONISE))
|
||||
goto start_manager;
|
||||
|
||||
- if (xsocketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CXNB, 0, fork_fd) == -1 ||
|
||||
- (ctx.stderr_valid &&
|
||||
- xsocketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CXNB, 0, stderr_fd) == -1))
|
||||
- {
|
||||
+ if (xsocketpair(AF_UNIX, SOCK_SEQPACKET|SOCK_CXNB, 0, fork_fd) == -1) {
|
||||
logerr("socketpair");
|
||||
goto exit_failure;
|
||||
}
|
||||
@@ -2429,22 +2399,6 @@ main(int argc, char **argv, char **envp)
|
||||
dhcpcd_fork_cb, &ctx) == -1)
|
||||
logerr("%s: eloop_event_add", __func__);
|
||||
|
||||
- /*
|
||||
- * Redirect stderr to the stderr socketpair.
|
||||
- * Redirect stdout as well.
|
||||
- * dhcpcd doesn't output via stdout, but something in
|
||||
- * a called script might.
|
||||
- */
|
||||
- if (ctx.stderr_valid) {
|
||||
- if (dup2(stderr_fd[1], STDERR_FILENO) == -1 ||
|
||||
- (ctx.stdout_valid &&
|
||||
- dup2(stderr_fd[1], STDOUT_FILENO) == -1))
|
||||
- logerr("dup2");
|
||||
- close(stderr_fd[0]);
|
||||
- close(stderr_fd[1]);
|
||||
- } else if (ctx.stdout_valid)
|
||||
- dup_null(STDOUT_FILENO);
|
||||
-
|
||||
if (setsid() == -1) {
|
||||
logerr("%s: setsid", __func__);
|
||||
goto exit_failure;
|
||||
@@ -2478,19 +2432,6 @@ main(int argc, char **argv, char **envp)
|
||||
dhcpcd_fork_cb, &ctx) == -1)
|
||||
logerr("%s: eloop_event_add", __func__);
|
||||
|
||||
- if (ctx.stderr_valid) {
|
||||
- ctx.stderr_fd = stderr_fd[0];
|
||||
- close(stderr_fd[1]);
|
||||
-#ifdef PRIVSEP_RIGHTS
|
||||
- if (ps_rights_limit_fd(ctx.stderr_fd) == 1) {
|
||||
- logerr("ps_rights_limit_fd");
|
||||
- goto exit_failure;
|
||||
- }
|
||||
-#endif
|
||||
- if (eloop_event_add(ctx.eloop, ctx.stderr_fd, ELE_READ,
|
||||
- dhcpcd_stderr_cb, &ctx) == -1)
|
||||
- logerr("%s: eloop_event_add", __func__);
|
||||
- }
|
||||
#ifdef PRIVSEP
|
||||
if (IN_PRIVSEP(&ctx) && ps_managersandbox(&ctx, NULL) == -1)
|
||||
goto exit_failure;
|
||||
@@ -2602,6 +2543,7 @@ main(int argc, char **argv, char **envp)
|
||||
if (ifp->active == IF_ACTIVE_USER)
|
||||
break;
|
||||
}
|
||||
+
|
||||
if (ifp == NULL) {
|
||||
if (ctx.ifc == 0) {
|
||||
int loglevel;
|
||||
@@ -2735,24 +2677,22 @@ main(int argc, char **argv, char **envp)
|
||||
if (ps_stopwait(&ctx) != EXIT_SUCCESS)
|
||||
i = EXIT_FAILURE;
|
||||
#endif
|
||||
- if (ctx.options & DHCPCD_STARTED && !(ctx.options & DHCPCD_FORKED)) {
|
||||
+ if (ctx.options & DHCPCD_STARTED && !(ctx.options & DHCPCD_FORKED))
|
||||
loginfox(PACKAGE " exited");
|
||||
-#ifdef USE_SIGNALS
|
||||
- /* Detach from the launch process.
|
||||
- * This *should* happen after we stop the root process,
|
||||
- * but for some reason non privsep builds get a zero length
|
||||
- * read in dhcpcd_fork_cb(). */
|
||||
- if (ctx.fork_fd != -1) {
|
||||
- if (write(ctx.fork_fd, &i, sizeof(i)) == -1)
|
||||
- logerr("%s: write", __func__);
|
||||
- }
|
||||
-#endif
|
||||
- }
|
||||
#ifdef PRIVSEP
|
||||
if (ps_root_stop(&ctx) == -1)
|
||||
i = EXIT_FAILURE;
|
||||
eloop_free(ctx.ps_eloop);
|
||||
#endif
|
||||
+
|
||||
+#ifdef USE_SIGNALS
|
||||
+ /* If still attached, detach from the launcher */
|
||||
+ if (ctx.options & DHCPCD_STARTED && ctx.fork_fd != -1) {
|
||||
+ if (write(ctx.fork_fd, &i, sizeof(i)) == -1)
|
||||
+ logerr("%s: write", __func__);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
eloop_free(ctx.eloop);
|
||||
logclose();
|
||||
free(ctx.logfile);
|
||||
@@ -2760,6 +2700,7 @@ main(int argc, char **argv, char **envp)
|
||||
#ifdef SETPROCTITLE_H
|
||||
setproctitle_fini();
|
||||
#endif
|
||||
+
|
||||
#ifdef USE_SIGNALS
|
||||
if (ctx.options & (DHCPCD_FORKED | DHCPCD_PRIVSEP))
|
||||
_exit(i); /* so atexit won't remove our pidfile */
|
||||
--- a/src/dhcpcd.h
|
||||
+++ b/src/dhcpcd.h
|
||||
@@ -116,10 +116,6 @@ struct passwd;
|
||||
struct dhcpcd_ctx {
|
||||
char pidfile[sizeof(PIDFILE) + IF_NAMESIZE + 1];
|
||||
char vendor[256];
|
||||
- bool stdin_valid; /* It's possible stdin, stdout and stderr */
|
||||
- bool stdout_valid; /* could be closed when dhcpcd starts. */
|
||||
- bool stderr_valid;
|
||||
- int stderr_fd; /* FD for logging to stderr */
|
||||
int fork_fd; /* FD for the fork init signal pipe */
|
||||
const char *cffile;
|
||||
unsigned long long options;
|
||||
--- a/src/privsep.c
|
||||
+++ b/src/privsep.c
|
||||
@@ -172,8 +172,7 @@ ps_dropprivs(struct dhcpcd_ctx *ctx)
|
||||
* Obviously this won't work if we are using a logfile
|
||||
* or redirecting stderr to a file. */
|
||||
if ((ctx->options & DHC_NOCHKIO) == DHC_NOCHKIO ||
|
||||
- (ctx->logfile == NULL &&
|
||||
- (!ctx->stderr_valid || isatty(STDERR_FILENO) == 1)))
|
||||
+ (ctx->logfile == NULL && isatty(STDERR_FILENO) == 1))
|
||||
{
|
||||
if (setrlimit(RLIMIT_FSIZE, &rzero) == -1)
|
||||
logerr("setrlimit RLIMIT_FSIZE");
|
||||
@@ -305,14 +304,11 @@ ps_rights_limit_stdio(struct dhcpcd_ctx *ctx)
|
||||
const int iebadf = CAPH_IGNORE_EBADF;
|
||||
int error = 0;
|
||||
|
||||
- if (ctx->stdin_valid &&
|
||||
- caph_limit_stream(STDIN_FILENO, CAPH_READ | iebadf) == -1)
|
||||
+ if (caph_limit_stream(STDIN_FILENO, CAPH_READ | iebadf) == -1)
|
||||
error = -1;
|
||||
- if (ctx->stdout_valid &&
|
||||
- caph_limit_stream(STDOUT_FILENO, CAPH_WRITE | iebadf) == -1)
|
||||
+ if (caph_limit_stream(STDOUT_FILENO, CAPH_WRITE | iebadf) == -1)
|
||||
error = -1;
|
||||
- if (ctx->stderr_valid &&
|
||||
- caph_limit_stream(STDERR_FILENO, CAPH_WRITE | iebadf) == -1)
|
||||
+ if (caph_limit_stream(STDERR_FILENO, CAPH_WRITE | iebadf) == -1)
|
||||
error = -1;
|
||||
|
||||
return error;
|
||||
@@ -0,0 +1,20 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/8d12632c670f02d8a685e80c8abad7049d3dd18f
|
||||
|
||||
From 8d12632c670f02d8a685e80c8abad7049d3dd18f Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Mon, 13 Nov 2023 15:54:50 +0000
|
||||
Subject: [PATCH] Fix privsep builds for prior.
|
||||
|
||||
--- a/src/dhcpcd.c
|
||||
+++ b/src/dhcpcd.c
|
||||
@@ -388,9 +388,8 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx)
|
||||
if (IN_PRIVSEP(ctx))
|
||||
ps_daemonised(ctx);
|
||||
else
|
||||
-#else
|
||||
- dhcpcd_daemonised(ctx);
|
||||
#endif
|
||||
+ dhcpcd_daemonised(ctx);
|
||||
|
||||
eloop_event_delete(ctx->eloop, ctx->fork_fd);
|
||||
exit_code = EXIT_SUCCESS;
|
||||
@@ -0,0 +1,37 @@
|
||||
https://github.com/NetworkConfiguration/dhcpcd/commit/6788608eb0fcd32fd23974100cdd42d3174cb8d1
|
||||
|
||||
From 6788608eb0fcd32fd23974100cdd42d3174cb8d1 Mon Sep 17 00:00:00 2001
|
||||
From: Roy Marples <roy@marples.name>
|
||||
Date: Mon, 13 Nov 2023 16:05:04 +0000
|
||||
Subject: [PATCH] Fix an unused var warning for capsicum for prior
|
||||
|
||||
--- a/src/privsep.c
|
||||
+++ b/src/privsep.c
|
||||
@@ -299,7 +299,7 @@ ps_rights_limit_fdpair(int fd[])
|
||||
}
|
||||
|
||||
static int
|
||||
-ps_rights_limit_stdio(struct dhcpcd_ctx *ctx)
|
||||
+ps_rights_limit_stdio()
|
||||
{
|
||||
const int iebadf = CAPH_IGNORE_EBADF;
|
||||
int error = 0;
|
||||
@@ -452,7 +452,7 @@ ps_startprocess(struct ps_process *psp,
|
||||
ctx->ps_log_root_fd = -1;
|
||||
}
|
||||
#ifdef PRIVSEP_RIGHTS
|
||||
- if (ps_rights_limit_stdio(ctx) == -1) {
|
||||
+ if (ps_rights_limit_stdio() == -1) {
|
||||
logerr("ps_rights_limit_stdio");
|
||||
goto errexit;
|
||||
}
|
||||
@@ -666,7 +666,7 @@ ps_managersandbox(struct dhcpcd_ctx *ctx, const char *_pledge)
|
||||
#ifdef PRIVSEP_RIGHTS
|
||||
if ((ctx->pf_inet_fd != -1 &&
|
||||
ps_rights_limit_ioctl(ctx->pf_inet_fd) == -1) ||
|
||||
- ps_rights_limit_stdio(ctx) == -1)
|
||||
+ ps_rights_limit_stdio() == -1)
|
||||
{
|
||||
logerr("%s: cap_rights_limit", __func__);
|
||||
return -1;
|
||||
|
||||
@@ -6,7 +6,7 @@ EAPI=8
|
||||
DESCRIPTION="Virtual for .NET SDK"
|
||||
|
||||
SLOT="6.0"
|
||||
KEYWORDS="~amd64 ~arm ~arm64"
|
||||
KEYWORDS="amd64 ~arm ~arm64"
|
||||
|
||||
RDEPEND="
|
||||
|| (
|
||||
|
||||
@@ -6,7 +6,7 @@ EAPI=8
|
||||
DESCRIPTION="Virtual for .NET SDK"
|
||||
|
||||
SLOT="7.0"
|
||||
KEYWORDS="~amd64 ~arm ~arm64"
|
||||
KEYWORDS="amd64 ~arm ~arm64"
|
||||
|
||||
RDEPEND="
|
||||
|| (
|
||||
|
||||
Reference in New Issue
Block a user