mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-30 14:16:40 +00:00
Merge pull request #6714 from heitbaum/network-tools
[le11] network tools update to 115
This commit is contained in:
commit
3a651c492b
@ -2,8 +2,8 @@
|
|||||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||||
|
|
||||||
PKG_NAME="irssi"
|
PKG_NAME="irssi"
|
||||||
PKG_VERSION="1.2.3"
|
PKG_VERSION="1.4.2"
|
||||||
PKG_SHA256="a647bfefed14d2221fa77b6edac594934dc672c4a560417b1abcbbc6b88d769f"
|
PKG_SHA256="79a4765d2dfe153c440a1775b074d5d0682b96814c7cf92325b5e15ce50e26a8"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://www.irssi.org/"
|
PKG_SITE="http://www.irssi.org/"
|
||||||
PKG_URL="https://github.com/irssi/irssi/releases/download/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.xz"
|
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_LONGDESC="Irssi is a terminal based IRC client for UNIX systems."
|
||||||
PKG_BUILD_FLAGS="-sysroot"
|
PKG_BUILD_FLAGS="-sysroot"
|
||||||
|
|
||||||
PKG_CONFIGURE_OPTS_TARGET="--with-sysroot=${SYSROOT_PREFIX} \
|
PKG_MESON_OPTS_TARGET="-Dwithout-textui=no \
|
||||||
--disable-glibtest \
|
-Dwith-bot=no \
|
||||||
--without-socks \
|
-Dwith-proxy=no \
|
||||||
--with-textui \
|
-Dwith-perl=no"
|
||||||
--without-bot \
|
|
||||||
--without-proxy \
|
|
||||||
--without-perl"
|
|
||||||
|
|
||||||
pre_configure_target() {
|
|
||||||
export CFLAGS="${CFLAGS} -I${PKG_BUILD}"
|
|
||||||
}
|
|
||||||
|
@ -7,13 +7,14 @@ PKG_SHA256="500c29914dd26f5aa6df07446388d49b60249622c9b0fd1f266f62a5706f056c"
|
|||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="https://github.com/jpr5/ngrep"
|
PKG_SITE="https://github.com/jpr5/ngrep"
|
||||||
PKG_URL="https://github.com/jpr5/ngrep/archive/${PKG_VERSION}.tar.gz"
|
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_LONGDESC="A tool like GNU grep applied to the network layer."
|
||||||
PKG_TOOLCHAIN="autotools"
|
PKG_TOOLCHAIN="autotools"
|
||||||
PKG_BUILD_FLAGS="-sysroot -parallel"
|
PKG_BUILD_FLAGS="-sysroot -parallel"
|
||||||
|
|
||||||
PKG_CONFIGURE_OPTS_TARGET="--with-pcap-includes=${SYSROOT_PREFIX}/usr/include \
|
PKG_CONFIGURE_OPTS_TARGET="--with-pcap-includes=${SYSROOT_PREFIX}/usr/include \
|
||||||
--enable-ipv6 \
|
--enable-ipv6 \
|
||||||
|
--enable-pcre2 \
|
||||||
--disable-dropprivs"
|
--disable-dropprivs"
|
||||||
|
|
||||||
pre_build_target() {
|
pre_build_target() {
|
||||||
|
@ -0,0 +1,252 @@
|
|||||||
|
From cfcf1e6e9c4f8a2404810d8d1d90e6d1eaa0abdd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Romain Francoise <romain@rfr.io>
|
||||||
|
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 <netinet/icmp6.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#if USE_PCRE
|
||||||
|
-#include <pcre.h>
|
||||||
|
+#if USE_PCRE2
|
||||||
|
+#define PCRE2_CODE_UNIT_WIDTH 8
|
||||||
|
+#include <pcre2.h>
|
||||||
|
#else
|
||||||
|
#include <regex.h>
|
||||||
|
#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);
|
@ -1,3 +1,7 @@
|
|||||||
|
115
|
||||||
|
- irssi: update to 1.4.2 and meson build
|
||||||
|
- ngrep: update to using pcre2
|
||||||
|
|
||||||
114
|
114
|
||||||
- iperf: update to 3.11
|
- iperf: update to 3.11
|
||||||
- nmap: update to 7.92 and HSTS
|
- nmap: update to 7.92 and HSTS
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
PKG_NAME="network-tools"
|
PKG_NAME="network-tools"
|
||||||
PKG_VERSION="1.0"
|
PKG_VERSION="1.0"
|
||||||
PKG_REV="114"
|
PKG_REV="115"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="https://libreelec.tv"
|
PKG_SITE="https://libreelec.tv"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user