diff options
author | Jory Pratt <anarchy@gentoo.org> | 2021-03-11 08:59:41 -0600 |
---|---|---|
committer | Jory Pratt <anarchy@gentoo.org> | 2021-03-11 08:59:41 -0600 |
commit | 2e9c9f696f9b4f5ad271c7423976a1c543e3d84a (patch) | |
tree | 38c0f19e4279f514a5614e296c928ad9b50c1166 /net-misc | |
parent | media-libs/mesa: use upstream patch for git_sha1 generation missing (diff) | |
download | musl-2e9c9f696f9b4f5ad271c7423976a1c543e3d84a.tar.gz musl-2e9c9f696f9b4f5ad271c7423976a1c543e3d84a.tar.bz2 musl-2e9c9f696f9b4f5ad271c7423976a1c543e3d84a.zip |
net-misc/networkmanager: sync with ::gentoo, adjust patches
Package-Manager: Portage-3.0.17, Repoman-3.0.2
Signed-off-by: Jory Pratt <anarchy@gentoo.org>
Diffstat (limited to 'net-misc')
9 files changed, 981 insertions, 0 deletions
diff --git a/net-misc/networkmanager/Manifest b/net-misc/networkmanager/Manifest index a11544c0..e16febce 100644 --- a/net-misc/networkmanager/Manifest +++ b/net-misc/networkmanager/Manifest @@ -1 +1,2 @@ DIST NetworkManager-1.26.4.tar.xz 5051424 BLAKE2B 53a8fd9f9a061b9ac6b117f431e72b1967cfd2fffb539e0dc9335c37a3a59dc33562e81f7887019c3460f403a95b96e8105b1ae41b00c8488ae12a370a3d82ff SHA512 91e865c83a6ae694c9f6aa50e7f938dfa55bfddac32a6dfb73e6edb34b2539068ff9f83bf662bb2d689bd3c66cf53d7fa015930940cf7bda2d4a16561cf02328 +DIST NetworkManager-1.28.0.tar.xz 5129848 BLAKE2B 37dc9cda283dad29a70c85ed41a77844b4f60a9815be4b6780fbefecfeffb644fd67ea65373a1895fd2102f2beec9ad141b6e9a92a1a32de646d64acd4250b62 SHA512 ab0bc39626dc55df4e122ad6e1a8086e1467f44bdd41c4491c752dca3ffb549796e0ac888041f12f661f2f6cf4142d0fce59b5135549e48a0076fafcdc45ca06 diff --git a/net-misc/networkmanager/files/1.28.0/0001-uncouple-glibc-functions-and-headers.patch b/net-misc/networkmanager/files/1.28.0/0001-uncouple-glibc-functions-and-headers.patch new file mode 100644 index 00000000..59f524f3 --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0001-uncouple-glibc-functions-and-headers.patch @@ -0,0 +1,60 @@ +From 839343b02e59cb36e58f7e3def8bb39bf4ee3d5b Mon Sep 17 00:00:00 2001 +From: Jory Pratt <anarchy@gentoo.org> +Date: Thu, 11 Mar 2021 07:59:56 -0600 +Subject: [PATCH] uncouple glibc functions and headers + +--- + shared/nm-glib-aux/nm-json-aux.c | 4 ++++ + shared/systemd/src/basic/stdio-util.h | 2 ++ + shared/systemd/src/basic/util.h | 6 ++++++ + 3 files changed, 12 insertions(+) + +diff --git a/shared/nm-glib-aux/nm-json-aux.c b/shared/nm-glib-aux/nm-json-aux.c +index 4212e62..83114c7 100644 +--- a/shared/nm-glib-aux/nm-json-aux.c ++++ b/shared/nm-glib-aux/nm-json-aux.c +@@ -9,6 +9,10 @@ + + #include <dlfcn.h> + ++#ifndef RTLD_DEEPBIND ++#define RTLD_DEEPBIND 0 ++#endif ++ + /*****************************************************************************/ + + static void +diff --git a/shared/systemd/src/basic/stdio-util.h b/shared/systemd/src/basic/stdio-util.h +index c3b9448..e80a938 100644 +--- a/shared/systemd/src/basic/stdio-util.h ++++ b/shared/systemd/src/basic/stdio-util.h +@@ -1,7 +1,9 @@ + /* SPDX-License-Identifier: LGPL-2.1+ */ + #pragma once + ++#if defined(__GLIBC__) + #include <printf.h> ++#endif + #include <stdarg.h> + #include <stdio.h> + #include <sys/types.h> +diff --git a/shared/systemd/src/basic/util.h b/shared/systemd/src/basic/util.h +index 6fc7480..fab72e5 100644 +--- a/shared/systemd/src/basic/util.h ++++ b/shared/systemd/src/basic/util.h +@@ -30,6 +30,12 @@ static inline unsigned u64log2(uint64_t n) { + #endif + } + ++#if !defined(__GLIBC__) ++typedef int (*__compar_fn_t) (const void*, const void*); ++typedef __compar_fn_t comparison_fn_t; ++typedef int (*__compar_d_fn_t) (const void *, const void *, void *); ++#endif ++ + static inline unsigned u32ctz(uint32_t n) { + #if __SIZEOF_INT__ == 4 + return n != 0 ? __builtin_ctz(n) : 32; +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/1.28.0/0002-network-support.patch b/net-misc/networkmanager/files/1.28.0/0002-network-support.patch new file mode 100644 index 00000000..4915ffb1 --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0002-network-support.patch @@ -0,0 +1,62 @@ +From 08d889a2bcaaad17a92303277b331a515bf40fb8 Mon Sep 17 00:00:00 2001 +From: +Date: Thu, 11 Mar 2021 07:42:39 -0600 +Subject: [PATCH 2/6] network support + +--- + libnm-core/nm-utils.h | 4 ++++ + shared/systemd/src/basic/socket-util.h | 5 +++++ + src/platform/wifi/nm-wifi-utils.h | 4 ++++ + 3 files changed, 13 insertions(+) + +diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h +index 9589c51..6b42883 100644 +--- a/libnm-core/nm-utils.h ++++ b/libnm-core/nm-utils.h +@@ -15,7 +15,11 @@ + #include <netinet/in.h> + + /* For ETH_ALEN and INFINIBAND_ALEN */ ++#if defined(__GLIBC__) + #include <linux/if_ether.h> ++#else ++#define ETH_ALEN 6 /* Octets in one ethernet addr */ ++#endif + #include <linux/if_infiniband.h> + + #include "nm-core-enum-types.h" +diff --git a/shared/systemd/src/basic/socket-util.h b/shared/systemd/src/basic/socket-util.h +index 1ece911..c6d5a60 100644 +--- a/shared/systemd/src/basic/socket-util.h ++++ b/shared/systemd/src/basic/socket-util.h +@@ -13,6 +13,11 @@ + #include <sys/socket.h> + #include <sys/types.h> + #include <sys/un.h> ++#if !defined(__GLIBC__) ++/* SIOCGSTAMPNS from linux/asm-generic.h ++ * for src/systemd/src/libsystemd-network/sd-lldp.c */ ++#include <linux/sockios.h> ++#endif + + #include "macro.h" + #include "missing_socket.h" +diff --git a/src/platform/wifi/nm-wifi-utils.h b/src/platform/wifi/nm-wifi-utils.h +index d1df2fb..792f4ab 100644 +--- a/src/platform/wifi/nm-wifi-utils.h ++++ b/src/platform/wifi/nm-wifi-utils.h +@@ -7,7 +7,11 @@ + #ifndef __WIFI_UTILS_H__ + #define __WIFI_UTILS_H__ + ++#if defined(__GLIBC__) + #include <net/ethernet.h> ++#else /* musl libc */ ++#define ETH_ALEN 6 /* Octets in one ethernet addr */ ++#endif + + #include "nm-dbus-interface.h" + #include "nm-setting-wireless.h" +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/1.28.0/0003-Fix-includes-to-support-musl.patch b/net-misc/networkmanager/files/1.28.0/0003-Fix-includes-to-support-musl.patch new file mode 100644 index 00000000..cdf9d530 --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0003-Fix-includes-to-support-musl.patch @@ -0,0 +1,110 @@ +From a089fdec09fe8893ee8cff79ce2027d3ea2fa5bb Mon Sep 17 00:00:00 2001 +From: +Date: Thu, 11 Mar 2021 07:42:59 -0600 +Subject: [PATCH 3/6] Fix includes to support musl + +--- + src/NetworkManagerUtils.c | 1 + + src/devices/nm-device-bridge.c | 2 ++ + src/devices/nm-device.c | 4 ++++ + src/nm-manager.c | 1 + + src/platform/nm-linux-platform.c | 5 +++++ + src/systemd/src/libsystemd-network/sd-dhcp6-client.c | 4 ++++ + 6 files changed, 17 insertions(+) + +diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c +index 4739e9d..ceadb50 100644 +--- a/src/NetworkManagerUtils.c ++++ b/src/NetworkManagerUtils.c +@@ -4,6 +4,7 @@ + * Copyright (C) 2005 - 2008 Novell, Inc. + */ + ++#include <netinet/if_ether.h> + #include "nm-default.h" + + #include "NetworkManagerUtils.h" +diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c +index 48dcec1..e78eab5 100644 +--- a/src/devices/nm-device-bridge.c ++++ b/src/devices/nm-device-bridge.c +@@ -15,6 +15,8 @@ + #include "nm-device-factory.h" + #include "nm-core-internal.h" + ++#include <linux/if_ether.h> ++ + #include "nm-device-logging.h" + _LOG_DECLARE_SELF(NMDeviceBridge); + +diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c +index 0be05f2..ebf233b 100644 +--- a/src/devices/nm-device.c ++++ b/src/devices/nm-device.c +@@ -17,7 +17,11 @@ + #include <arpa/inet.h> + #include <fcntl.h> + #include <linux/if_addr.h> ++#if defined(__GLIBC__) + #include <linux/if_arp.h> ++#else ++#include <linux/if.h> ++#endif + #include <linux/rtnetlink.h> + + #include "nm-std-aux/unaligned.h" +diff --git a/src/nm-manager.c b/src/nm-manager.c +index 46f81c7..090916e 100644 +--- a/src/nm-manager.c ++++ b/src/nm-manager.c +@@ -15,6 +15,7 @@ + #include <sys/stat.h> + #include <sys/sendfile.h> + #include <limits.h> ++#include <asm/types.h> + + #include "nm-glib-aux/nm-c-list.h" + +diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c +index b377c85..7e32eea 100644 +--- a/src/platform/nm-linux-platform.c ++++ b/src/platform/nm-linux-platform.c +@@ -6,6 +6,7 @@ + #include "nm-default.h" + + #include "nm-linux-platform.h" ++#include "wpan/nm-wpan-utils.h" + + #include <arpa/inet.h> + #include <dlfcn.h> +@@ -14,7 +15,11 @@ + #include <libudev.h> + #include <linux/fib_rules.h> + #include <linux/ip.h> ++#if defined(__GLIBC__) + #include <linux/if_arp.h> ++#else ++#include <linux/if.h> ++#endif + #include <linux/if_bridge.h> + #include <linux/if_link.h> + #include <linux/if_tun.h> +diff --git a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c +index ec7f1be..ae63a86 100644 +--- a/src/systemd/src/libsystemd-network/sd-dhcp6-client.c ++++ b/src/systemd/src/libsystemd-network/sd-dhcp6-client.c +@@ -7,7 +7,11 @@ + + #include <errno.h> + #include <sys/ioctl.h> ++#if defined(__GLIBC__) + #include <linux/if_arp.h> ++#else ++#include <linux/if.h> ++#endif + #include <linux/if_infiniband.h> + + #include "sd-dhcp6-client.h" +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/1.28.0/0004-Fix-pthread-support-for-non-glibc-users.patch b/net-misc/networkmanager/files/1.28.0/0004-Fix-pthread-support-for-non-glibc-users.patch new file mode 100644 index 00000000..6ac79bef --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0004-Fix-pthread-support-for-non-glibc-users.patch @@ -0,0 +1,54 @@ +From edd98123a8aa41c799331d6ab844d026ecff2c46 Mon Sep 17 00:00:00 2001 +From: +Date: Thu, 11 Mar 2021 07:43:23 -0600 +Subject: [PATCH 4/6] Fix pthread support for non glibc users + +--- + shared/systemd/src/basic/process-util.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/shared/systemd/src/basic/process-util.c b/shared/systemd/src/basic/process-util.c +index 03ca04e..1e97688 100644 +--- a/shared/systemd/src/basic/process-util.c ++++ b/shared/systemd/src/basic/process-util.c +@@ -17,6 +17,9 @@ + #include <sys/wait.h> + #include <syslog.h> + #include <unistd.h> ++#ifndef __GLIBC__ ++#include <pthread.h> ++#endif + #if 0 /* NM_IGNORED */ + #if HAVE_VALGRIND_VALGRIND_H + #include <valgrind/valgrind.h> +@@ -1152,11 +1155,13 @@ void reset_cached_pid(void) { + cached_pid = CACHED_PID_UNSET; + } + ++#ifdef __GLIBC__ + /* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc + * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against + * libpthread, as it is part of glibc anyway. */ + extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle); + extern void* __dso_handle _weak_; ++#endif + + pid_t getpid_cached(void) { + static bool installed = false; +@@ -1185,7 +1190,12 @@ pid_t getpid_cached(void) { + * only half-documented (glibc doesn't document it but LSB does — though only superficially) + * we'll check for errors only in the most generic fashion possible. */ + +- if (__register_atfork(NULL, NULL, reset_cached_pid, __dso_handle) != 0) { ++ #ifdef __GLIBC__ ++ if (__register_atfork(NULL, NULL, reset_cached_pid, __dso_handle) != 0) { ++ #else ++ if (pthread_atfork(NULL, NULL, reset_cached_pid) != 0) { ++ #endif ++ + /* OOM? Let's try again later */ + cached_pid = CACHED_PID_UNSET; + return new_pid; +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/1.28.0/0005-define-compare-for-non-glibc-users.patch b/net-misc/networkmanager/files/1.28.0/0005-define-compare-for-non-glibc-users.patch new file mode 100644 index 00000000..e2720d74 --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0005-define-compare-for-non-glibc-users.patch @@ -0,0 +1,30 @@ +From 062717e43db51cad0528415f619300e8f5a282cf Mon Sep 17 00:00:00 2001 +From: +Date: Thu, 11 Mar 2021 07:45:17 -0600 +Subject: [PATCH 5/6] define compare for non glibc users + +--- + shared/systemd/src/basic/sort-util.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/shared/systemd/src/basic/sort-util.h b/shared/systemd/src/basic/sort-util.h +index a8dc3bb..d619a54 100644 +--- a/shared/systemd/src/basic/sort-util.h ++++ b/shared/systemd/src/basic/sort-util.h +@@ -5,6 +5,13 @@ + + #include "macro.h" + ++#ifndef __COMPAR_FN_T ++# define __COMPAR_FN_T ++typedef int (*__compar_fn_t) (const void *, const void *); ++typedef __compar_fn_t comparison_fn_t; ++typedef int (*__compar_d_fn_t) (const void *, const void *, void *); ++#endif ++ + void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, + __compar_d_fn_t compar, void *arg); + +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/1.28.0/0006-musl-added-support-for-reallocarray-0-but-the-functi.patch b/net-misc/networkmanager/files/1.28.0/0006-musl-added-support-for-reallocarray-0-but-the-functi.patch new file mode 100644 index 00000000..3c1a3917 --- /dev/null +++ b/net-misc/networkmanager/files/1.28.0/0006-musl-added-support-for-reallocarray-0-but-the-functi.patch @@ -0,0 +1,43 @@ +From 94820f35e5559d610cd2a5bf967932d97df6fed9 Mon Sep 17 00:00:00 2001 +From: Jory Pratt <anarchy@gentoo.org> +Date: Thu, 11 Mar 2021 07:46:00 -0600 +Subject: [PATCH 6/6] musl [added support for reallocarray](0), but the + function prototype is declared in `stdlib.h` instead of `malloc.h`. + +Update the check for reallocarray to check both in `malloc.h` and +`stdlib.h`. + +[0]:https://git.musl-libc.org/cgit/musl/commit/?id=821083ac7b54eaa040d5a8ddc67c6206a175e0ca +--- + configure | 2 +- + configure.ac | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index ec42b54..8e87c92 100755 +--- a/configure ++++ b/configure +@@ -18250,7 +18250,7 @@ _ACEOF + + ac_fn_c_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" " + #include <malloc.h> +- ++#include <stdlib.h> + " + if test "x$ac_cv_have_decl_reallocarray" = xyes; then : + ac_have_decl=1 +diff --git a/configure.ac b/configure.ac +index 8483dd7..d32bd46 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -83,6 +83,7 @@ AC_CHECK_DECLS([ + reallocarray], + [], [], [[ + #include <malloc.h> ++#include <stdlib.h> + ]]) + + AC_CHECK_DECLS([ +-- +2.26.2 + diff --git a/net-misc/networkmanager/files/networkmanager-1.28.0-dhcpcd9.patch b/net-misc/networkmanager/files/networkmanager-1.28.0-dhcpcd9.patch new file mode 100644 index 00000000..cfa642dd --- /dev/null +++ b/net-misc/networkmanager/files/networkmanager-1.28.0-dhcpcd9.patch @@ -0,0 +1,265 @@ +From a58a89213bf4d0cefb155fef1ec9425f7a6ca5c8 Mon Sep 17 00:00:00 2001 +From: Roy Marples <roy@marples.name> +Date: Tue, 19 Jan 2021 05:04:31 +0000 +Subject: [PATCH] DHCP: Support dhcpcd-9.x + +This locks NM into dhcpcd-9.3.3 as that is the first version to support +the --noconfigure option. Older versions are no longer supported by NM +because they do modify the host which is undesirable. + +Due to the way dhcpcd-9 uses privilege separation and that it re-parents +itself to PID 1, the main process cannot be reaped or waited for. +So we rely on dhcpcd correctly cleaning up after itself. +A new function nm_dhcp_client_stop_watch_child() has been added +so that dhcpcd can perform similar cleanup to the equivalent stop call. + +As part of this change, the STOP and STOPPED reasons are mapped to +NM_DHCP_STATE_DONE and PREINIT is mapped to a new state NM_DHCP_STATE_NOOP +which means NM should just ignore this state. + +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/668 +--- + NEWS | 3 ++ + src/dhcp/nm-dhcp-client.c | 20 +++++++++- + src/dhcp/nm-dhcp-client.h | 3 ++ + src/dhcp/nm-dhcp-dhcpcd.c | 82 ++++++++++++++++++++------------------- + 4 files changed, 67 insertions(+), 41 deletions(-) + +diff --git a/NEWS b/NEWS +index 8a48587e5..958bbe91c 100644 +--- a/NEWS ++++ b/NEWS +@@ -45,6 +45,9 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! + cmdline argument actually generates a connection which disables both + ipv4 and ipv6. Previously the generated connection would disable ipv4 + but ipv6 would be set to the 'auto' method. ++* The dhcpcd plugin now requires a minimum version of dhcpcd-9.3.3 with ++ the --noconfigure option. Using an older version will cause dhcpcd to ++ exit with a status code of 1. + + ============================================= + NetworkManager-1.26 +diff --git a/src/dhcp/nm-dhcp-client.c b/src/dhcp/nm-dhcp-client.c +index 46ab48959..56f599abf 100644 +--- a/src/dhcp/nm-dhcp-client.c ++++ b/src/dhcp/nm-dhcp-client.c +@@ -367,10 +367,13 @@ reason_to_state(NMDhcpClient *self, const char *iface, const char *reason) + else if (g_ascii_strcasecmp(reason, "nak") == 0 || g_ascii_strcasecmp(reason, "expire") == 0 + || g_ascii_strcasecmp(reason, "expire6") == 0) + return NM_DHCP_STATE_EXPIRE; +- else if (g_ascii_strcasecmp(reason, "end") == 0) ++ else if (g_ascii_strcasecmp(reason, "end") == 0 || g_ascii_strcasecmp(reason, "stop") == 0 ++ || g_ascii_strcasecmp(reason, "stopped") == 0) + return NM_DHCP_STATE_DONE; + else if (g_ascii_strcasecmp(reason, "fail") == 0 || g_ascii_strcasecmp(reason, "abend") == 0) + return NM_DHCP_STATE_FAIL; ++ else if (g_ascii_strcasecmp(reason, "preinit") == 0) ++ return NM_DHCP_STATE_NOOP; + + _LOGD("unmapped DHCP state '%s'", reason); + return NM_DHCP_STATE_UNKNOWN; +@@ -547,6 +550,18 @@ nm_dhcp_client_watch_child(NMDhcpClient *self, pid_t pid) + priv->watch_id = g_child_watch_add(pid, daemon_watch_cb, self); + } + ++void ++nm_dhcp_client_stop_watch_child(NMDhcpClient *self, pid_t pid) ++{ ++ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE(self); ++ ++ g_return_if_fail(priv->pid == pid); ++ priv->pid = -1; ++ ++ watch_cleanup(self); ++ timeout_cleanup(self); ++} ++ + gboolean + nm_dhcp_client_start_ip4(NMDhcpClient *self, + GBytes * client_id, +@@ -874,6 +889,9 @@ nm_dhcp_client_handle_event(gpointer unused, + state_to_string(new_state), + reason); + ++ if (new_state == NM_DHCP_STATE_NOOP) ++ return TRUE; ++ + if (NM_IN_SET(new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) { + GVariantIter iter; + const char * name; +diff --git a/src/dhcp/nm-dhcp-client.h b/src/dhcp/nm-dhcp-client.h +index 05faa9ea5..46446849a 100644 +--- a/src/dhcp/nm-dhcp-client.h ++++ b/src/dhcp/nm-dhcp-client.h +@@ -55,6 +55,7 @@ typedef enum { + NM_DHCP_STATE_EXPIRE, /* lease expired or NAKed */ + NM_DHCP_STATE_FAIL, /* failed for some reason */ + NM_DHCP_STATE_TERMINATED, /* client is no longer running */ ++ NM_DHCP_STATE_NOOP, /* state is a non operation for NetworkManager */ + __NM_DHCP_STATE_MAX, + NM_DHCP_STATE_MAX = __NM_DHCP_STATE_MAX - 1, + } NMDhcpState; +@@ -183,6 +184,8 @@ void nm_dhcp_client_start_timeout(NMDhcpClient *self); + + void nm_dhcp_client_watch_child(NMDhcpClient *self, pid_t pid); + ++void nm_dhcp_client_stop_watch_child(NMDhcpClient *self, pid_t pid); ++ + void nm_dhcp_client_set_state(NMDhcpClient *self, + NMDhcpState new_state, + NMIPConfig * ip_config, +diff --git a/src/dhcp/nm-dhcp-dhcpcd.c b/src/dhcp/nm-dhcp-dhcpcd.c +index b2b5d28bd..7cb003859 100644 +--- a/src/dhcp/nm-dhcp-dhcpcd.c ++++ b/src/dhcp/nm-dhcp-dhcpcd.c +@@ -1,6 +1,6 @@ + /* SPDX-License-Identifier: GPL-2.0+ */ + /* +- * Copyright (C) 2008 Roy Marples ++ * Copyright (C) 2008,2020 Roy Marples <roy@marples.name> + * Copyright (C) 2010 Dan Williams <dcbw@redhat.com> + */ + +@@ -40,7 +40,6 @@ static GType nm_dhcp_dhcpcd_get_type(void); + /*****************************************************************************/ + + typedef struct { +- char * pid_file; + NMDhcpListener *dhcp_listener; + } NMDhcpDhcpcdPrivate; + +@@ -71,39 +70,37 @@ ip4_start(NMDhcpClient *client, + const char * last_ip4_address, + GError ** error) + { +- NMDhcpDhcpcd * self = NM_DHCP_DHCPCD(client); +- NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE(self); +- gs_unref_ptrarray GPtrArray *argv = NULL; +- pid_t pid = -1; +- GError * local = NULL; +- gs_free char * cmd_str = NULL; +- gs_free char * binary_name = NULL; ++ NMDhcpDhcpcd * self = NM_DHCP_DHCPCD(client); ++ gs_unref_ptrarray GPtrArray *argv = NULL; ++ pid_t pid; ++ GError * local; ++ gs_free char * cmd_str = NULL; + const char * iface; + const char * dhcpcd_path; + const char * hostname; + +- g_return_val_if_fail(priv->pid_file == NULL, FALSE); ++ pid = nm_dhcp_client_get_pid(client); ++ g_return_val_if_fail(pid == -1, FALSE); + + iface = nm_dhcp_client_get_iface(client); + +- /* dhcpcd does not allow custom pidfiles; the pidfile is always +- * RUNSTATEDIR "dhcpcd-<ifname>.pid". +- */ +- priv->pid_file = g_strdup_printf(RUNSTATEDIR "/dhcpcd-%s.pid", iface); +- + dhcpcd_path = nm_dhcp_dhcpcd_get_path(); + if (!dhcpcd_path) { + nm_utils_error_set_literal(error, NM_UTILS_ERROR_UNKNOWN, "dhcpcd binary not found"); + return FALSE; + } + +- /* Kill any existing dhcpcd from the pidfile */ +- binary_name = g_path_get_basename(dhcpcd_path); +- nm_dhcp_client_stop_existing(priv->pid_file, binary_name); +- + argv = g_ptr_array_new(); + g_ptr_array_add(argv, (gpointer) dhcpcd_path); + ++ /* Don't configure anything, we will do that instead. ++ * This requires dhcpcd-9.3.3 or newer. ++ * Older versions only had an option not to install a default route, ++ * dhcpcd still added addresses and other routes so we no longer support that ++ * as it doesn't fit how NetworkManager wants to work. ++ */ ++ g_ptr_array_add(argv, (gpointer) "--noconfigure"); ++ + g_ptr_array_add(argv, (gpointer) "-B"); /* Don't background on lease (disable fork()) */ + + g_ptr_array_add(argv, (gpointer) "-K"); /* Disable built-in carrier detection */ +@@ -113,8 +110,6 @@ ip4_start(NMDhcpClient *client, + /* --noarp. Don't request or claim the address by ARP; this also disables IPv4LL. */ + g_ptr_array_add(argv, (gpointer) "-A"); + +- g_ptr_array_add(argv, (gpointer) "-G"); /* Let NM handle routing */ +- + g_ptr_array_add(argv, (gpointer) "-c"); /* Set script file */ + g_ptr_array_add(argv, (gpointer) nm_dhcp_helper_path); + +@@ -146,8 +141,8 @@ ip4_start(NMDhcpClient *client, + if (!g_spawn_async(NULL, + (char **) argv->pdata, + NULL, +- G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_STDOUT_TO_DEV_NULL +- | G_SPAWN_STDERR_TO_DEV_NULL, ++ G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL ++ | G_SPAWN_DO_NOT_REAP_CHILD, + nm_utils_setpgid, + NULL, + &pid, +@@ -169,23 +164,32 @@ ip4_start(NMDhcpClient *client, + static void + stop(NMDhcpClient *client, gboolean release) + { +- NMDhcpDhcpcd * self = NM_DHCP_DHCPCD(client); +- NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE(self); +- int errsv; +- +- NM_DHCP_CLIENT_CLASS(nm_dhcp_dhcpcd_parent_class)->stop(client, release); +- +- if (priv->pid_file) { +- if (remove(priv->pid_file) == -1) { +- errsv = errno; +- _LOGD("could not remove dhcp pid file \"%s\": %d (%s)", +- priv->pid_file, +- errsv, +- nm_strerror_native(errsv)); +- } ++ NMDhcpDhcpcd *self = NM_DHCP_DHCPCD(client); ++ pid_t pid; ++ int sig, errsv; ++ ++ pid = nm_dhcp_client_get_pid(client); ++ 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)); + } + +- /* FIXME: implement release... */ ++ /* 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. ++ */ ++ nm_dhcp_client_stop_watch_child(client, pid); + } + + /*****************************************************************************/ +@@ -214,8 +218,6 @@ dispose(GObject *object) + g_clear_object(&priv->dhcp_listener); + } + +- nm_clear_g_free(&priv->pid_file); +- + G_OBJECT_CLASS(nm_dhcp_dhcpcd_parent_class)->dispose(object); + } + +-- +2.30.0 + diff --git a/net-misc/networkmanager/networkmanager-1.28.0-r1.ebuild b/net-misc/networkmanager/networkmanager-1.28.0-r1.ebuild new file mode 100644 index 00000000..b093a198 --- /dev/null +++ b/net-misc/networkmanager/networkmanager-1.28.0-r1.ebuild @@ -0,0 +1,356 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +GNOME_ORG_MODULE="NetworkManager" +VALA_USE_DEPEND="vapigen" +PYTHON_COMPAT=( python3_{7..9} ) + +inherit bash-completion-r1 gnome2 linux-info multilib python-any-r1 systemd readme.gentoo-r1 vala virtualx udev multilib-minimal + +DESCRIPTION="A set of co-operative tools that make networking simple and straightforward" +HOMEPAGE="https://wiki.gnome.org/Projects/NetworkManager" + +LICENSE="GPL-2+" +SLOT="0" + +IUSE="audit bluetooth connection-sharing dhclient dhcpcd elogind gnutls +introspection iwd kernel_linux +nss +modemmanager ncurses ofono ovs policykit +ppp resolvconf selinux systemd teamd test vala +wext +wifi" +RESTRICT="!test? ( test )" + +REQUIRED_USE=" + bluetooth? ( modemmanager ) + iwd? ( wifi ) + vala? ( introspection ) + wext? ( wifi ) + || ( nss gnutls ) + ?? ( elogind systemd ) +" + +KEYWORDS="amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86" + +# gobject-introspection-0.10.3 is needed due to gnome bug 642300 +# wpa_supplicant-0.7.3-r3 is needed due to bug 359271 +COMMON_DEPEND=" + >=dev-libs/glib-2.40:2[${MULTILIB_USEDEP}] + policykit? ( >=sys-auth/polkit-0.106 ) + net-libs/libndp[${MULTILIB_USEDEP}] + >=net-misc/curl-7.24 + net-misc/iputils + sys-apps/util-linux[${MULTILIB_USEDEP}] + sys-libs/readline:0= + >=virtual/libudev-175:=[${MULTILIB_USEDEP}] + audit? ( sys-process/audit ) + bluetooth? ( >=net-wireless/bluez-5 ) + connection-sharing? ( + net-dns/dnsmasq[dbus,dhcp] + net-firewall/iptables ) + dhclient? ( >=net-misc/dhcp-4[client] ) + dhcpcd? ( >=net-misc/dhcpcd-9.3.3 ) + elogind? ( >=sys-auth/elogind-219 ) + introspection? ( >=dev-libs/gobject-introspection-0.10.3:= ) + modemmanager? ( >=net-misc/modemmanager-0.7.991:0= + net-misc/mobile-broadband-provider-info ) + ncurses? ( >=dev-libs/newt-0.52.15 ) + nss? ( >=dev-libs/nss-3.11:=[${MULTILIB_USEDEP}] ) + !nss? ( gnutls? ( + dev-libs/libgcrypt:0=[${MULTILIB_USEDEP}] + >=net-libs/gnutls-2.12:=[${MULTILIB_USEDEP}] ) ) + ofono? ( net-misc/ofono ) + ovs? ( dev-libs/jansson ) + ppp? ( >=net-dialup/ppp-2.4.5:=[ipv6] ) + resolvconf? ( net-dns/openresolv ) + selinux? ( sys-libs/libselinux ) + systemd? ( >=sys-apps/systemd-209:0= ) + teamd? ( + dev-libs/jansson + >=net-misc/libteam-1.9 + ) +" +RDEPEND="${COMMON_DEPEND} + acct-group/plugdev + || ( + net-misc/iputils[arping(+)] + net-analyzer/arping + ) + wifi? ( + !iwd? ( >=net-wireless/wpa_supplicant-0.7.3-r3[dbus] ) + iwd? ( net-wireless/iwd ) + ) +" +DEPEND="${COMMON_DEPEND} + >=sys-kernel/linux-headers-3.18 + " +BDEPEND=" + dev-util/gdbus-codegen + dev-util/glib-utils + dev-util/gtk-doc-am + >=dev-util/intltool-0.40 + >=sys-devel/gettext-0.17 + virtual/pkgconfig + introspection? ( + $(python_gen_any_dep 'dev-python/pygobject:3[${PYTHON_USEDEP}]') + dev-lang/perl + dev-libs/libxslt + ) + vala? ( $(vala_depend) ) + test? ( + $(python_gen_any_dep ' + dev-python/dbus-python[${PYTHON_USEDEP}] + dev-python/pygobject:3[${PYTHON_USEDEP}]') + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-1.28.0-dhcpcd9.patch" + # Required to build on musl + "${FILESDIR}/1.28.0/"0001-uncouple-glibc-functions-and-headers.patch + "${FILESDIR}/1.28.0/"0002-network-support.patch + "${FILESDIR}/1.28.0/"0003-Fix-includes-to-support-musl.patch + "${FILESDIR}/1.28.0/"0004-Fix-pthread-support-for-non-glibc-users.patch + "${FILESDIR}/1.28.0/"0005-define-compare-for-non-glibc-users.patch + "${FILESDIR}/1.28.0/"0006-musl-added-support-for-reallocarray-0-but-the-functi.patch +) + +python_check_deps() { + if use introspection; then + has_version "dev-python/pygobject:3[${PYTHON_USEDEP}]" || return + fi + if use test; then + has_version "dev-python/dbus-python[${PYTHON_USEDEP}]" && + has_version "dev-python/pygobject:3[${PYTHON_USEDEP}]" + fi +} + +sysfs_deprecated_check() { + ebegin "Checking for SYSFS_DEPRECATED support" + + if { linux_chkconfig_present SYSFS_DEPRECATED_V2; }; then + eerror "Please disable SYSFS_DEPRECATED_V2 support in your kernel config and recompile your kernel" + eerror "or NetworkManager will not work correctly." + eerror "See https://bugs.gentoo.org/333639 for more info." + die "CONFIG_SYSFS_DEPRECATED_V2 support detected!" + fi + eend $? +} + +pkg_pretend() { + if use kernel_linux; then + get_version + if linux_config_exists; then + sysfs_deprecated_check + else + ewarn "Was unable to determine your kernel .config" + ewarn "Please note that if CONFIG_SYSFS_DEPRECATED_V2 is set in your kernel .config, NetworkManager will not work correctly." + ewarn "See https://bugs.gentoo.org/333639 for more info." + fi + + fi +} + +pkg_setup() { + if use connection-sharing; then + if kernel_is lt 5 1; then + CONFIG_CHECK="~NF_NAT_IPV4 ~NF_NAT_MASQUERADE_IPV4" + else + CONFIG_CHECK="~NF_NAT ~NF_NAT_MASQUERADE" + fi + linux-info_pkg_setup + fi + if use introspection || use test; then + python-any-r1_pkg_setup + fi +} + +src_prepare() { + DOC_CONTENTS="To modify system network connections without needing to enter the + root password, add your user account to the 'plugdev' group." + + use vala && vala_src_prepare + gnome2_src_prepare + + sed -i \ + -e 's#/usr/bin/sed#/bin/sed#' \ + data/84-nm-drivers.rules \ + || die +} + +multilib_src_configure() { + local myconf=( + --disable-more-warnings + --disable-static + --localstatedir=/var + --with-runstatedir=/run + --disable-lto + --disable-qt + --without-netconfig + --with-dbus-sys-dir=/etc/dbus-1/system.d + $(multilib_native_with nmcli) + --with-udev-dir="$(get_udevdir)" + --with-config-plugins-default=keyfile + --with-iptables=/sbin/iptables + --with-ebpf=yes + $(multilib_native_enable concheck) + --with-nm-cloud-setup=$(multilib_is_native_abi && echo yes || echo no) + --with-crypto=$(usex nss nss gnutls) + # elogind lacks multilib for now, and consolekit doesn't require linking against, so we use it as a fake option + # This SHOULD be removable once elogind has that. We abuse the fact that 'consolekit' does nothing at buildtime. + # (There is no off switch, and we do not support upower.) + # bug #747358 + --with-session-tracking=$(multilib_native_usex systemd systemd $(multilib_native_usex elogind elogind consolekit)) + --with-suspend-resume=$(multilib_native_usex systemd systemd $(multilib_native_usex elogind elogind consolekit)) + $(multilib_native_use_with audit libaudit) + $(multilib_native_use_enable bluetooth bluez5-dun) + --without-dhcpcanon + $(use_with dhclient) + $(use_with dhcpcd) + --with-config-dhcp-default=internal + $(multilib_native_use_enable introspection) + $(multilib_native_use_enable ppp) + --without-libpsl + $(multilib_native_use_with modemmanager modem-manager-1) + $(multilib_native_use_with ncurses nmtui) + $(multilib_native_use_with ofono) + $(multilib_native_use_enable ovs) + $(multilib_native_use_enable policykit polkit) + $(multilib_native_use_with resolvconf) + $(multilib_native_use_with selinux) + $(multilib_native_use_with systemd systemd-journal) + $(multilib_native_use_enable teamd teamdctl) + $(multilib_native_use_enable test tests) + $(multilib_native_use_enable vala) + --without-valgrind + $(multilib_native_use_with wifi iwd) + $(multilib_native_use_with wext) + $(multilib_native_use_enable wifi) + ) + + # Same hack as net-dialup/pptpd to get proper plugin dir for ppp, bug #519986 + if use ppp; then + local PPPD_VER=`best_version net-dialup/ppp` + PPPD_VER=${PPPD_VER#*/*-} #reduce it to ${PV}-${PR} + PPPD_VER=${PPPD_VER%%[_-]*} # main version without beta/pre/patch/revision + myconf+=( --with-pppd-plugin-dir=/usr/$(get_libdir)/pppd/${PPPD_VER} ) + fi + + # unit files directory needs to be passed only when systemd is enabled, + # otherwise systemd support is not disabled completely, bug #524534 + use systemd && myconf+=( --with-systemdsystemunitdir="$(systemd_get_systemunitdir)" ) + + if multilib_is_native_abi; then + # work-around man out-of-source brokenness, must be done before configure + ln -s "${S}/docs" docs || die + ln -s "${S}/man" man || die + fi + + ECONF_SOURCE=${S} gnome2_src_configure "${myconf[@]}" +} + +multilib_src_compile() { + if multilib_is_native_abi; then + emake + else + local targets=( + libnm/libnm.la + ) + emake "${targets[@]}" + fi +} + +multilib_src_test() { + if use test && multilib_is_native_abi; then + python_setup + virtx emake check + fi +} + +multilib_src_install() { + if multilib_is_native_abi; then + # Install completions at proper place, bug #465100 + gnome2_src_install completiondir="$(get_bashcompdir)" + insinto /usr/lib/NetworkManager/conf.d #702476 + doins "${S}"/examples/nm-conf.d/31-mac-addr-change.conf + else + local targets=( + install-libLTLIBRARIES + install-libnmincludeHEADERS + install-nodist_libnmincludeHEADERS + install-pkgconfigDATA + ) + emake DESTDIR="${D}" "${targets[@]}" + fi +} + +multilib_src_install_all() { + einstalldocs + ! use systemd && readme.gentoo_create_doc + + newinitd "${FILESDIR}/init.d.NetworkManager-r2" NetworkManager + newconfd "${FILESDIR}/conf.d.NetworkManager" NetworkManager + + # Need to keep the /etc/NetworkManager/dispatched.d for dispatcher scripts + keepdir /etc/NetworkManager/dispatcher.d + + # Provide openrc net dependency only when nm is connected + exeinto /etc/NetworkManager/dispatcher.d + newexe "${FILESDIR}/10-openrc-status-r4" 10-openrc-status + sed -e "s:@EPREFIX@:${EPREFIX}:g" \ + -i "${ED}/etc/NetworkManager/dispatcher.d/10-openrc-status" || die + + keepdir /etc/NetworkManager/system-connections + chmod 0600 "${ED}"/etc/NetworkManager/system-connections/.keep* # bug #383765, upstream bug #754594 + + # Allow users in plugdev group to modify system connections + insinto /usr/share/polkit-1/rules.d/ + doins "${FILESDIR}/01-org.freedesktop.NetworkManager.settings.modify.system.rules" + + if use iwd; then + # This goes to $nmlibdir/conf.d/ and $nmlibdir is '${prefix}'/lib/$PACKAGE, thus always lib, not get_libdir + cat <<-EOF > "${ED}"/usr/lib/NetworkManager/conf.d/iwd.conf + [device] + wifi.backend=iwd + EOF + fi + + # Empty + rmdir "${ED}"/var{/lib{/NetworkManager,},} || die +} + +pkg_postinst() { + gnome2_pkg_postinst + systemd_reenable NetworkManager.service + ! use systemd && readme.gentoo_print_elog + + if [[ -e "${EROOT}/etc/NetworkManager/nm-system-settings.conf" ]]; then + ewarn "The ${PN} system configuration file has moved to a new location." + ewarn "You must migrate your settings from ${EROOT}/etc/NetworkManager/nm-system-settings.conf" + ewarn "to ${EROOT}/etc/NetworkManager/NetworkManager.conf" + ewarn + ewarn "After doing so, you can remove ${EROOT}/etc/NetworkManager/nm-system-settings.conf" + fi + + # NM fallbacks to plugin specified at compile time (upstream bug #738611) + # but still show a warning to remember people to have cleaner config file + if [[ -e "${EROOT}/etc/NetworkManager/NetworkManager.conf" ]]; then + if grep plugins "${EROOT}/etc/NetworkManager/NetworkManager.conf" | grep -q ifnet; then + ewarn + ewarn "You seem to use 'ifnet' plugin in ${EROOT}/etc/NetworkManager/NetworkManager.conf" + ewarn "Since it won't be used, you will need to stop setting ifnet plugin there." + ewarn + fi + fi + + # NM shows lots of errors making nmcli almost unusable, bug #528748 upstream bug #690457 + if grep -r "psk-flags=1" "${EROOT}"/etc/NetworkManager/; then + ewarn "You have psk-flags=1 setting in above files, you will need to" + ewarn "either reconfigure affected networks or, at least, set the flag" + ewarn "value to '0'." + fi + + if use dhclient || use dhcpcd; then + ewarn "You have enabled USE=dhclient and/or USE=dhcpcd, but NetworkManager since" + ewarn "version 1.20 defaults to the internal DHCP client. If the internal client" + ewarn "works for you, and you're happy with, the alternative USE flags can be" + ewarn "disabled. If you want to use dhclient or dhcpcd, then you need to tweak" + ewarn "the main.dhcp configuration option to use one of them instead of internal." + fi +} |