mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-05 21:37:15 +02:00
277 lines
7.6 KiB
Diff
277 lines
7.6 KiB
Diff
Patch-Source: https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=a48864a2e5d2a725dfc6eef567108bc13b43857f
|
|
--
|
|
From a48864a2e5d2a725dfc6eef567108bc13b43857f Mon Sep 17 00:00:00 2001
|
|
From: Eivind Næss <eivnaes@yahoo.com>
|
|
Date: Sat, 25 Mar 2023 20:51:52 +0000
|
|
Subject: vpn: Adding support for latest pppd 2.5.0 release
|
|
|
|
The API has gone through a significant overhaul, and this change fixes any compile issues.
|
|
1) Fixes to configure.ac itself
|
|
2) Cleanup in pppd plugin itself
|
|
|
|
Adding a libppp-compat.h file to mask for any differences in the version.
|
|
---
|
|
configure.ac | 42 ++++++++++------
|
|
scripts/libppp-compat.h | 127 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
scripts/libppp-plugin.c | 15 +++---
|
|
3 files changed, 161 insertions(+), 23 deletions(-)
|
|
create mode 100644 scripts/libppp-compat.h
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index ea7a2fac..e82ba469 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -135,14 +135,6 @@ AC_ARG_ENABLE(l2tp,
|
|
AC_HELP_STRING([--enable-l2tp], [enable l2tp support]),
|
|
[enable_l2tp=${enableval}], [enable_l2tp="no"])
|
|
if (test "${enable_l2tp}" != "no"); then
|
|
- if (test -z "${path_pppd}"); then
|
|
- AC_PATH_PROG(PPPD, [pppd], [/usr/sbin/pppd], $PATH:/sbin:/usr/sbin)
|
|
- else
|
|
- PPPD="${path_pppd}"
|
|
- AC_SUBST(PPPD)
|
|
- fi
|
|
- AC_CHECK_HEADERS(pppd/pppd.h, dummy=yes,
|
|
- AC_MSG_ERROR(ppp header files are required))
|
|
if (test -z "${path_l2tp}"); then
|
|
AC_PATH_PROG(L2TP, [xl2tpd], [/usr/sbin/xl2tpd], $PATH:/sbin:/usr/sbin)
|
|
else
|
|
@@ -160,6 +152,18 @@ AC_ARG_ENABLE(pptp,
|
|
AC_HELP_STRING([--enable-pptp], [enable pptp support]),
|
|
[enable_pptp=${enableval}], [enable_pptp="no"])
|
|
if (test "${enable_pptp}" != "no"); then
|
|
+ if (test -z "${path_pptp}"); then
|
|
+ AC_PATH_PROG(PPTP, [pptp], [/usr/sbin/pptp], $PATH:/sbin:/usr/sbin)
|
|
+ else
|
|
+ PPTP="${path_pptp}"
|
|
+ AC_SUBST(PPTP)
|
|
+ fi
|
|
+fi
|
|
+AM_CONDITIONAL(PPTP, test "${enable_pptp}" != "no")
|
|
+AM_CONDITIONAL(PPTP_BUILTIN, test "${enable_pptp}" = "builtin")
|
|
+
|
|
+if (test "${enable_pptp}" != "no" || test "${enable_l2tp}" != "no"); then
|
|
+
|
|
if (test -z "${path_pppd}"); then
|
|
AC_PATH_PROG(PPPD, [pppd], [/usr/sbin/pppd], $PATH:/sbin:/usr/sbin)
|
|
else
|
|
@@ -168,15 +172,23 @@ if (test "${enable_pptp}" != "no"); then
|
|
fi
|
|
AC_CHECK_HEADERS(pppd/pppd.h, dummy=yes,
|
|
AC_MSG_ERROR(ppp header files are required))
|
|
- if (test -z "${path_pptp}"); then
|
|
- AC_PATH_PROG(PPTP, [pptp], [/usr/sbin/pptp], $PATH:/sbin:/usr/sbin)
|
|
- else
|
|
- PPTP="${path_pptp}"
|
|
- AC_SUBST(PPTP)
|
|
+ AC_CHECK_HEADERS([pppd/chap.h pppd/chap-new.h pppd/chap_ms.h])
|
|
+
|
|
+ PKG_CHECK_EXISTS([pppd],
|
|
+ [AS_VAR_SET([pppd_pkgconfig_support],[yes])])
|
|
+
|
|
+ PPPD_VERSION=2.4.9
|
|
+ if test x"$pppd_pkgconfig_support" = xyes; then
|
|
+ PPPD_VERSION=`$PKG_CONFIG --modversion pppd`
|
|
fi
|
|
+
|
|
+ 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])
|
|
fi
|
|
-AM_CONDITIONAL(PPTP, test "${enable_pptp}" != "no")
|
|
-AM_CONDITIONAL(PPTP_BUILTIN, test "${enable_pptp}" = "builtin")
|
|
|
|
AC_CHECK_HEADERS(resolv.h, dummy=yes,
|
|
AC_MSG_ERROR(resolver header files are required))
|
|
diff --git a/scripts/libppp-compat.h b/scripts/libppp-compat.h
|
|
new file mode 100644
|
|
index 00000000..eee1d09d
|
|
--- /dev/null
|
|
+++ b/scripts/libppp-compat.h
|
|
@@ -0,0 +1,127 @@
|
|
+/* Copyright (C) Eivind Naess, eivnaes@yahoo.com */
|
|
+/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
+
|
|
+#ifndef __LIBPPP_COMPAT_H__
|
|
+#define __LIBPPP_COMPAT_H__
|
|
+
|
|
+/* Define USE_EAPTLS compile with EAP TLS support against older pppd headers,
|
|
+ * pppd >= 2.5.0 use PPP_WITH_EAPTLS and is defined in pppdconf.h */
|
|
+#define USE_EAPTLS 1
|
|
+
|
|
+/* Define INET6 to compile with IPv6 support against older pppd headers,
|
|
+ * pppd >= 2.5.0 use PPP_WITH_IPV6CP 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>
|
|
+
|
|
+#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);
|
|
+}
|
|
+
|
|
+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)
|
|
+{
|
|
+ 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 /* #if__LIBPPP_COMPAT_H__ */
|
|
diff --git a/scripts/libppp-plugin.c b/scripts/libppp-plugin.c
|
|
index 0dd8b471..61641b5b 100644
|
|
--- a/scripts/libppp-plugin.c
|
|
+++ b/scripts/libppp-plugin.c
|
|
@@ -29,14 +29,13 @@
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
-#include <pppd/pppd.h>
|
|
-#include <pppd/fsm.h>
|
|
-#include <pppd/ipcp.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#include <dbus/dbus.h>
|
|
|
|
+#include "libppp-compat.h"
|
|
+
|
|
#define INET_ADDRES_LEN (INET_ADDRSTRLEN + 5)
|
|
#define INET_DNS_LEN (2*INET_ADDRSTRLEN + 9)
|
|
|
|
@@ -47,7 +46,7 @@ static char *path;
|
|
static DBusConnection *connection;
|
|
static int prev_phase;
|
|
|
|
-char pppd_version[] = VERSION;
|
|
+char pppd_version[] = PPPD_VERSION;
|
|
|
|
int plugin_init(void);
|
|
|
|
@@ -170,7 +169,7 @@ static void ppp_up(void *data, int arg)
|
|
DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING
|
|
DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
|
|
|
|
- append(&dict, "INTERNAL_IFNAME", ifname);
|
|
+ append(&dict, "INTERNAL_IFNAME", ppp_ifname());
|
|
|
|
inet_ntop(AF_INET, &ipcp_gotoptions[0].ouraddr, buf, INET_ADDRSTRLEN);
|
|
append(&dict, "INTERNAL_IP4_ADDRESS", buf);
|
|
@@ -309,9 +308,9 @@ int plugin_init(void)
|
|
chap_check_hook = ppp_have_secret;
|
|
pap_check_hook = ppp_have_secret;
|
|
|
|
- add_notifier(&ip_up_notifier, ppp_up, NULL);
|
|
- add_notifier(&phasechange, ppp_phase_change, NULL);
|
|
- add_notifier(&exitnotify, ppp_exit, connection);
|
|
+ ppp_add_notify(NF_IP_UP, ppp_up, NULL);
|
|
+ ppp_add_notify(NF_PHASE_CHANGE, ppp_phase_change, NULL);
|
|
+ ppp_add_notify(NF_EXIT, ppp_exit, connection);
|
|
|
|
return 0;
|
|
}
|
|
--
|
|
cgit
|
|
|