summaryrefslogtreecommitdiffstats
path: root/source/n/NetworkManager
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2021-09-17 17:22:57 +0000
committer Eric Hameleers <alien@slackware.com>2021-09-18 08:59:57 +0200
commitb7cf3882dab7767651bfff1579436222c9a5fe59 (patch)
treec83941b1c9921504853a54ac00c8a61f6985a11d /source/n/NetworkManager
parent216e5284961bf8c173702c05ba4329cfaca9015f (diff)
downloadcurrent-b7cf3882dab7767651bfff1579436222c9a5fe59.tar.gz
current-b7cf3882dab7767651bfff1579436222c9a5fe59.tar.xz
Fri Sep 17 17:22:57 UTC 202120210917172257
kde/plasma-workspace-5.22.5-x86_64-2.txz: Rebuilt. Patched to fix USB storage devices detected only once per session. Thanks to ctrlaltca. n/NetworkManager-1.32.10-x86_64-4.txz: Rebuilt. Patched to shut down dhcpcd gracefully, and restored dhcpcd as the default client when using NetworkManager on Slackware. In this case I'll swim upstream if it means better security. Who knows what your DHCP server might attempt when it comes to public WiFi? :-) Thanks to Roy Marples and marav. n/gnupg2-2.2.31-x86_64-1.txz: Upgraded. xap/pidgin-2.14.7-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/n/NetworkManager')
-rwxr-xr-xsource/n/NetworkManager/NetworkManager.SlackBuild2
-rw-r--r--source/n/NetworkManager/conf.d/00-dhcp-client.conf19
-rw-r--r--source/n/NetworkManager/patches/9cc2591fe871b29ce9a743dfb2cd189cb1580bde.dhcpcd.graceful.exit.patch119
3 files changed, 124 insertions, 16 deletions
diff --git a/source/n/NetworkManager/NetworkManager.SlackBuild b/source/n/NetworkManager/NetworkManager.SlackBuild
index 3cfd061d4..c2fb7ed04 100755
--- a/source/n/NetworkManager/NetworkManager.SlackBuild
+++ b/source/n/NetworkManager/NetworkManager.SlackBuild
@@ -27,7 +27,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=NetworkManager
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-3}
+BUILD=${BUILD:-4}
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
diff --git a/source/n/NetworkManager/conf.d/00-dhcp-client.conf b/source/n/NetworkManager/conf.d/00-dhcp-client.conf
index 53e30c85d..78518ac56 100644
--- a/source/n/NetworkManager/conf.d/00-dhcp-client.conf
+++ b/source/n/NetworkManager/conf.d/00-dhcp-client.conf
@@ -1,22 +1,11 @@
[main]
# Choose a DHCP client below. Upstream recommends internal, but results may vary.
#
-# This is a simple DHCP client that is built into NetworkManager:
-dhcp=internal
+# dhcpcd is the DHCP client usually used by Slackware:
+dhcp=dhcpcd
#
# dhclient is the ISC reference DHCP client, part of the dhcp package:
#dhcp=dhclient
#
-# dhcpcd is the DHCP client usually used by Slackware. However, it is built
-# with --enable-privsep, and a side-effect of this when used with
-# NetworkManager is that the network will not return properly after a
-# suspend/resume cycle. If you don't require this functionality, dhcpcd will
-# work fine otherwise. If you do require it and don't want to use one of the
-# other two options here, there are some workarounds.
-# You may force NetworkManager to reload the network by killing dhcpcd:
-# killall -9 dhcpcd
-# Otherwise, you may rebuild the dhcpcd package without privilege separation
-# using the following command in the dhcpcd source directory:
-# PRIVSEP=no ./dhcpcd.SlackBuild
-# The resulting dhcpcd package will work fine with NetworkManager.
-#dhcp=dhcpcd
+# This is a simple DHCP client that is built into NetworkManager:
+#dhcp=internal
diff --git a/source/n/NetworkManager/patches/9cc2591fe871b29ce9a743dfb2cd189cb1580bde.dhcpcd.graceful.exit.patch b/source/n/NetworkManager/patches/9cc2591fe871b29ce9a743dfb2cd189cb1580bde.dhcpcd.graceful.exit.patch
new file mode 100644
index 000000000..72e33b75e
--- /dev/null
+++ b/source/n/NetworkManager/patches/9cc2591fe871b29ce9a743dfb2cd189cb1580bde.dhcpcd.graceful.exit.patch
@@ -0,0 +1,119 @@
+From 9cc2591fe871b29ce9a743dfb2cd189cb1580bde Mon Sep 17 00:00:00 2001
+From: Roy Marples <roy@marples.name>
+Date: Thu, 16 Sep 2021 20:36:49 +0100
+Subject: [PATCH] dhcpcd: stop dhcpcd using nm_dhcp_client_stop_pid rather than
+ killing
+
+NetworkManager can stop/start a DHCP client faster than dhcpcd can
+gracefully exit.
+
+As such, refactor nm_dhcp_client_stop_pid so that a specific signal
+can be sent which allows dhcpcd to gracefully stop on SIGTERM and
+release on SIGALRM.
+---
+ src/core/dhcp/nm-dhcp-client.c | 6 +++---
+ src/core/dhcp/nm-dhcp-client.h | 2 +-
+ src/core/dhcp/nm-dhcp-dhclient.c | 2 +-
+ src/core/dhcp/nm-dhcp-dhcpcd.c | 22 ++++------------------
+ 4 files changed, 9 insertions(+), 23 deletions(-)
+
+diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c
+index f88c79c0be..727296d158 100644
+--- a/src/core/dhcp/nm-dhcp-client.c
++++ b/src/core/dhcp/nm-dhcp-client.c
+@@ -429,14 +429,14 @@ watch_cleanup(NMDhcpClient *self)
+ }
+
+ void
+-nm_dhcp_client_stop_pid(pid_t pid, const char *iface)
++nm_dhcp_client_stop_pid(pid_t pid, const char *iface, int sig)
+ {
+ char *name = iface ? g_strdup_printf("dhcp-client-%s", iface) : NULL;
+
+ g_return_if_fail(pid > 1);
+
+ nm_utils_kill_child_sync(pid,
+- SIGTERM,
++ sig,
+ LOGD_DHCP,
+ name ?: "dhcp-client",
+ NULL,
+@@ -457,7 +457,7 @@ stop(NMDhcpClient *self, gboolean release)
+ if (priv->pid > 0) {
+ /* Clean up the watch handler since we're explicitly killing the daemon */
+ watch_cleanup(self);
+- nm_dhcp_client_stop_pid(priv->pid, priv->iface);
++ nm_dhcp_client_stop_pid(priv->pid, priv->iface, SIGTERM);
+ }
+ priv->pid = -1;
+ }
+diff --git a/src/core/dhcp/nm-dhcp-client.h b/src/core/dhcp/nm-dhcp-client.h
+index 2e7e021650..439b873dec 100644
+--- a/src/core/dhcp/nm-dhcp-client.h
++++ b/src/core/dhcp/nm-dhcp-client.h
+@@ -197,7 +197,7 @@ void nm_dhcp_client_stop(NMDhcpClient *self, gboolean release);
+ /* Backend helpers for subclasses */
+ void nm_dhcp_client_stop_existing(const char *pid_file, const char *binary_name);
+
+-void nm_dhcp_client_stop_pid(pid_t pid, const char *iface);
++void nm_dhcp_client_stop_pid(pid_t pid, const char *iface, int sig);
+
+ void nm_dhcp_client_start_timeout(NMDhcpClient *self);
+
+diff --git a/src/core/dhcp/nm-dhcp-dhclient.c b/src/core/dhcp/nm-dhcp-dhclient.c
+index 970a51f5dd..21fc857d26 100644
+--- a/src/core/dhcp/nm-dhcp-dhclient.c
++++ b/src/core/dhcp/nm-dhcp-dhclient.c
+@@ -627,7 +627,7 @@ stop(NMDhcpClient *client, gboolean release)
+
+ if (dhclient_start(client, NULL, TRUE, &rpid, 0, NULL)) {
+ /* Wait a few seconds for the release to happen */
+- nm_dhcp_client_stop_pid(rpid, nm_dhcp_client_get_iface(client));
++ nm_dhcp_client_stop_pid(rpid, nm_dhcp_client_get_iface(client), SIGTERM);
+ }
+ }
+ }
+diff --git a/src/core/dhcp/nm-dhcp-dhcpcd.c b/src/core/dhcp/nm-dhcp-dhcpcd.c
+index 7522156bef..db694a2c11 100644
+--- a/src/core/dhcp/nm-dhcp-dhcpcd.c
++++ b/src/core/dhcp/nm-dhcp-dhcpcd.c
+@@ -162,31 +162,17 @@ stop(NMDhcpClient *client, gboolean release)
+ {
+ NMDhcpDhcpcd *self = NM_DHCP_DHCPCD(client);
+ pid_t pid;
+- int sig, errsv;
++ int sig;
+
+ pid = nm_dhcp_client_get_pid(client);
+ if (pid > 1) {
+ sig = release ? SIGALRM : SIGTERM;
+ _LOGD("sending %s to dhcpcd pid %d", sig == SIGALRM ? "SIGALRM" : "SIGTERM", pid);
+
+- /* dhcpcd-9.x features privilege separation.
+- * It's not our job to track all these processes so we rely on dhcpcd
+- * to always cleanup after itself.
+- * Because it also re-parents itself to PID 1, the process cannot be
+- * reaped or waited for.
+- * As such, just send the correct signal.
+- */
+- if (kill(pid, sig) == -1) {
+- errsv = errno;
+- _LOGE("failed to kill dhcpcd %d:%s", errsv, strerror(errsv));
+- }
+-
+- /* When this function exits NM expects the PID to be -1.
+- * This means we also need to stop watching the pid.
+- * If we need to know the exit status then we need to refactor NM
+- * to allow a non -1 to mean we're waiting to exit still.
+- */
++ /* We need to remove the watch before stopping the process */
+ nm_dhcp_client_stop_watch_child(client, pid);
++
++ nm_dhcp_client_stop_pid(pid, nm_dhcp_client_get_iface(client), sig);
+ }
+ }
+
+--
+GitLab
+
+