diff options
author | Sam James <sam@gentoo.org> | 2023-04-23 05:24:53 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-04-23 05:45:50 +0100 |
commit | f38074ddee922d85be1edf2b59262b5d49306cd9 (patch) | |
tree | 923cef269c39de388303798192d2ff4b47ae2fbf /net-vpn | |
parent | net-misc/networkmanager: fix compat. w/ ppp-2.5.0 (diff) | |
download | gentoo-f38074ddee922d85be1edf2b59262b5d49306cd9.tar.gz gentoo-f38074ddee922d85be1edf2b59262b5d49306cd9.tar.bz2 gentoo-f38074ddee922d85be1edf2b59262b5d49306cd9.zip |
net-vpn/networkmanager-fortisslvpn: fix compat. w/ ppp-2.5.0
Closes: https://bugs.gentoo.org/904842
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'net-vpn')
-rw-r--r-- | net-vpn/networkmanager-fortisslvpn/files/networkmanager-fortisslvpn-1.4.0-ppp-2.5.0.patch | 502 | ||||
-rw-r--r-- | net-vpn/networkmanager-fortisslvpn/networkmanager-fortisslvpn-1.4.0-r1.ebuild | 59 |
2 files changed, 561 insertions, 0 deletions
diff --git a/net-vpn/networkmanager-fortisslvpn/files/networkmanager-fortisslvpn-1.4.0-ppp-2.5.0.patch b/net-vpn/networkmanager-fortisslvpn/files/networkmanager-fortisslvpn-1.4.0-ppp-2.5.0.patch new file mode 100644 index 000000000000..ddb800249cce --- /dev/null +++ b/net-vpn/networkmanager-fortisslvpn/files/networkmanager-fortisslvpn-1.4.0-ppp-2.5.0.patch @@ -0,0 +1,502 @@ +https://bugs.gentoo.org/904842 +https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/-/commit/084ef529c5fb816927ca54866f66b340265aa9f6 +https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/-/commit/8773f772d39f8eee6edc1fd2e5437c754ed41e1e +https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/-/merge_requests/27 + +From 084ef529c5fb816927ca54866f66b340265aa9f6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com> +Date: Sat, 4 Mar 2023 21:20:43 +0000 +Subject: [PATCH] Adding support for compiling against pppd-2.5.0 (or master + branch) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Eivind Næss <eivnaes@yahoo.com> +--- a/Makefile.am ++++ b/Makefile.am +@@ -81,7 +81,7 @@ libexec_PROGRAMS += src/nm-fortisslvpn-service + src_nm_fortisslvpn_service_SOURCES = \ + shared/nm-utils/nm-shared-utils.c \ + shared/nm-utils/nm-shared-utils.h \ +- src/nm-ppp-status.h \ ++ src/nm-fortisslvpn-pppd-status.h \ + src/nm-fortisslvpn-service.h \ + src/nm-fortisslvpn-service.c \ + shared/nm-fortissl-properties.c \ +@@ -106,7 +106,8 @@ src_nm_fortisslvpn_pppd_plugin_la_SOURCES = \ + shared/nm-utils/nm-shared-utils.c \ + shared/nm-utils/nm-shared-utils.h \ + src/nm-fortisslvpn-pppd-plugin.c \ +- src/nm-ppp-status.h ++ src/nm-fortisslvpn-pppd-compat.h \ ++ src/nm-fortisslvpn-pppd-status.h + nodist_src_nm_fortisslvpn_pppd_plugin_la_SOURCES = \ + src/nm-fortisslvpn-pppd-service-dbus.h + src_nm_fortisslvpn_pppd_plugin_la_CPPFLAGS = $(src_cppflags) +--- a/configure.ac ++++ b/configure.ac +@@ -19,7 +19,10 @@ AC_PROG_CC + AM_PROG_CC_C_O + AC_PROG_INSTALL + AC_PROG_LIBTOOL ++AC_PROG_CPP ++AC_PROG_EGREP + AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources) ++PKG_PROG_PKG_CONFIG() + + AC_GNU_SOURCE + +@@ -37,20 +40,50 @@ dnl + dnl Required headers + dnl + AC_HEADER_STDC +-AC_CHECK_HEADERS(fcntl.h paths.h sys/ioctl.h sys/time.h syslog.h unistd.h) ++AC_CHECK_HEADERS(fcntl.h paths.h stdarg.h stdbool.h sys/ioctl.h sys/time.h syslog.h unistd.h) + + AC_CHECK_HEADERS(pppd/pppd.h,, + AC_MSG_ERROR(couldn't find pppd.h. pppd development headers are required.)) + ++dnl ++dnl Check the presense of other pppd/*.h files ++AC_CHECK_HEADERS([ ++ pppd/chap.h ++ pppd/chap-new.h ++ pppd/chap_ms.h ++ ]) ++ ++dnl ++dnl Versions >= 2.5.0 will have pkg-config support ++PKG_CHECK_EXISTS([pppd], ++ [AS_VAR_SET([pppd_pkgconfig_support],[yes])]) ++ ++dnl ++dnl Get the version of pppd using pkg-config, assume 2.4.9 if not present ++PPPD_VERSION=2.4.5 ++if test x"$pppd_pkgconfig_support" = xyes; then ++ PPPD_VERSION=`$PKG_CONFIG --modversion pppd` ++fi ++ ++ + AC_ARG_WITH([pppd-plugin-dir], AS_HELP_STRING([--with-pppd-plugin-dir=DIR], [path to the pppd plugins directory])) + + if test -n "$with_pppd_plugin_dir" ; then + PPPD_PLUGIN_DIR="$with_pppd_plugin_dir" + else +- PPPD_PLUGIN_DIR="${libdir}/pppd/2.4.5" ++ PPPD_PLUGIN_DIR="${libdir}/pppd/$PPPD_VERSION" + fi + AC_SUBST(PPPD_PLUGIN_DIR) + ++dnl The version of pppd dictates what code can be included, i.e. enable use of ++dnl #if WITH_PPP_VERSION >= PPP_VERSION(2,5,0) in the code ++AC_DEFINE_UNQUOTED([PPP_VERSION(x,y,z)], ++ [((x & 0xFF) << 16 | (y & 0xFF) << 8 | (z & 0xFF) << 0)], ++ [Macro to help determine the particular version of pppd]) ++PPP_VERSION=$(echo $PPPD_VERSION | sed -e "s/\./\,/g") ++AC_DEFINE_UNQUOTED(WITH_PPP_VERSION, PPP_VERSION($PPP_VERSION), ++ [The real version of pppd represented as an int]) ++ + dnl + dnl Checks for typedefs, structures, and compiler characteristics. + dnl +--- /dev/null ++++ b/src/nm-fortisslvpn-pppd-compat.h +@@ -0,0 +1,93 @@ ++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ ++/* nm-sstp-service - sstp (and other pppd) integration with NetworkManager ++ * ++ * Copyright (C) Eivind Næss, eivnaes@yahoo.com ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ */ ++ ++#ifndef __NM_FORTISSLVPN_PPPD_COMPAT_H__ ++#define __NM_FORTISSLVPN_PPPD_COMPAT_H__ ++ ++#define INET6 1 ++ ++// PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define. ++// this silly macro magic is to work around that. ++ ++#undef VERSION ++#include <pppd/pppd.h> ++ ++#ifndef PPPD_VERSION ++#define PPPD_VERSION VERSION ++#endif ++ ++#include <pppd/fsm.h> ++#include <pppd/ccp.h> ++#include <pppd/eui64.h> ++#include <pppd/ipcp.h> ++#include <pppd/ipv6cp.h> ++#include <pppd/eap.h> ++#include <pppd/upap.h> ++ ++#ifdef HAVE_PPPD_CHAP_H ++ #include <pppd/chap.h> ++#endif ++ ++#ifdef HAVE_PPPD_CHAP_NEW_H ++ #include <pppd/chap-new.h> ++#endif ++ ++#ifdef HAVE_PPPD_CHAP_MS_H ++ #include <pppd/chap_ms.h> ++#endif ++ ++#ifndef PPP_PROTO_CHAP ++#define PPP_PROTO_CHAP 0xc223 ++#endif ++ ++#ifndef PPP_PROTO_EAP ++#define PPP_PROTO_EAP 0xc227 ++#endif ++ ++#if WITH_PPP_VERSION < PPP_VERSION(2,5,0) ++ ++static inline bool debug_on(void) ++{ ++ return debug; ++} ++ ++static inline const char *ppp_ipparam(void) ++{ ++ return ipparam; ++} ++ ++static inline int ppp_ifunit(void) ++{ ++ return ifunit; ++} ++ ++static inline const char *ppp_ifname(void) ++{ ++ return ifname; ++} ++ ++static inline int ppp_get_mtu(int idx) ++{ ++ return netif_get_mtu(idx); ++} ++ ++#endif // #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) ++#endif // #ifdef __NM_FORTISSLVPN_PPPD_COMPAT_H__ +--- a/src/nm-fortisslvpn-pppd-plugin.c ++++ b/src/nm-fortisslvpn-pppd-plugin.c +@@ -23,12 +23,6 @@ + #define ___CONFIG_H__ + #include <config.h> + +-#include <pppd/pppd.h> +-#include <pppd/fsm.h> +-#include <pppd/ipcp.h> +- +-#include "nm-default.h" +- + #include <sys/types.h> + #include <string.h> + #include <sys/socket.h> +@@ -42,10 +36,12 @@ + #include <grp.h> + #include <glib/gstdio.h> + ++#include "nm-fortisslvpn-pppd-status.h" ++#include "nm-fortisslvpn-pppd-compat.h" + #include "nm-fortisslvpn-pppd-service-dbus.h" +-#include "nm-fortisslvpn-service.h" +-#include "nm-ppp-status.h" + ++#include "nm-default.h" ++#include "nm-fortisslvpn-service.h" + #include "nm-utils/nm-shared-utils.h" + #include "nm-utils/nm-vpn-plugin-macros.h" + +@@ -80,7 +76,7 @@ static struct { + + int plugin_init (void); + +-char pppd_version[] = VERSION; ++char pppd_version[] = PPPD_VERSION; + + static void + chroot_sandbox (void) +@@ -296,7 +292,7 @@ get_ip4_routes (in_addr_t ouraddr) + static void + nm_ip_up (void *data, int arg) + { +- guint32 pppd_made_up_address = htonl (0x0a404040 + ifunit); ++ guint32 pppd_made_up_address = htonl (0x0a404040 + ppp_ifunit()); + ipcp_options opts = ipcp_gotoptions[0]; + ipcp_options peer_opts = ipcp_hisoptions[0]; + GVariantBuilder builder; +@@ -317,7 +313,7 @@ nm_ip_up (void *data, int arg) + + g_variant_builder_add (&builder, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, +- g_variant_new_string (ifname)); ++ g_variant_new_string (ppp_ifname())); + + str = g_getenv ("VPN_GATEWAY"); + if (str) { +@@ -442,8 +438,14 @@ plugin_init (void) + return -1; + } + ++#if WITH_PPP_VERSION < PPP_VERSION(2,5,0) + add_notifier (&phasechange, nm_phasechange, NULL); + add_notifier (&ip_up_notifier, nm_ip_up, NULL); + add_notifier (&exitnotify, nm_exit_notify, NULL); ++#else ++ ppp_add_notify (NF_PHASE_CHANGE, nm_phasechange, NULL); ++ ppp_add_notify (NF_IP_UP, nm_ip_up, NULL); ++ ppp_add_notify (NF_EXIT, nm_exit_notify, NULL); ++#endif + return 0; + } +similarity index 100% +rename from src/nm-ppp-status.h +rename to src/nm-fortisslvpn-pppd-status.h +--- a/src/nm-fortisslvpn-service.c ++++ b/src/nm-fortisslvpn-service.c +@@ -40,7 +40,7 @@ + #include <glib/gstdio.h> + + #include "nm-fortissl-properties.h" +-#include "nm-ppp-status.h" ++#include "nm-fortisslvpn-pppd-status.h" + #include "nm-fortisslvpn-pppd-service-dbus.h" + #include "nm-utils/nm-shared-utils.h" + #include "nm-utils/nm-vpn-plugin-macros.h" +-- +GitLab + +From 8773f772d39f8eee6edc1fd2e5437c754ed41e1e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com> +Date: Sat, 4 Mar 2023 21:29:54 +0000 +Subject: [PATCH] Fixing configure.ac from previous change +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Eivind Næss <eivnaes@yahoo.com> +--- a/configure.ac ++++ b/configure.ac +@@ -47,11 +47,7 @@ AC_CHECK_HEADERS(pppd/pppd.h,, + + dnl + dnl Check the presense of other pppd/*.h files +-AC_CHECK_HEADERS([ +- pppd/chap.h +- pppd/chap-new.h +- pppd/chap_ms.h +- ]) ++AC_CHECK_HEADERS(pppd/chap.h pppd/chap-new.h pppd/chap_ms.h) + + dnl + dnl Versions >= 2.5.0 will have pkg-config support +-- +GitLab + +From d59819b5d26db44f51bfbb76be3b373c419e408d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com> +Date: Wed, 8 Mar 2023 04:30:13 +0000 +Subject: [PATCH] Improve compatibility with pppd-2.5.0 release + +This allows compiling against the older pppd 2.4 series while still +using the new API in the plugin code. It does so by adding a static +inline function ppp_add_notify(). + +Additional formatting changes to the nm-fortisslvpn-pppd-compat.h based +on review from Lubomir. +--- a/src/nm-fortisslvpn-pppd-compat.h ++++ b/src/nm-fortisslvpn-pppd-compat.h +@@ -1,32 +1,15 @@ +-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +-/* nm-sstp-service - sstp (and other pppd) integration with NetworkManager +- * +- * Copyright (C) Eivind Næss, eivnaes@yahoo.com +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License along +- * with this program; if not, write to the Free Software Foundation, Inc., +- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- */ ++/* Copyright (C) 2023 Eivind Naess, eivnaes@yahoo.com */ ++/* SPDX-License-Identifier: GPL-2.0-or-later */ + + #ifndef __NM_FORTISSLVPN_PPPD_COMPAT_H__ + #define __NM_FORTISSLVPN_PPPD_COMPAT_H__ + +-#define INET6 1 +- +-// PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define. +-// this silly macro magic is to work around that. ++/* Define INET6 to compile with IPv6 support against older pppd headers, ++ * pppd >= 2.5.0 use WITH_PPP_IPV6 and is defined in pppdconf.h */ ++#define INET6 1 + ++/* PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define. ++ * this silly macro magic is to work around that. */ + #undef VERSION + #include <pppd/pppd.h> + +@@ -43,51 +26,98 @@ + #include <pppd/upap.h> + + #ifdef HAVE_PPPD_CHAP_H +- #include <pppd/chap.h> ++#include <pppd/chap.h> + #endif + + #ifdef HAVE_PPPD_CHAP_NEW_H +- #include <pppd/chap-new.h> ++#include <pppd/chap-new.h> + #endif + + #ifdef HAVE_PPPD_CHAP_MS_H +- #include <pppd/chap_ms.h> ++#include <pppd/chap_ms.h> + #endif + + #ifndef PPP_PROTO_CHAP +-#define PPP_PROTO_CHAP 0xc223 ++#define PPP_PROTO_CHAP 0xc223 + #endif + + #ifndef PPP_PROTO_EAP +-#define PPP_PROTO_EAP 0xc227 ++#define PPP_PROTO_EAP 0xc227 + #endif + ++ + #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) + +-static inline bool debug_on(void) ++static inline bool ++debug_on (void) ++{ ++ return debug; ++} ++ ++static inline const char ++*ppp_ipparam (void) + { +- return debug; ++ return ipparam; + } + +-static inline const char *ppp_ipparam(void) ++static inline int ++ppp_ifunit (void) + { +- return ipparam; ++ return ifunit; + } + +-static inline int ppp_ifunit(void) ++static inline const char * ++ppp_ifname (void) + { +- return ifunit; ++ return ifname; + } + +-static inline const char *ppp_ifname(void) ++static inline int ++ppp_get_mtu (int idx) + { +- return ifname; ++ return netif_get_mtu(idx); + } + +-static inline int ppp_get_mtu(int idx) ++typedef enum ppp_notify ++{ ++ NF_PID_CHANGE, ++ NF_PHASE_CHANGE, ++ NF_EXIT, ++ NF_SIGNALED, ++ NF_IP_UP, ++ NF_IP_DOWN, ++ NF_IPV6_UP, ++ NF_IPV6_DOWN, ++ NF_AUTH_UP, ++ NF_LINK_DOWN, ++ NF_FORK, ++ NF_MAX_NOTIFY ++} ppp_notify_t; ++ ++typedef void (ppp_notify_fn) (void *ctx, int arg); ++ ++static inline void ++ppp_add_notify (ppp_notify_t type, ppp_notify_fn *func, void *ctx) + { +- return netif_get_mtu(idx); ++ struct notifier **list[NF_MAX_NOTIFY] = { ++ [NF_PID_CHANGE ] = &pidchange, ++ [NF_PHASE_CHANGE] = &phasechange, ++ [NF_EXIT ] = &exitnotify, ++ [NF_SIGNALED ] = &sigreceived, ++ [NF_IP_UP ] = &ip_up_notifier, ++ [NF_IP_DOWN ] = &ip_down_notifier, ++ [NF_IPV6_UP ] = &ipv6_up_notifier, ++ [NF_IPV6_DOWN ] = &ipv6_down_notifier, ++ [NF_AUTH_UP ] = &auth_up_notifier, ++ [NF_LINK_DOWN ] = &link_down_notifier, ++ [NF_FORK ] = &fork_notifier, ++ }; ++ ++ struct notifier **notify = list[type]; ++ if (notify) { ++ add_notifier(notify, func, ctx); ++ } + } + +-#endif // #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) +-#endif // #ifdef __NM_FORTISSLVPN_PPPD_COMPAT_H__ ++#endif /* #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) */ ++#endif /* #ifdef __NM_FORTISSLVPN_PPPD_COMPAT_H__ */ +--- a/src/nm-fortisslvpn-pppd-plugin.c ++++ b/src/nm-fortisslvpn-pppd-plugin.c +@@ -438,14 +438,8 @@ plugin_init (void) + return -1; + } + +-#if WITH_PPP_VERSION < PPP_VERSION(2,5,0) +- add_notifier (&phasechange, nm_phasechange, NULL); +- add_notifier (&ip_up_notifier, nm_ip_up, NULL); +- add_notifier (&exitnotify, nm_exit_notify, NULL); +-#else + ppp_add_notify (NF_PHASE_CHANGE, nm_phasechange, NULL); + ppp_add_notify (NF_IP_UP, nm_ip_up, NULL); + ppp_add_notify (NF_EXIT, nm_exit_notify, NULL); +-#endif + return 0; + } +-- +GitLab diff --git a/net-vpn/networkmanager-fortisslvpn/networkmanager-fortisslvpn-1.4.0-r1.ebuild b/net-vpn/networkmanager-fortisslvpn/networkmanager-fortisslvpn-1.4.0-r1.ebuild new file mode 100644 index 000000000000..fc45fedfdf22 --- /dev/null +++ b/net-vpn/networkmanager-fortisslvpn/networkmanager-fortisslvpn-1.4.0-r1.ebuild @@ -0,0 +1,59 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +GNOME_ORG_MODULE="NetworkManager-${PN##*-}" +GNOME2_LA_PUNT="yes" +GNOME2_EAUTORECONF="yes" + +inherit gnome2 + +DESCRIPTION="NetworkManager Fortinet SSLVPN compatible plugin" +HOMEPAGE="https://wiki.gnome.org/Projects/NetworkManager" + +LICENSE="GPL-2+" +SLOT="0" +KEYWORDS="~amd64" +IUSE="gtk" + +DEPEND=" + >=dev-libs/glib-2.32:2 + >=net-misc/networkmanager-1.2:= + gtk? ( + >=app-crypt/libsecret-0.18 + gui-libs/gtk:4 + media-libs/harfbuzz + >=net-libs/libnma-1.2.0 + x11-libs/cairo + x11-libs/gdk-pixbuf + x11-libs/pango + ) +" +RDEPEND="${RDEPEND} + net-dialup/ppp + >=net-vpn/openfortivpn-1.2.0" +BDEPEND="dev-util/gdbus-codegen + >=sys-devel/gettext-0.19 + virtual/pkgconfig" + +PATCHES=( + "${FILESDIR}"/${PN}-1.4.0-ppp-2.5.0.patch +) + +src_prepare() { + default + + # Fix deprecated location, #709450 + sed -i 's|/appdata|/metainfo|g' Makefile.{in,am} || die +} + +src_configure() { + CONFIG_SHELL="${BROOT}"/bin/bash gnome2_src_configure \ + --disable-static \ + --with-dist-version=Gentoo \ + --localstatedir=/var \ + $(use_with gtk gnome) \ + $(use_with gtk gtk4) \ + --without-libnm-glib +} |