From 0d2df9acf2198349a89c04ab0a69f620426147f9 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Tue, 18 Apr 2023 23:57:06 -0700 Subject: [PATCH] Backport patches to fix build with ppp 2.5.0 --- ...or-compiling-against-pppd-2.5.0-curr.patch | 169 ++++++++++++++++ ...or-compiling-against-pppd-2.5.0-curr.patch | 189 ++++++++++++++++++ NetworkManager-l2tp.spec | 7 +- 3 files changed, 364 insertions(+), 1 deletion(-) create mode 100644 0001-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch create mode 100644 0002-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch diff --git a/0001-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch b/0001-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch new file mode 100644 index 0000000..f80ec8b --- /dev/null +++ b/0001-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch @@ -0,0 +1,169 @@ +From e6860eb957208a932fb565dd7b5e79fe5a4df662 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Eivind=20N=C3=A6ss?= +Date: Fri, 3 Mar 2023 05:22:13 +0000 +Subject: [PATCH 1/2] Adding support for compiling against pppd-2.5.0 (current + master) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Eivind Næss +--- + configure.ac | 46 +++++++++++++++++++++++++++++++++++++-- + src/nm-l2tp-pppd-plugin.c | 20 +++++++++-------- + 2 files changed, 55 insertions(+), 11 deletions(-) + +diff --git a/configure.ac b/configure.ac +index baf8d44..b925eb0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -33,7 +33,10 @@ dnl + AC_PROG_CC + AM_PROG_CC_C_O + AC_PROG_INSTALL ++AC_PROG_CPP ++AC_PROG_EGREP + AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources) ++PKG_PROG_PKG_CONFIG() + + AC_CHECK_PROG([has_file], file, yes, no) + if test x$has_file = xno ; then +@@ -49,24 +52,63 @@ 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.9 ++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.9" ++ 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]) ++ + AC_MSG_CHECKING(whether EAP-TLS patch has been applied to pppd) + AC_EGREP_CPP(eaptls_passwd_hook, [ + #define USE_EAPTLS + #include ++#include + ], [have_eap_tls=yes] , [have_eap_tls=no]) + + if test "x${have_eap_tls}" = "xno"; then +diff --git a/src/nm-l2tp-pppd-plugin.c b/src/nm-l2tp-pppd-plugin.c +index 71a7878..dd752a1 100644 +--- a/src/nm-l2tp-pppd-plugin.c ++++ b/src/nm-l2tp-pppd-plugin.c +@@ -9,11 +9,6 @@ + #include + #define ___CONFIG_H__ + +-/* pppd headers *sigh* */ +-#include +-#include +-#include +- + #include "nm-default.h" + + #include +@@ -25,13 +20,14 @@ + + #include "nm-l2tp-service.h" + #include "nm-ppp-status.h" ++#include "nm-l2tp-pppd-compat.h" + + #include "nm-utils/nm-shared-utils.h" + #include "nm-utils/nm-vpn-plugin-macros.h" + + int plugin_init(void); + +-char pppd_version[] = VERSION; ++char pppd_version[] = PPPD_VERSION; + + /*****************************************************************************/ + +@@ -146,7 +142,7 @@ nm_phasechange(void *data, int arg) + 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; +@@ -166,7 +162,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())); + + g_variant_builder_add(&builder, + "{sv}", +@@ -343,12 +339,18 @@ plugin_init(void) + chap_check_hook = get_chap_check; + pap_passwd_hook = get_credentials; + pap_check_hook = get_pap_check; +-#ifdef USE_EAPTLS ++#if defined(USE_EAPTLS) || defined(PPP_WITH_EAPTLS) + eaptls_passwd_hook = get_credentials; + #endif + ++#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; + } +-- +2.40.0 + diff --git a/0002-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch b/0002-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch new file mode 100644 index 0000000..cd70a0f --- /dev/null +++ b/0002-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch @@ -0,0 +1,189 @@ +From 36a427c316a8ccd3168606f6e7fd6c8ae2b9bebf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Eivind=20N=C3=A6ss?= +Date: Fri, 3 Mar 2023 05:22:13 +0000 +Subject: [PATCH 2/2] Adding support for compiling against pppd-2.5.0 (current + master) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Eivind Næss +--- + Makefile.am | 5 +- + src/nm-l2tp-pppd-compat.h | 93 +++++++++++++++++++ + src/nm-l2tp-pppd-plugin.c | 7 +- + ...{nm-ppp-status.h => nm-l2tp-pppd-status.h} | 0 + src/nm-l2tp-service.c | 2 +- + 5 files changed, 100 insertions(+), 7 deletions(-) + create mode 100644 src/nm-l2tp-pppd-compat.h + rename src/{nm-ppp-status.h => nm-l2tp-pppd-status.h} (100%) + +diff --git a/Makefile.am b/Makefile.am +index 8201ca7..1feb9be 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -99,7 +99,7 @@ src_nm_l2tp_service_SOURCES = \ + shared/nm-l2tp-crypto-nss.c \ + shared/utils.h \ + shared/utils.c \ +- src/nm-ppp-status.h \ ++ src/nm-l2tp-pppd-status.h \ + src/nm-l2tp-service.h \ + src/nm-l2tp-service.c + src_nm_l2tp_service_CPPFLAGS = $(src_cppflags) $(NSS_CFLAGS) $(OPENSSL_CFLAGS) +@@ -118,7 +118,8 @@ pppd_plugin_LTLIBRARIES = src/nm-l2tp-pppd-plugin.la + src_nm_l2tp_pppd_plugin_la_SOURCES = \ + $(shared_sources) \ + src/nm-l2tp-pppd-plugin.c \ +- src/nm-ppp-status.h ++ src/nm-l2tp-pppd-compat.h \ ++ src/nm-l2tp-pppd-status.h + src_nm_l2tp_pppd_plugin_la_CPPFLAGS = $(src_cppflags) + src_nm_l2tp_pppd_plugin_la_LDFLAGS = \ + -module -avoid-version +diff --git a/src/nm-l2tp-pppd-compat.h b/src/nm-l2tp-pppd-compat.h +new file mode 100644 +index 0000000..80e2891 +--- /dev/null ++++ b/src/nm-l2tp-pppd-compat.h +@@ -0,0 +1,93 @@ ++/* SPDX-License-Identifier: GPL-2.0-or-later */ ++/* -*- 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) 2023 Eivind Naess, 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_L2TP_PPPD_COMPAT_H__ ++#define __NM_L2TP_PPPD_COMPAT_H__ ++ ++// 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 1 ++ ++#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_L2TP_PPPD_COMPAT_H__ +diff --git a/src/nm-l2tp-pppd-plugin.c b/src/nm-l2tp-pppd-plugin.c +index dd752a1..f1d588e 100644 +--- a/src/nm-l2tp-pppd-plugin.c ++++ b/src/nm-l2tp-pppd-plugin.c +@@ -9,8 +9,6 @@ + #include + #define ___CONFIG_H__ + +-#include "nm-default.h" +- + #include + #include + #include +@@ -18,10 +16,11 @@ + #include + #include + +-#include "nm-l2tp-service.h" +-#include "nm-ppp-status.h" ++#include "nm-l2tp-pppd-status.h" + #include "nm-l2tp-pppd-compat.h" + ++#include "nm-default.h" ++#include "nm-l2tp-service.h" + #include "nm-utils/nm-shared-utils.h" + #include "nm-utils/nm-vpn-plugin-macros.h" + +diff --git a/src/nm-ppp-status.h b/src/nm-l2tp-pppd-status.h +similarity index 100% +rename from src/nm-ppp-status.h +rename to src/nm-l2tp-pppd-status.h +diff --git a/src/nm-l2tp-service.c b/src/nm-l2tp-service.c +index 55f9542..629923c 100644 +--- a/src/nm-l2tp-service.c ++++ b/src/nm-l2tp-service.c +@@ -36,7 +36,7 @@ + #include + #include + +-#include "nm-ppp-status.h" ++#include "nm-l2tp-pppd-status.h" + #include "nm-l2tp-pppd-service-dbus.h" + #include "nm-utils/nm-shared-utils.h" + #include "nm-utils/nm-secret-utils.h" +-- +2.40.0 + diff --git a/NetworkManager-l2tp.spec b/NetworkManager-l2tp.spec index 4833746..abb5165 100644 --- a/NetworkManager-l2tp.spec +++ b/NetworkManager-l2tp.spec @@ -11,6 +11,11 @@ Release: 3%{?dist} License: GPLv2+ URL: https://github.com/nm-l2tp/NetworkManager-l2tp Source: https://github.com/nm-l2tp/NetworkManager-l2tp/releases/download/%{version}/%{name}-%{version}.tar.xz +# Backports from upstream main branch: fix build with ppp 2.5.0 +# No, these are not the same patch twice, they just have the same +# commit message +Patch0: 0001-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch +Patch1: 0002-Adding-support-for-compiling-against-pppd-2.5.0-curr.patch %global ppp_version %(pkg-config --modversion pppd 2>/dev/null || echo bad) @@ -53,7 +58,7 @@ This package contains software for integrating L2TP and L2TP over IPsec VPN support with the NetworkManager (GNOME files). %prep -%setup -q +%autosetup -p1 %build if [ ! -f configure ]; then