mirror of
https://github.com/openwrt/packages.git
synced 2025-02-07 09:19:51 +00:00
Backport required patch for PCRE2 support and move to PCRE2 library as PCRE is now EOL and won't receive any security updates anymore. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
139 lines
4.9 KiB
Diff
139 lines
4.9 KiB
Diff
From 662426360b8d10202feabdcd3515d64ea8833798 Mon Sep 17 00:00:00 2001
|
|
From: Fabian Keil <fk@fabiankeil.de>
|
|
Date: Tue, 11 Jul 2023 06:22:16 +0200
|
|
Subject: [PATCH] Add regex_matches() to reduce HAVE_PCRE2 ifdefs
|
|
|
|
---
|
|
actions.c | 12 ++----------
|
|
client-tags.c | 6 +-----
|
|
urlmatch.c | 39 ++++++++++++++++++++++++++-------------
|
|
urlmatch.h | 4 +---
|
|
4 files changed, 30 insertions(+), 31 deletions(-)
|
|
|
|
--- a/actions.c
|
|
+++ b/actions.c
|
|
@@ -828,12 +828,8 @@ int update_action_bits_for_tag(struct cl
|
|
continue;
|
|
}
|
|
|
|
-#ifdef HAVE_PCRE2
|
|
- if (pcre2_pattern_matches(b->url->pattern.tag_regex, tag))
|
|
-#else
|
|
/* and check if one of the tag patterns matches the tag, */
|
|
- if (0 == regexec(b->url->pattern.tag_regex, tag, 0, NULL, 0))
|
|
-#endif
|
|
+ if (regex_matches(b->url->pattern.tag_regex, tag))
|
|
{
|
|
/* if it does, update the action bit map, */
|
|
if (merge_current_action(csp->action, b->action))
|
|
@@ -888,11 +884,7 @@ jb_err check_negative_tag_patterns(struc
|
|
}
|
|
for (tag = csp->tags->first; NULL != tag; tag = tag->next)
|
|
{
|
|
-#ifdef HAVE_PCRE2
|
|
- if (pcre2_pattern_matches(b->url->pattern.tag_regex, tag->str))
|
|
-#else
|
|
- if (0 == regexec(b->url->pattern.tag_regex, tag->str, 0, NULL, 0))
|
|
-#endif
|
|
+ if (regex_matches(b->url->pattern.tag_regex, tag->str))
|
|
{
|
|
/*
|
|
* The pattern matches at least one tag, thus the action
|
|
--- a/client-tags.c
|
|
+++ b/client-tags.c
|
|
@@ -659,11 +659,7 @@ int client_tag_match(const struct patter
|
|
|
|
for (tag = tags->first; tag != NULL; tag = tag->next)
|
|
{
|
|
-#ifdef HAVE_PCRE2
|
|
- if (pcre2_pattern_matches(pattern->pattern.tag_regex, tag->str))
|
|
-#else
|
|
- if (0 == regexec(pattern->pattern.tag_regex, tag->str, 0, NULL, 0))
|
|
-#endif
|
|
+ if (regex_matches(pattern->pattern.tag_regex, tag->str))
|
|
{
|
|
log_error(LOG_LEVEL_TAGGING, "Client tag '%s' matches.", tag->str);
|
|
return 1;
|
|
--- a/urlmatch.c
|
|
+++ b/urlmatch.c
|
|
@@ -1160,7 +1160,7 @@ static int simplematch(const char *patte
|
|
* Returns : TRUE for yes, FALSE otherwise.
|
|
*
|
|
*********************************************************************/
|
|
-int pcre2_pattern_matches(const pcre2_code *pattern, const char *string)
|
|
+static int pcre2_pattern_matches(const pcre2_code *pattern, const char *string)
|
|
{
|
|
PCRE2_SIZE offset;
|
|
int ret;
|
|
@@ -1191,6 +1191,29 @@ int pcre2_pattern_matches(const pcre2_co
|
|
|
|
/*********************************************************************
|
|
*
|
|
+ * Function : regex_matches
|
|
+ *
|
|
+ * Description : Checks if a compiled regex pattern matches a string
|
|
+ * using either pcre2 or pcre1 code.
|
|
+ *
|
|
+ * Parameters :
|
|
+ * 1 : pattern = The compiled pattern
|
|
+ * 2 : string = The string to check
|
|
+ *
|
|
+ * Returns : TRUE for yes, FALSE otherwise.
|
|
+ *
|
|
+ *********************************************************************/
|
|
+int regex_matches(const REGEX_TYPE *pattern, const char *string)
|
|
+{
|
|
+#ifdef HAVE_PCRE2
|
|
+ return pcre2_pattern_matches(pattern, string);
|
|
+#else
|
|
+ return (0 == regexec(pattern, string, 0, NULL, 0));
|
|
+#endif
|
|
+}
|
|
+
|
|
+/*********************************************************************
|
|
+ *
|
|
* Function : simple_domaincmp
|
|
*
|
|
* Description : Domain-wise Compare fqdn's. The comparison is
|
|
@@ -1483,13 +1506,7 @@ static int host_matches(const struct htt
|
|
if (pattern->pattern.url_spec.host_regex_type == PCRE_HOST_PATTERN)
|
|
{
|
|
return ((NULL == pattern->pattern.url_spec.host_regex)
|
|
-#ifdef HAVE_PCRE2
|
|
- || pcre2_pattern_matches(pattern->pattern.url_spec.host_regex,
|
|
- http->host));
|
|
-#else
|
|
- || (0 == regexec(pattern->pattern.url_spec.host_regex,
|
|
- http->host, 0, NULL, 0)));
|
|
-#endif
|
|
+ || regex_matches(pattern->pattern.url_spec.host_regex, http->host));
|
|
}
|
|
#endif
|
|
return ((NULL == pattern->pattern.url_spec.dbuffer) || (0 == domain_match(pattern, http)));
|
|
@@ -1512,11 +1529,7 @@ static int host_matches(const struct htt
|
|
static int path_matches(const char *path, const struct pattern_spec *pattern)
|
|
{
|
|
return ((NULL == pattern->pattern.url_spec.preg)
|
|
-#ifdef HAVE_PCRE2
|
|
- || (pcre2_pattern_matches(pattern->pattern.url_spec.preg, path)));
|
|
-#else
|
|
- || (0 == regexec(pattern->pattern.url_spec.preg, path, 0, NULL, 0)));
|
|
-#endif
|
|
+ || regex_matches(pattern->pattern.url_spec.preg, path));
|
|
}
|
|
|
|
|
|
--- a/urlmatch.h
|
|
+++ b/urlmatch.h
|
|
@@ -50,9 +50,7 @@ extern int url_requires_percent_encoding
|
|
extern int url_match(const struct pattern_spec *pattern,
|
|
const struct http_request *http);
|
|
|
|
-#ifdef HAVE_PCRE2
|
|
-extern int pcre2_pattern_matches(const pcre2_code *pattern, const char *string);
|
|
-#endif
|
|
+int regex_matches(const REGEX_TYPE *pattern, const char *string);
|
|
|
|
extern jb_err create_pattern_spec(struct pattern_spec *url, char *buf);
|
|
extern void free_pattern_spec(struct pattern_spec *url);
|