From fc037d7f6e40787ddf6c04481b37ee9920f4f11e Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 12 Jun 2022 03:27:16 +0000 Subject: [PATCH 1/3] irssi: update to 1.4.2 and meson build --- .../network-tools-depends/irssi/package.mk | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/packages/addons/addon-depends/network-tools-depends/irssi/package.mk b/packages/addons/addon-depends/network-tools-depends/irssi/package.mk index 4c90e99024..57f476137f 100644 --- a/packages/addons/addon-depends/network-tools-depends/irssi/package.mk +++ b/packages/addons/addon-depends/network-tools-depends/irssi/package.mk @@ -2,8 +2,8 @@ # Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) PKG_NAME="irssi" -PKG_VERSION="1.2.3" -PKG_SHA256="a647bfefed14d2221fa77b6edac594934dc672c4a560417b1abcbbc6b88d769f" +PKG_VERSION="1.4.2" +PKG_SHA256="79a4765d2dfe153c440a1775b074d5d0682b96814c7cf92325b5e15ce50e26a8" PKG_LICENSE="GPL" PKG_SITE="http://www.irssi.org/" PKG_URL="https://github.com/irssi/irssi/releases/download/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.xz" @@ -11,14 +11,7 @@ PKG_DEPENDS_TARGET="toolchain glib ncurses openssl" PKG_LONGDESC="Irssi is a terminal based IRC client for UNIX systems." PKG_BUILD_FLAGS="-sysroot" -PKG_CONFIGURE_OPTS_TARGET="--with-sysroot=${SYSROOT_PREFIX} \ - --disable-glibtest \ - --without-socks \ - --with-textui \ - --without-bot \ - --without-proxy \ - --without-perl" - -pre_configure_target() { - export CFLAGS="${CFLAGS} -I${PKG_BUILD}" -} +PKG_MESON_OPTS_TARGET="-Dwithout-textui=no \ + -Dwith-bot=no \ + -Dwith-proxy=no \ + -Dwith-perl=no" From 752ecf95ccb155ce94563523cafd9dbe2aaba3bd Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Wed, 29 Jun 2022 13:16:39 +0000 Subject: [PATCH 2/3] ngrep: update to using pcre2 --- .../network-tools-depends/ngrep/package.mk | 3 +- ...pcre2-api-and-enable-jit-compilation.patch | 252 ++++++++++++++++++ 2 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 packages/addons/addon-depends/network-tools-depends/ngrep/patches/port-to-pcre2-api-and-enable-jit-compilation.patch diff --git a/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk b/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk index f64642e45a..003cab18dc 100644 --- a/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk +++ b/packages/addons/addon-depends/network-tools-depends/ngrep/package.mk @@ -7,13 +7,14 @@ PKG_SHA256="500c29914dd26f5aa6df07446388d49b60249622c9b0fd1f266f62a5706f056c" PKG_LICENSE="GPL" PKG_SITE="https://github.com/jpr5/ngrep" PKG_URL="https://github.com/jpr5/ngrep/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libpcap" +PKG_DEPENDS_TARGET="toolchain libpcap pcre2" PKG_LONGDESC="A tool like GNU grep applied to the network layer." PKG_TOOLCHAIN="autotools" PKG_BUILD_FLAGS="-sysroot -parallel" PKG_CONFIGURE_OPTS_TARGET="--with-pcap-includes=${SYSROOT_PREFIX}/usr/include \ --enable-ipv6 \ + --enable-pcre2 \ --disable-dropprivs" pre_build_target() { diff --git a/packages/addons/addon-depends/network-tools-depends/ngrep/patches/port-to-pcre2-api-and-enable-jit-compilation.patch b/packages/addons/addon-depends/network-tools-depends/ngrep/patches/port-to-pcre2-api-and-enable-jit-compilation.patch new file mode 100644 index 0000000000..57dea25a22 --- /dev/null +++ b/packages/addons/addon-depends/network-tools-depends/ngrep/patches/port-to-pcre2-api-and-enable-jit-compilation.patch @@ -0,0 +1,252 @@ +From cfcf1e6e9c4f8a2404810d8d1d90e6d1eaa0abdd Mon Sep 17 00:00:00 2001 +From: Romain Francoise +Date: Sat, 20 Nov 2021 23:28:15 +0100 +Subject: [PATCH] Port to PCRE2 API and enable JIT compilation + +The original PCRE API provided on most systems by libpcre3 is no longer +maintained upstream and is superseded by the new PCRE2 API, which was +first released in 2015. pcre3 will be removed from Debian in 2023, as +noted in this bug report: https://bugs.debian.org/1000080 + +This commit replaces the existing PCRE implementation with a new one +using PCRE2, which is quite similar. One benefit is that PCRE2 provides +a JIT compiler which can replace the interpretive regular expression +evaluation code with native machine code on most modern platforms: +https://pcre.org/current/doc/html/pcre2jit.html + +Depending on the length and complexity of the pattern used, enabling JIT +compilation makes Ngrep 50x to 150x faster, testing in quiet mode on a +multi-gigabyte PCAP file stored on tmpfs. +--- + configure.in | 24 ++++++------ + ngrep.c | 106 ++++++++++++++++++++++++++++++++++----------------- + 2 files changed, 82 insertions(+), 48 deletions(-) + +diff --git a/configure.in b/configure.in +index dbef39b..0806a62 100644 +--- a/configure.in ++++ b/configure.in +@@ -141,16 +141,16 @@ dnl + REGEX_DIR='' + REGEX_OBJS='' + +-AC_ARG_ENABLE(pcre, +-[ --enable-pcre use PCRE instead of GNU regex (default GNU)], +-[ use_pcre="$enableval" ], +-[ use_pcre="no" ]) +- +-if test $use_pcre = yes; then +- USE_PCRE="1" +- EXTRA_LIBS="$EXTRA_LIBS -lpcre" ++AC_ARG_ENABLE(pcre2, ++[ --enable-pcre2 use PCRE2 instead of GNU regex (default GNU)], ++[ use_pcre2="$enableval" ], ++[ use_pcre2="no" ]) ++ ++if test $use_pcre2 = yes; then ++ USE_PCRE2="1" ++ EXTRA_LIBS="$EXTRA_LIBS -lpcre2-8" + else +- USE_PCRE="0" ++ USE_PCRE2="0" + + AC_MSG_RESULT + AC_MSG_RESULT(Configuring GNU Regular Expression library ...) +@@ -476,7 +476,7 @@ dnl + AC_DEFINE_UNQUOTED(USE_PCAP_RESTART, $USE_PCAP_RESTART, [whether to call the BPF lexer restart function between multiple BPF filter compilation attempts (default no)]) + AC_DEFINE_UNQUOTED(PCAP_RESTART_FUNC, $PCAP_RESTART_FUNC, [routine used for restarting the BPF lexer]) + +-AC_DEFINE_UNQUOTED(USE_PCRE, $USE_PCRE, [whether to use PCRE (default GNU Regex)]) ++AC_DEFINE_UNQUOTED(USE_PCRE2, $USE_PCRE2, [whether to use PCRE2 (default GNU Regex)]) + AC_DEFINE_UNQUOTED(USE_IPv6, $USE_IPv6, [whether to use IPv6 (default off)]) + AC_DEFINE_UNQUOTED(USE_TCPKILL, $USE_TCPKILL, [whether to enable tcpkill functionality (default off)]) + AC_DEFINE_UNQUOTED(USE_VLAN_HACK, $USE_VLAN_HACK, [whether to automatically include VLAN frames (default on)]) +@@ -524,8 +524,8 @@ else + AC_MSG_RESULT(CONFIG: privilege dropping DISABLED) + fi + +-if test "$USE_PCRE" = "1"; then +- AC_MSG_RESULT(CONFIG: using PCRE regex library) ++if test "$USE_PCRE2" = "1"; then ++ AC_MSG_RESULT(CONFIG: using PCRE2 regex library) + else + AC_MSG_RESULT(CONFIG: using GNU regex library) + fi +diff --git a/ngrep.c b/ngrep.c +index 3df9389..dcf0555 100644 +--- a/ngrep.c ++++ b/ngrep.c +@@ -91,8 +91,9 @@ + #include + #endif + +-#if USE_PCRE +-#include ++#if USE_PCRE2 ++#define PCRE2_CODE_UNIT_WIDTH 8 ++#include + #else + #include + #endif +@@ -128,12 +129,14 @@ char nonprint_char = '.'; + * GNU Regex/PCRE + */ + +-#if USE_PCRE +-int32_t err_offset; +-char *re_err = NULL; ++#if USE_PCRE2 ++PCRE2_SIZE err_offset; ++int re_err; + +-pcre *pattern = NULL; +-pcre_extra *pattern_extra = NULL; ++pcre2_code *re; ++pcre2_match_data *pcre2_md; ++PCRE2_SPTR pattern; ++uint32_t pcre2_jit_on = 0; + #else + const char *re_err = NULL; + +@@ -189,6 +192,7 @@ uint32_t ws_row, ws_col = 80, ws_col_forced = 0; + + int main(int argc, char **argv) { + int32_t c; ++ const char *extra = ""; + + signal(SIGINT, clean_exit); + signal(SIGABRT, clean_exit); +@@ -394,8 +398,12 @@ int main(int argc, char **argv) { + if (setup_matcher()) + clean_exit(2); + ++#if USE_PCRE2 ++ if (pcre2_jit_on) ++ extra = " (JIT)"; ++#endif + if (quiet < 2 && strlen(match_data)) +- printf("%smatch: %s%s\n", invert_match?"don't ":"", ++ printf("%smatch%s: %s%s\n", invert_match?"don't ":"", extra, + (bin_data && !strchr(match_data, 'x'))?"0x":"", match_data); + + if (re_match_word) free(match_data); +@@ -631,14 +639,14 @@ int setup_matcher(void) { + + } else { + +-#if USE_PCRE +- uint32_t pcre_options = PCRE_UNGREEDY; ++#if USE_PCRE2 ++ uint32_t pcre_options = PCRE2_UNGREEDY; + + if (re_ignore_case) +- pcre_options |= PCRE_CASELESS; ++ pcre_options |= PCRE2_CASELESS; + + if (re_multiline_match) +- pcre_options |= PCRE_DOTALL; ++ pcre_options |= PCRE2_DOTALL; + #else + re_syntax_options = RE_CHAR_CLASSES | RE_NO_BK_PARENS | RE_NO_BK_VBAR | + RE_CONTEXT_INDEP_ANCHORS | RE_CONTEXT_INDEP_OPS; +@@ -673,15 +681,36 @@ int setup_matcher(void) { + match_data = word_regex; + } + +-#if USE_PCRE +- pattern = pcre_compile(match_data, pcre_options, (const char **)&re_err, &err_offset, 0); ++#if USE_PCRE2 ++ re = pcre2_compile((PCRE2_SPTR8)match_data, PCRE2_ZERO_TERMINATED, ++ pcre_options, &re_err, &err_offset, NULL); ++ if (!re) { ++ PCRE2_UCHAR buffer[256]; ++ pcre2_get_error_message(re_err, buffer, sizeof(buffer)); ++ fprintf(stderr, "regex compile failed: %s (offset: %zd)\n", buffer, ++ err_offset); ++ return 1; ++ } + +- if (!pattern) { +- fprintf(stderr, "compile failed: %s\n", re_err); ++ pcre2_md = pcre2_match_data_create_from_pattern(re, NULL); ++ if (!pcre2_md) { ++ fprintf(stderr, "unable to alloc pcre2 match data\n"); + return 1; + } + +- pattern_extra = pcre_study(pattern, 0, (const char **)&re_err); ++ pcre2_config(PCRE2_CONFIG_JIT, &pcre2_jit_on); ++ if (pcre2_jit_on) { ++ int rc; ++ size_t jitsz; ++ ++ if (pcre2_jit_compile(re, PCRE2_JIT_COMPLETE) != 0) { ++ fprintf(stderr, "unable to JIT-compile pcre2 regular expression\n"); ++ return 1; ++ } ++ rc = pcre2_pattern_info(re, PCRE2_INFO_JITSIZE, &jitsz); ++ if (rc || jitsz == 0) ++ pcre2_jit_on = 0; ++ } + #else + re_err = re_compile_pattern(match_data, strlen(match_data), &pattern); + if (re_err) { +@@ -990,24 +1019,29 @@ void dump_packet(struct pcap_pkthdr *h, u_char *p, uint8_t proto, unsigned char + } + + int8_t re_match_func(unsigned char *data, uint32_t len, uint16_t *mindex, uint16_t *msize) { +-#if USE_PCRE +- +- static int sub[2]; +- switch(pcre_exec(pattern, 0, (char const *)data, (int32_t)len, 0, 0, 0, 0)) { +- case PCRE_ERROR_NULL: +- case PCRE_ERROR_BADOPTION: +- case PCRE_ERROR_BADMAGIC: +- case PCRE_ERROR_UNKNOWN_NODE: +- case PCRE_ERROR_NOMEMORY: +- perror("she's dead, jim\n"); +- clean_exit(2); ++#if USE_PCRE2 ++ int rc; ++ PCRE2_SIZE *ovector; ++ PCRE2_UCHAR errbuf[256]; + +- case PCRE_ERROR_NOMATCH: +- return 0; ++ if (pcre2_jit_on) ++ rc = pcre2_jit_match(re, data, len, 0, 0, pcre2_md, NULL); ++ else ++ rc = pcre2_match(re, data, len, 0, 0, pcre2_md, NULL); + +- default: +- *mindex = sub[0]; +- *msize = sub[1] - sub[0]; ++ if (rc < 0) { ++ switch (rc) { ++ case PCRE2_ERROR_NOMATCH: ++ return 0; ++ default: ++ pcre2_get_error_message(rc, errbuf, sizeof(errbuf)); ++ fprintf(stderr, "she's dead, jim: %s (error %d)\n", errbuf, rc); ++ clean_exit(2); ++ } ++ } else { ++ ovector = pcre2_get_ovector_pointer(pcre2_md); ++ *mindex = ovector[0]; ++ *msize = ovector[1] - ovector[0]; + } + #else + +@@ -1479,9 +1513,9 @@ void clean_exit(int32_t sig) { + if (quiet < 1 && sig >= 0) + printf("exit\n"); + +-#if USE_PCRE +- if (pattern) pcre_free(pattern); +- if (pattern_extra) pcre_free(pattern_extra); ++#if USE_PCRE2 ++ if (re) pcre2_code_free(re); ++ if (pcre2_md) pcre2_match_data_free(pcre2_md); + #else + if (pattern.translate) free(pattern.translate); + if (pattern.fastmap) free(pattern.fastmap); From f2b5d1859000a20774d79a43ef6cc1f259f8f6ae Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 17 Jul 2022 09:16:28 +0000 Subject: [PATCH 3/3] network-tools: update addon to (115) --- packages/addons/tools/network-tools/changelog.txt | 4 ++++ packages/addons/tools/network-tools/package.mk | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/addons/tools/network-tools/changelog.txt b/packages/addons/tools/network-tools/changelog.txt index 9c4f086e89..7bcc9a87dd 100644 --- a/packages/addons/tools/network-tools/changelog.txt +++ b/packages/addons/tools/network-tools/changelog.txt @@ -1,3 +1,7 @@ +115 +- irssi: update to 1.4.2 and meson build +- ngrep: update to using pcre2 + 114 - iperf: update to 3.11 - nmap: update to 7.92 and HSTS diff --git a/packages/addons/tools/network-tools/package.mk b/packages/addons/tools/network-tools/package.mk index 4cfebca1f9..9729aa8fc8 100644 --- a/packages/addons/tools/network-tools/package.mk +++ b/packages/addons/tools/network-tools/package.mk @@ -3,7 +3,7 @@ PKG_NAME="network-tools" PKG_VERSION="1.0" -PKG_REV="114" +PKG_REV="115" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://libreelec.tv"