commit:     4aeb9963854cd2611d5b9c60181e715a76a71e48
Author:     Alfred Wingate <parona <AT> protonmail <DOT> com>
AuthorDate: Sun Mar 16 13:39:14 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Mar 16 15:05:27 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4aeb9963

net-misc/zerotier: fix against miniupnpc-2.2.8

Use patch from Arch and remove vendored dependencies to stop them from
mixing headers.

Bug: https://github.com/zerotier/ZeroTierOne/issues/2332
Signed-off-by: Alfred Wingate <parona <AT> protonmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/zerotier-1.14.2-miniupnpc-2.2.8.patch    |  65 +++
 net-misc/zerotier/zerotier-1.14.2-r2.ebuild        | 493 +++++++++++++++++++++
 2 files changed, 558 insertions(+)

diff --git a/net-misc/zerotier/files/zerotier-1.14.2-miniupnpc-2.2.8.patch 
b/net-misc/zerotier/files/zerotier-1.14.2-miniupnpc-2.2.8.patch
new file mode 100644
index 000000000000..c1cfa412ba18
--- /dev/null
+++ b/net-misc/zerotier/files/zerotier-1.14.2-miniupnpc-2.2.8.patch
@@ -0,0 +1,65 @@
+https://github.com/zerotier/ZeroTierOne/issues/2332
+https://gitlab.archlinux.org/archlinux/packaging/packages/zerotier-one/-/commit/1d040aee9a4cfecdcc747cb42f92a1420a42a3f4
+
+From ab00e10bfac636c97fc608608745f18889f28410 Mon Sep 17 00:00:00 2001
+From: Christian Hesse <[email protected]>
+Date: Tue, 5 Nov 2024 16:06:06 +0100
+Subject: [PATCH 1/2] shrink variable size
+
+This is what upstream miniupnpc uses...
+--- a/osdep/PortMapper.cpp
++++ b/osdep/PortMapper.cpp
+@@ -202,7 +202,7 @@ public:
+                       // UPnP mode
+                       // 
---------------------------------------------------------------------
+                       if (mode == 1) {
+-                              char lanaddr[4096];
++                              char lanaddr[64];
+                               char externalip[4096]; // no range checking? so 
make these buffers larger than any UDP packet a uPnP server could send us as a 
precaution :P
+                               char inport[16];
+                               char outport[16];
+-- 
+2.47.0
+
+
+From fa0b81d9f9e84e282eea7955a037580be44002f9 Mon Sep 17 00:00:00 2001
+From: Christian Hesse <[email protected]>
+Date: Tue, 5 Nov 2024 16:09:35 +0100
+Subject: [PATCH 2/2] add missing function parameter
+
+This changed with miniupnpc 2.2.8:
+
+https://github.com/miniupnp/miniupnp/commit/c0a50ce33e3b99ce8a96fd43049bb5b53ffac62f
+
+Warning: This is not a proper patch suitable for upstream! It assumes the
+parameter is always there, which is not true for older versions.
+So handle with care!
+--- a/osdep/PortMapper.cpp
++++ b/osdep/PortMapper.cpp
+@@ -203,6 +203,7 @@ public:
+                       // 
---------------------------------------------------------------------
+                       if (mode == 1) {
+                               char lanaddr[64];
++                              char wanaddr[64];
+                               char externalip[4096]; // no range checking? so 
make these buffers larger than any UDP packet a uPnP server could send us as a 
precaution :P
+                               char inport[16];
+                               char outport[16];
+@@ -224,13 +225,14 @@ public:
+ #endif
+ 
+                                       memset(lanaddr,0,sizeof(lanaddr));
++                                      memset(wanaddr,0,sizeof(wanaddr));
+                                       memset(externalip,0,sizeof(externalip));
+                                       memset(&urls,0,sizeof(urls));
+                                       memset(&data,0,sizeof(data));
+                                       
OSUtils::ztsnprintf(inport,sizeof(inport),"%d",localPort);
+ 
+                                       int foundValidIGD = 0;
+-                                      if ((foundValidIGD = 
UPNP_GetValidIGD(devlist,&urls,&data,lanaddr,sizeof(lanaddr)))&&(lanaddr[0])) {
++                                      if ((foundValidIGD = 
UPNP_GetValidIGD(devlist,&urls,&data,lanaddr,sizeof(lanaddr),wanaddr,sizeof(wanaddr)))&&(lanaddr[0]))
 {
+ #ifdef ZT_PORTMAPPER_TRACE
+                         PM_TRACE("PortMapper: UPnP: my LAN IP address: %s" 
ZT_EOL_S,lanaddr);
+ #endif
+-- 
+2.47.0
+

diff --git a/net-misc/zerotier/zerotier-1.14.2-r2.ebuild 
b/net-misc/zerotier/zerotier-1.14.2-r2.ebuild
new file mode 100644
index 000000000000..e24d9a2fb9d9
--- /dev/null
+++ b/net-misc/zerotier/zerotier-1.14.2-r2.ebuild
@@ -0,0 +1,493 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=1
+
+CRATES="
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]+wasi-snapshot-preview1
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+"
+
+declare -A GIT_CRATES=(
+       
[jwt]='https://github.com/glimberg/rust-jwt;61a9291fdeec747c6edf14f4fa0caf235136c168;rust-jwt-%commit%'
+       
[rustfsm]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/fsm'
+       
[rustfsm_procmacro]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/fsm/rustfsm_procmacro'
+       
[rustfsm_trait]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/fsm/rustfsm_trait'
+       
[temporal-client]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/client'
+       
[temporal-sdk-core-api]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/core-api'
+       
[temporal-sdk-core-protos]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/sdk-core-protos'
+       
[temporal-sdk-core]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/core'
+       
[temporal-sdk]='https://github.com/temporalio/sdk-core;730aadcc02767ae630e88f8f8c788a85d6bc81e6;sdk-core-%commit%/sdk'
+)
+
+RUST_OPTIONAL=1
+
+inherit cargo systemd toolchain-funcs
+
+DESCRIPTION="A software-based managed Ethernet switch for planet Earth"
+HOMEPAGE="https://www.zerotier.com/";
+SRC_URI="
+       https://github.com/zerotier/ZeroTierOne/archive/refs/tags/${PV}.tar.gz 
-> ${P}.tar.gz
+       sso? (
+               ${CARGO_CRATE_URIS}
+       )
+"
+S="${WORKDIR}"/ZeroTierOne-${PV}
+
+LICENSE="BUSL-1.1"
+# Dependent crate licenses
+LICENSE+=" sso? ( 0BSD Apache-2.0 BSD ISC MIT MPL-2.0 Unicode-DFS-2016 ZLIB )"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
+IUSE="cpu_flags_arm_neon debug sso"
+
+# >=miniupnpnc-2.2.8: 
https://gitlab.archlinux.org/archlinux/packaging/packages/zerotier-one/-/commit/1d040aee9a4cfecdcc747cb42f92a1420a42a3f4
+RDEPEND="
+       dev-libs/openssl:=
+       net-libs/libnatpmp
+       >=net-libs/miniupnpc-2.2.8:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+       sso? (
+               ${RUST_DEPEND}
+       )
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.10.1-add-armv7a-support.patch
+       "${FILESDIR}"/${PN}-1.14.2-miniupnpc-2.2.8.patch
+)
+
+DOCS=( README.md AUTHORS.md )
+
+pkg_setup() {
+       use sso && rust_pkg_setup
+}
+
+src_unpack() {
+       unpack ${P}.tar.gz
+       use sso && cargo_src_unpack
+}
+
+src_prepare() {
+       default
+
+       # Remove vendored code to avoid mixing vendored and system headers
+       # Otherwise it will hide api breaks at build time such as:
+       # https://github.com/zerotier/ZeroTierOne/issues/2332
+       rm -rf ext/{miniupnpc,libnatpmp} || die
+
+       #1. Dont call cargo, we'll run it with cargo eclass functions
+       #2. Remove man page compression and install, we'll handle it with 
ebuild functions
+       #3. Gentoo generates target specific build dirs now bug #937782
+       sed -i \
+               -e '/ifeq ($(ZT_SSO_SUPPORTED)/,/endif/ { /cargo build/d }' \
+               -e '/install:/,/^$/ { /man[0-9]/d }' \
+               -e "s|rustybits/target/$(usex debug debug 
release)|rustybits/$(cargo_target_dir)|" \
+               make-linux.mk || die
+}
+
+src_configure() {
+       tc-export CXX CC
+
+       use cpu_flags_arm_neon || export ZT_DISABLE_NEON=1
+
+       use sso && cargo_src_configure
+}
+
+src_compile() {
+       #TODO: New rusty bit smeeclient isnt built
+       myemakeargs=(
+               CXX="${CXX}"
+               STRIP=:
+
+               # Debug doesnt do more than add preprocessor arguments normally,
+               # but when rust is used it sets the correct rust directory to 
link against.
+               # It would be added by cargo eclass eitherway, so instead of 
adding REQUIRED_USE
+               # and patching the makefile its just easier to have it.
+               ZT_DEBUG="$(usex debug 1 0)"
+               ZT_SSO_SUPPORTED="$(usex sso 1 0)"
+       )
+
+       pushd rustybits/zeroidc > /dev/null || die
+       use sso && cargo_src_compile
+       popd > /dev/null || die
+
+       emake "${myemakeargs[@]}" one
+}
+
+src_test() {
+       emake "${myemakeargs[@]}" selftest
+       ./zerotier-selftest || die
+}
+
+src_install() {
+       default
+
+       newinitd "${FILESDIR}/${PN}".init-r1 "${PN}"
+       systemd_dounit "${FILESDIR}/${PN}".service
+
+       doman doc/zerotier-{cli.1,idtool.1,one.8}
+}

Reply via email to