https://bugs.gentoo.org/904842 https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/-/commit/084ef529c5fb816927ca54866f66b340265aa9f6 From 084ef529c5fb816927ca54866f66b340265aa9f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eivind=20N=C3=A6ss?= 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 --- Makefile.am | 5 +- configure.ac | 37 +++++++- src/nm-fortisslvpn-pppd-compat.h | 93 +++++++++++++++++++ src/nm-fortisslvpn-pppd-plugin.c | 24 ++--- ...-status.h => nm-fortisslvpn-pppd-status.h} | 0 src/nm-fortisslvpn-service.c | 2 +- 6 files changed, 145 insertions(+), 16 deletions(-) create mode 100644 src/nm-fortisslvpn-pppd-compat.h rename src/{nm-ppp-status.h => nm-fortisslvpn-pppd-status.h} (100%) diff --git a/Makefile.am b/Makefile.am index b2e5533..e1e5ec9 100644 --- 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) diff --git a/configure.ac b/configure.ac index a998707..877493e 100644 --- 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 diff --git a/src/nm-fortisslvpn-pppd-compat.h b/src/nm-fortisslvpn-pppd-compat.h new file mode 100644 index 0000000..9a02908 --- /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 + +#ifndef PPPD_VERSION +#define PPPD_VERSION VERSION +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_PPPD_CHAP_H + #include +#endif + +#ifdef HAVE_PPPD_CHAP_NEW_H + #include +#endif + +#ifdef HAVE_PPPD_CHAP_MS_H + #include +#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__ diff --git a/src/nm-fortisslvpn-pppd-plugin.c b/src/nm-fortisslvpn-pppd-plugin.c index f2ad262..c2efb9a 100644 --- a/src/nm-fortisslvpn-pppd-plugin.c +++ b/src/nm-fortisslvpn-pppd-plugin.c @@ -23,12 +23,6 @@ #define ___CONFIG_H__ #include -#include -#include -#include - -#include "nm-default.h" - #include #include #include @@ -42,10 +36,12 @@ #include #include +#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; } diff --git a/src/nm-ppp-status.h b/src/nm-fortisslvpn-pppd-status.h similarity index 100% rename from src/nm-ppp-status.h rename to src/nm-fortisslvpn-pppd-status.h diff --git a/src/nm-fortisslvpn-service.c b/src/nm-fortisslvpn-service.c index 6c340d0..a8483c2 100644 --- a/src/nm-fortisslvpn-service.c +++ b/src/nm-fortisslvpn-service.c @@ -40,7 +40,7 @@ #include #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