diff options
| author | Martin Jansa <Martin.Jansa@gmail.com> | 2023-05-28 06:31:22 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-05-29 13:42:00 +0100 |
| commit | 2e44751098ceac559b6ecc6585541606617e8cab (patch) | |
| tree | bd83cbb5c567bd639210aad73a5af4f308bc75c5 /meta | |
| parent | 9e3a0a060f4b0695d9cf25766ac457f5f08a86cb (diff) | |
| download | poky-2e44751098ceac559b6ecc6585541606617e8cab.tar.gz | |
connman: backport a fix for build with pppd-2.5.0
* pppd was upgraded in:
https://git.openembedded.org/openembedded-core/commit/?id=5512bf4dfd299b8d5d474d9f26c2146b3e53514a
* connman fails to build with pptp or l2tp PACKAGECONFIG is enabled
(From OE-Core rev: 0688b307c82c8cc454633ff92e4bc06987a7ac77)
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch | 274 | ||||
| -rw-r--r-- | meta/recipes-connectivity/connman/connman_1.41.bb | 1 |
2 files changed, 275 insertions, 0 deletions
diff --git a/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch b/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch new file mode 100644 index 0000000000..83343fdda5 --- /dev/null +++ b/meta/recipes-connectivity/connman/connman/0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch | |||
| @@ -0,0 +1,274 @@ | |||
| 1 | From 5f373f373f5baccc282dce257b7b16c8bb4a82c4 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: =?UTF-8?q?Eivind=20N=C3=A6ss?= <eivnaes@yahoo.com> | ||
| 3 | Date: Sat, 25 Mar 2023 20:51:52 +0000 | ||
| 4 | Subject: [PATCH] vpn: Adding support for latest pppd 2.5.0 release | ||
| 5 | |||
| 6 | The API has gone through a significant overhaul, and this change fixes any compile issues. | ||
| 7 | 1) Fixes to configure.ac itself | ||
| 8 | 2) Cleanup in pppd plugin itself | ||
| 9 | |||
| 10 | Adding a libppp-compat.h file to mask for any differences in the version. | ||
| 11 | |||
| 12 | Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=a48864a2e5d2a725dfc6eef567108bc13b43857f] | ||
| 13 | Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> | ||
| 14 | --- | ||
| 15 | configure.ac | 42 ++++++++----- | ||
| 16 | scripts/libppp-compat.h | 127 ++++++++++++++++++++++++++++++++++++++++ | ||
| 17 | scripts/libppp-plugin.c | 15 +++-- | ||
| 18 | 3 files changed, 161 insertions(+), 23 deletions(-) | ||
| 19 | create mode 100644 scripts/libppp-compat.h | ||
| 20 | |||
| 21 | diff --git a/configure.ac b/configure.ac | ||
| 22 | index a573cef..f34bb38 100644 | ||
| 23 | --- a/configure.ac | ||
| 24 | +++ b/configure.ac | ||
| 25 | @@ -135,14 +135,6 @@ AC_ARG_ENABLE(l2tp, | ||
| 26 | AC_HELP_STRING([--enable-l2tp], [enable l2tp support]), | ||
| 27 | [enable_l2tp=${enableval}], [enable_l2tp="no"]) | ||
| 28 | if (test "${enable_l2tp}" != "no"); then | ||
| 29 | - if (test -z "${path_pppd}"); then | ||
| 30 | - AC_PATH_PROG(PPPD, [pppd], [/usr/sbin/pppd], $PATH:/sbin:/usr/sbin) | ||
| 31 | - else | ||
| 32 | - PPPD="${path_pppd}" | ||
| 33 | - AC_SUBST(PPPD) | ||
| 34 | - fi | ||
| 35 | - AC_CHECK_HEADERS(pppd/pppd.h, dummy=yes, | ||
| 36 | - AC_MSG_ERROR(ppp header files are required)) | ||
| 37 | if (test -z "${path_l2tp}"); then | ||
| 38 | AC_PATH_PROG(L2TP, [xl2tpd], [/usr/sbin/xl2tpd], $PATH:/sbin:/usr/sbin) | ||
| 39 | else | ||
| 40 | @@ -160,6 +152,18 @@ AC_ARG_ENABLE(pptp, | ||
| 41 | AC_HELP_STRING([--enable-pptp], [enable pptp support]), | ||
| 42 | [enable_pptp=${enableval}], [enable_pptp="no"]) | ||
| 43 | if (test "${enable_pptp}" != "no"); then | ||
| 44 | + if (test -z "${path_pptp}"); then | ||
| 45 | + AC_PATH_PROG(PPTP, [pptp], [/usr/sbin/pptp], $PATH:/sbin:/usr/sbin) | ||
| 46 | + else | ||
| 47 | + PPTP="${path_pptp}" | ||
| 48 | + AC_SUBST(PPTP) | ||
| 49 | + fi | ||
| 50 | +fi | ||
| 51 | +AM_CONDITIONAL(PPTP, test "${enable_pptp}" != "no") | ||
| 52 | +AM_CONDITIONAL(PPTP_BUILTIN, test "${enable_pptp}" = "builtin") | ||
| 53 | + | ||
| 54 | +if (test "${enable_pptp}" != "no" || test "${enable_l2tp}" != "no"); then | ||
| 55 | + | ||
| 56 | if (test -z "${path_pppd}"); then | ||
| 57 | AC_PATH_PROG(PPPD, [pppd], [/usr/sbin/pppd], $PATH:/sbin:/usr/sbin) | ||
| 58 | else | ||
| 59 | @@ -168,15 +172,23 @@ if (test "${enable_pptp}" != "no"); then | ||
| 60 | fi | ||
| 61 | AC_CHECK_HEADERS(pppd/pppd.h, dummy=yes, | ||
| 62 | AC_MSG_ERROR(ppp header files are required)) | ||
| 63 | - if (test -z "${path_pptp}"); then | ||
| 64 | - AC_PATH_PROG(PPTP, [pptp], [/usr/sbin/pptp], $PATH:/sbin:/usr/sbin) | ||
| 65 | - else | ||
| 66 | - PPTP="${path_pptp}" | ||
| 67 | - AC_SUBST(PPTP) | ||
| 68 | + AC_CHECK_HEADERS([pppd/chap.h pppd/chap-new.h pppd/chap_ms.h]) | ||
| 69 | + | ||
| 70 | + PKG_CHECK_EXISTS([pppd], | ||
| 71 | + [AS_VAR_SET([pppd_pkgconfig_support],[yes])]) | ||
| 72 | + | ||
| 73 | + PPPD_VERSION=2.4.9 | ||
| 74 | + if test x"$pppd_pkgconfig_support" = xyes; then | ||
| 75 | + PPPD_VERSION=`$PKG_CONFIG --modversion pppd` | ||
| 76 | fi | ||
| 77 | + | ||
| 78 | + AC_DEFINE_UNQUOTED([PPP_VERSION(x,y,z)], | ||
| 79 | + [((x & 0xFF) << 16 | (y & 0xFF) << 8 | (z & 0xFF) << 0)], | ||
| 80 | + [Macro to help determine the particular version of pppd]) | ||
| 81 | + PPP_VERSION=$(echo $PPPD_VERSION | sed -e "s/\./\,/g") | ||
| 82 | + AC_DEFINE_UNQUOTED(WITH_PPP_VERSION, PPP_VERSION($PPP_VERSION), | ||
| 83 | + [The real version of pppd represented as an int]) | ||
| 84 | fi | ||
| 85 | -AM_CONDITIONAL(PPTP, test "${enable_pptp}" != "no") | ||
| 86 | -AM_CONDITIONAL(PPTP_BUILTIN, test "${enable_pptp}" = "builtin") | ||
| 87 | |||
| 88 | AC_CHECK_HEADERS(resolv.h, dummy=yes, | ||
| 89 | AC_MSG_ERROR(resolver header files are required)) | ||
| 90 | diff --git a/scripts/libppp-compat.h b/scripts/libppp-compat.h | ||
| 91 | new file mode 100644 | ||
| 92 | index 0000000..eee1d09 | ||
| 93 | --- /dev/null | ||
| 94 | +++ b/scripts/libppp-compat.h | ||
| 95 | @@ -0,0 +1,127 @@ | ||
| 96 | +/* Copyright (C) Eivind Naess, eivnaes@yahoo.com */ | ||
| 97 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
| 98 | + | ||
| 99 | +#ifndef __LIBPPP_COMPAT_H__ | ||
| 100 | +#define __LIBPPP_COMPAT_H__ | ||
| 101 | + | ||
| 102 | +/* Define USE_EAPTLS compile with EAP TLS support against older pppd headers, | ||
| 103 | + * pppd >= 2.5.0 use PPP_WITH_EAPTLS and is defined in pppdconf.h */ | ||
| 104 | +#define USE_EAPTLS 1 | ||
| 105 | + | ||
| 106 | +/* Define INET6 to compile with IPv6 support against older pppd headers, | ||
| 107 | + * pppd >= 2.5.0 use PPP_WITH_IPV6CP and is defined in pppdconf.h */ | ||
| 108 | +#define INET6 1 | ||
| 109 | + | ||
| 110 | +/* PPP < 2.5.0 defines and exports VERSION which overlaps with current package VERSION define. | ||
| 111 | + * this silly macro magic is to work around that. */ | ||
| 112 | +#undef VERSION | ||
| 113 | +#include <pppd/pppd.h> | ||
| 114 | + | ||
| 115 | +#ifndef PPPD_VERSION | ||
| 116 | +#define PPPD_VERSION VERSION | ||
| 117 | +#endif | ||
| 118 | + | ||
| 119 | +#include <pppd/fsm.h> | ||
| 120 | +#include <pppd/ccp.h> | ||
| 121 | +#include <pppd/eui64.h> | ||
| 122 | +#include <pppd/ipcp.h> | ||
| 123 | +#include <pppd/ipv6cp.h> | ||
| 124 | +#include <pppd/eap.h> | ||
| 125 | +#include <pppd/upap.h> | ||
| 126 | + | ||
| 127 | +#ifdef HAVE_PPPD_CHAP_H | ||
| 128 | +#include <pppd/chap.h> | ||
| 129 | +#endif | ||
| 130 | + | ||
| 131 | +#ifdef HAVE_PPPD_CHAP_NEW_H | ||
| 132 | +#include <pppd/chap-new.h> | ||
| 133 | +#endif | ||
| 134 | + | ||
| 135 | +#ifdef HAVE_PPPD_CHAP_MS_H | ||
| 136 | +#include <pppd/chap_ms.h> | ||
| 137 | +#endif | ||
| 138 | + | ||
| 139 | +#ifndef PPP_PROTO_CHAP | ||
| 140 | +#define PPP_PROTO_CHAP 0xc223 | ||
| 141 | +#endif | ||
| 142 | + | ||
| 143 | +#ifndef PPP_PROTO_EAP | ||
| 144 | +#define PPP_PROTO_EAP 0xc227 | ||
| 145 | +#endif | ||
| 146 | + | ||
| 147 | + | ||
| 148 | +#if WITH_PPP_VERSION < PPP_VERSION(2,5,0) | ||
| 149 | + | ||
| 150 | +static inline bool | ||
| 151 | +debug_on (void) | ||
| 152 | +{ | ||
| 153 | + return debug; | ||
| 154 | +} | ||
| 155 | + | ||
| 156 | +static inline const char | ||
| 157 | +*ppp_ipparam (void) | ||
| 158 | +{ | ||
| 159 | + return ipparam; | ||
| 160 | +} | ||
| 161 | + | ||
| 162 | +static inline int | ||
| 163 | +ppp_ifunit (void) | ||
| 164 | +{ | ||
| 165 | + return ifunit; | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +static inline const char * | ||
| 169 | +ppp_ifname (void) | ||
| 170 | +{ | ||
| 171 | + return ifname; | ||
| 172 | +} | ||
| 173 | + | ||
| 174 | +static inline int | ||
| 175 | +ppp_get_mtu (int idx) | ||
| 176 | +{ | ||
| 177 | + return netif_get_mtu(idx); | ||
| 178 | +} | ||
| 179 | + | ||
| 180 | +typedef enum ppp_notify | ||
| 181 | +{ | ||
| 182 | + NF_PID_CHANGE, | ||
| 183 | + NF_PHASE_CHANGE, | ||
| 184 | + NF_EXIT, | ||
| 185 | + NF_SIGNALED, | ||
| 186 | + NF_IP_UP, | ||
| 187 | + NF_IP_DOWN, | ||
| 188 | + NF_IPV6_UP, | ||
| 189 | + NF_IPV6_DOWN, | ||
| 190 | + NF_AUTH_UP, | ||
| 191 | + NF_LINK_DOWN, | ||
| 192 | + NF_FORK, | ||
| 193 | + NF_MAX_NOTIFY | ||
| 194 | +} ppp_notify_t; | ||
| 195 | + | ||
| 196 | +typedef void (ppp_notify_fn) (void *ctx, int arg); | ||
| 197 | + | ||
| 198 | +static inline void | ||
| 199 | +ppp_add_notify (ppp_notify_t type, ppp_notify_fn *func, void *ctx) | ||
| 200 | +{ | ||
| 201 | + struct notifier **list[NF_MAX_NOTIFY] = { | ||
| 202 | + [NF_PID_CHANGE ] = &pidchange, | ||
| 203 | + [NF_PHASE_CHANGE] = &phasechange, | ||
| 204 | + [NF_EXIT ] = &exitnotify, | ||
| 205 | + [NF_SIGNALED ] = &sigreceived, | ||
| 206 | + [NF_IP_UP ] = &ip_up_notifier, | ||
| 207 | + [NF_IP_DOWN ] = &ip_down_notifier, | ||
| 208 | + [NF_IPV6_UP ] = &ipv6_up_notifier, | ||
| 209 | + [NF_IPV6_DOWN ] = &ipv6_down_notifier, | ||
| 210 | + [NF_AUTH_UP ] = &auth_up_notifier, | ||
| 211 | + [NF_LINK_DOWN ] = &link_down_notifier, | ||
| 212 | + [NF_FORK ] = &fork_notifier, | ||
| 213 | + }; | ||
| 214 | + | ||
| 215 | + struct notifier **notify = list[type]; | ||
| 216 | + if (notify) { | ||
| 217 | + add_notifier(notify, func, ctx); | ||
| 218 | + } | ||
| 219 | +} | ||
| 220 | + | ||
| 221 | +#endif /* #if WITH_PPP_VERSION < PPP_VERSION(2,5,0) */ | ||
| 222 | +#endif /* #if__LIBPPP_COMPAT_H__ */ | ||
| 223 | diff --git a/scripts/libppp-plugin.c b/scripts/libppp-plugin.c | ||
| 224 | index 0dd8b47..61641b5 100644 | ||
| 225 | --- a/scripts/libppp-plugin.c | ||
| 226 | +++ b/scripts/libppp-plugin.c | ||
| 227 | @@ -29,14 +29,13 @@ | ||
| 228 | #include <sys/types.h> | ||
| 229 | #include <sys/stat.h> | ||
| 230 | #include <fcntl.h> | ||
| 231 | -#include <pppd/pppd.h> | ||
| 232 | -#include <pppd/fsm.h> | ||
| 233 | -#include <pppd/ipcp.h> | ||
| 234 | #include <netinet/in.h> | ||
| 235 | #include <arpa/inet.h> | ||
| 236 | |||
| 237 | #include <dbus/dbus.h> | ||
| 238 | |||
| 239 | +#include "libppp-compat.h" | ||
| 240 | + | ||
| 241 | #define INET_ADDRES_LEN (INET_ADDRSTRLEN + 5) | ||
| 242 | #define INET_DNS_LEN (2*INET_ADDRSTRLEN + 9) | ||
| 243 | |||
| 244 | @@ -47,7 +46,7 @@ static char *path; | ||
| 245 | static DBusConnection *connection; | ||
| 246 | static int prev_phase; | ||
| 247 | |||
| 248 | -char pppd_version[] = VERSION; | ||
| 249 | +char pppd_version[] = PPPD_VERSION; | ||
| 250 | |||
| 251 | int plugin_init(void); | ||
| 252 | |||
| 253 | @@ -170,7 +169,7 @@ static void ppp_up(void *data, int arg) | ||
| 254 | DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING | ||
| 255 | DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); | ||
| 256 | |||
| 257 | - append(&dict, "INTERNAL_IFNAME", ifname); | ||
| 258 | + append(&dict, "INTERNAL_IFNAME", ppp_ifname()); | ||
| 259 | |||
| 260 | inet_ntop(AF_INET, &ipcp_gotoptions[0].ouraddr, buf, INET_ADDRSTRLEN); | ||
| 261 | append(&dict, "INTERNAL_IP4_ADDRESS", buf); | ||
| 262 | @@ -309,9 +308,9 @@ int plugin_init(void) | ||
| 263 | chap_check_hook = ppp_have_secret; | ||
| 264 | pap_check_hook = ppp_have_secret; | ||
| 265 | |||
| 266 | - add_notifier(&ip_up_notifier, ppp_up, NULL); | ||
| 267 | - add_notifier(&phasechange, ppp_phase_change, NULL); | ||
| 268 | - add_notifier(&exitnotify, ppp_exit, connection); | ||
| 269 | + ppp_add_notify(NF_IP_UP, ppp_up, NULL); | ||
| 270 | + ppp_add_notify(NF_PHASE_CHANGE, ppp_phase_change, NULL); | ||
| 271 | + ppp_add_notify(NF_EXIT, ppp_exit, connection); | ||
| 272 | |||
| 273 | return 0; | ||
| 274 | } | ||
diff --git a/meta/recipes-connectivity/connman/connman_1.41.bb b/meta/recipes-connectivity/connman/connman_1.41.bb index 3f2e29820f..d8ac1f5cde 100644 --- a/meta/recipes-connectivity/connman/connman_1.41.bb +++ b/meta/recipes-connectivity/connman/connman_1.41.bb | |||
| @@ -9,6 +9,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \ | |||
| 9 | file://CVE-2022-32293_p2.patch \ | 9 | file://CVE-2022-32293_p2.patch \ |
| 10 | file://CVE-2022-32292.patch \ | 10 | file://CVE-2022-32292.patch \ |
| 11 | file://0001-gdhcp-Verify-and-sanitize-packet-length-first.patch \ | 11 | file://0001-gdhcp-Verify-and-sanitize-packet-length-first.patch \ |
| 12 | file://0001-vpn-Adding-support-for-latest-pppd-2.5.0-release.patch \ | ||
| 12 | " | 13 | " |
| 13 | 14 | ||
| 14 | SRC_URI:append:libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch" | 15 | SRC_URI:append:libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch" |
