https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/-/merge_requests/27 https://bugs.gentoo.org/904842 From d59819b5d26db44f51bfbb76be3b373c419e408d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eivind=20N=C3=A6ss?= 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. --- src/nm-fortisslvpn-pppd-compat.h | 112 ++++++++++++++++++++----------- src/nm-fortisslvpn-pppd-plugin.c | 6 -- 2 files changed, 71 insertions(+), 47 deletions(-) diff --git a/src/nm-fortisslvpn-pppd-compat.h b/src/nm-fortisslvpn-pppd-compat.h index 9a02908..5d2d02a 100644 --- 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 @@ -43,51 +26,98 @@ #include #ifdef HAVE_PPPD_CHAP_H - #include +#include #endif #ifdef HAVE_PPPD_CHAP_NEW_H - #include +#include #endif #ifdef HAVE_PPPD_CHAP_MS_H - #include +#include #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__ */ diff --git a/src/nm-fortisslvpn-pppd-plugin.c b/src/nm-fortisslvpn-pppd-plugin.c index c2efb9a..0f1c687 100644 --- 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