sipgrep: update to 2.2.0

Patch was upstreamed.

Reordered variables for consistency between packages.

Slight modification to configure argument.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
Rosen Penev 2024-04-20 18:30:27 -07:00
parent f5686f450d
commit 6fd05b1b05
2 changed files with 10 additions and 209 deletions

View File

@ -9,21 +9,21 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sipgrep
PKG_VERSION:=2.2.0
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=$(PKG_VERSION)
PKG_SOURCE_URL:=https://github.com/sipcapture/sipgrep
PKG_MIRROR_HASH:=4fe322d672d5c78160ddf0f0bf599a14b2fc504437262ad08a4003fe66f3e4b5
PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/sipcapture/sipgrep.git
PKG_SOURCE_VERSION:=1cc00079cd80310f7e8b1a696e9a02b8a2b25e04
PKG_SOURCE_DATE=2019-06-27
PKG_RELEASE:=3
PKG_MIRROR_HASH:=2c90b4e262be7270bcc9a2de975adbe8f67dee5ff0c30b397036f2e69229f515
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_CONFIG_DEPENDS:=CONFIG_IPV6
@ -44,7 +44,7 @@ troubleshoot SIP signaling over IP networks, allowing the user to
specify extended regular expressions matching against SIP headers.
endef
CONFIGURE_ARGS+=$(if $(CONFIG_IPV6),--enable-ipv6)
CONFIGURE_ARGS+=$(if $(CONFIG_IPV6),en,dis)able-ipv6
define Package/sipgrep/install
$(INSTALL_DIR) $(1)/usr/bin

View File

@ -1,199 +0,0 @@
From fea1a27f5fbef28243620fa66909d2d04c81e140 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Thu, 2 Nov 2023 21:16:07 +0100
Subject: [PATCH] Move to PCRE2 from PCRE
Move to PCRE2 as PCRE is EOL and won't receive any security updates
anymore.
Convert each function to PCRE2 equivalent and update configure.ac to
USE_PCRE2.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
configure.ac | 20 +++++++++---------
src/config.h.in | 4 ++--
src/sipgrep.c | 56 ++++++++++++++++++++++++++++++-------------------
3 files changed, 47 insertions(+), 33 deletions(-)
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ AC_ARG_ENABLE(ssl,
AC_MSG_RESULT([$SSL])
AC_SUBST([SSL])
-usePCRE=yes
-AC_SUBST([PCRE])
+usePCRE2=yes
+AC_SUBST([PCRE2])
useNCURSES=no
AC_MSG_CHECKING([whether to use ncurses])
@@ -169,15 +169,15 @@ AC_SUBST(PCAP_LIBS)
dnl
-dnl check for pcre library
+dnl check for pcre2 library
dnl
-# Checks for libpcre
-AC_CHECKING([for pcre Library and Header files])
-AC_CHECK_HEADER([pcre.h], ,AC_MSG_ERROR([Could not find pcre headers !]))
-AC_CHECK_LIB([pcre], [pcre_compile], ,[AC_MSG_ERROR([libpcre required])])
-AC_DEFINE(USE_PCRE, 1, [Use PCRE library])
-AC_SUBST(PCRE_LIBS)
+# Checks for libpcre2
+AC_CHECKING([for pcre2 Library and Header files])
+AC_CHECK_HEADER([pcre2.h], ,AC_MSG_ERROR([Could not find pcre2 headers !]), [#define PCRE2_CODE_UNIT_WIDTH 8])
+AC_CHECK_LIB([pcre2-8], [pcre2_compile_8], ,[AC_MSG_ERROR([libpcre2 required])])
+AC_DEFINE(USE_PCRE2, 1, [Use PCRE2 library])
+AC_SUBST(PCRE2_LIBS)
dnl
@@ -271,6 +271,6 @@ echo Ncurses support............. : $use
echo
echo Build with REDIS............ : $useRedis
-echo Build with PCRE............. : $usePCRE
+echo Build with PCRE............. : $usePCRE2
echo
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -152,8 +152,8 @@
/* Use NCURSES library */
#undef USE_NCURSES
-/* Use PCRE library */
-#undef USE_PCRE
+/* Use PCRE2 library */
+#undef USE_PCRE2
/* Use REDIS library */
#undef USE_REDIS
--- a/src/sipgrep.c
+++ b/src/sipgrep.c
@@ -88,7 +88,8 @@
#include <netdb.h>
-#include <pcre.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
/* reasambling */
#include "include/ipreasm.h"
@@ -149,17 +150,18 @@ struct statistics_table *statstable = NU
* GNU PCRE
*/
-int32_t err_offset;
-char *re_err = NULL;
+PCRE2_UCHAR re_err[128];
+PCRE2_SIZE err_offset;
+uint32_t err_code;
-pcre *pattern = NULL;
-pcre_extra *pattern_extra = NULL;
+pcre2_code *pattern = NULL;
/*
* Matching
*/
-char *match_data = NULL, *bin_data = NULL;
+PCRE2_SPTR match_data = NULL;
+char *bin_data = NULL;
uint16_t match_len = 0;
int8_t (*match_func) () = &blank_match_func;
@@ -550,13 +552,13 @@ main (int argc, char **argv)
if (match_data) {
- uint32_t pcre_options = PCRE_UNGREEDY;
+ uint32_t pcre2_options = PCRE2_UNGREEDY;
if (re_ignore_case)
- pcre_options |= PCRE_CASELESS;
+ pcre2_options |= PCRE2_CASELESS;
if (re_multiline_match)
- pcre_options |= PCRE_DOTALL;
+ pcre2_options |= PCRE2_DOTALL;
if (re_match_word) {
char *word_regex = malloc (strlen (match_data) * 3 + strlen (WORD_REGEX));
@@ -564,14 +566,21 @@ main (int argc, char **argv)
match_data = word_regex;
}
- pattern = pcre_compile (match_data, pcre_options, (const char **) &re_err, &err_offset, 0);
+ pattern = pcre2_compile (match_data, PCRE2_ZERO_TERMINATED, pcre2_options, &err_code, &err_offset, NULL);
if (!pattern) {
+ pcre2_get_error_message (err_code, re_err, 128);
fprintf (stderr, "compile failed: %s\n", re_err);
clean_exit (-1);
}
- pattern_extra = pcre_study (pattern, 0, (const char **) &re_err);
+ err_code = pcre2_jit_compile (pattern, PCRE2_JIT_COMPLETE);
+
+ if (err_code < 0) {
+ pcre2_get_error_message(err_code, re_err, 128);
+ fprintf (stderr, "compile failed: %s\n", re_err);
+ clean_exit (-1);
+ }
match_func = &re_match_func;
@@ -1653,21 +1662,28 @@ dump_packet (struct pcap_pkthdr *h, u_ch
int8_t
re_match_func (unsigned char *data, uint32_t len)
{
+ pcre2_match_data *match_data;
+
+ match_data = pcre2_match_data_create_from_pattern(pattern, NULL);
- switch (pcre_exec (pattern, 0, (char *)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:
+ switch (pcre2_match (pattern, (PCRE2_SPTR)data, len, 0, 0, match_data, 0)) {
+ case PCRE2_ERROR_NULL:
+ case PCRE2_ERROR_BADOPTION:
+ case PCRE2_ERROR_BADMAGIC:
+ case PCRE2_ERROR_INTERNAL:
+ case PCRE2_ERROR_NOMEMORY:
+ pcre2_match_data_free(match_data);
perror ("she's dead, jim\n");
clean_exit (-2);
break;
- case PCRE_ERROR_NOMATCH:
+ case PCRE2_ERROR_NOMATCH:
+ pcre2_match_data_free(match_data);
return 0;
}
+ pcre2_match_data_free(match_data);
+
if (max_matches)
matches++;
@@ -2125,9 +2141,7 @@ clean_exit (int32_t sig)
printf ("exit\n");
if (pattern)
- pcre_free (pattern);
- if (pattern_extra)
- pcre_free (pattern_extra);
+ pcre2_code_free (pattern);
if (bin_data)
free (bin_data);