BUG/MAJOR: patterns: -i and -n are ignored for inlined patterns
These flags are only passed to pattern_read_from_file() which loads the patterns from a file. The functions used to parse the patterns from the current line do not provide the means to pass the pattern flags so they're lost. This issue was introduced in dev23 with the major pattern rework, and was reported by Graham Morley. No backport is needed.
This commit is contained in:
parent
3b78696858
commit
a631fc8de8
|
@ -183,7 +183,7 @@ struct pat_ref *pat_ref_new(const char *reference, const char *display, unsigned
|
||||||
struct pat_ref *pat_ref_newid(int unique_id, const char *display, unsigned int flags);
|
struct pat_ref *pat_ref_newid(int unique_id, const char *display, unsigned int flags);
|
||||||
struct pat_ref_elt *pat_ref_find_elt(struct pat_ref *ref, const char *key);
|
struct pat_ref_elt *pat_ref_find_elt(struct pat_ref *ref, const char *key);
|
||||||
int pat_ref_append(struct pat_ref *ref, char *pattern, char *sample, int line);
|
int pat_ref_append(struct pat_ref *ref, char *pattern, char *sample, int line);
|
||||||
int pat_ref_add(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
|
int pat_ref_add(struct pat_ref *ref, const char *pattern, const char *sample, int patflags, char **err);
|
||||||
int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
|
int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
|
||||||
int pat_ref_set_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt, const char *value, char **err);
|
int pat_ref_set_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt, const char *value, char **err);
|
||||||
int pat_ref_delete(struct pat_ref *ref, const char *key);
|
int pat_ref_delete(struct pat_ref *ref, const char *key);
|
||||||
|
|
|
@ -659,7 +659,7 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
|
||||||
/* Add sample to the reference, and try to compile it fior each pattern
|
/* Add sample to the reference, and try to compile it fior each pattern
|
||||||
* using this value.
|
* using this value.
|
||||||
*/
|
*/
|
||||||
if (!pat_ref_add(ref, arg, NULL, err))
|
if (!pat_ref_add(ref, arg, NULL, patflags, err))
|
||||||
goto out_free_expr;
|
goto out_free_expr;
|
||||||
args++;
|
args++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2055,9 +2055,9 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
|
||||||
/* Add value. */
|
/* Add value. */
|
||||||
err = NULL;
|
err = NULL;
|
||||||
if (appctx->ctx.map.display_flags == PAT_REF_MAP)
|
if (appctx->ctx.map.display_flags == PAT_REF_MAP)
|
||||||
ret = pat_ref_add(appctx->ctx.map.ref, args[3], args[4], &err);
|
ret = pat_ref_add(appctx->ctx.map.ref, args[3], args[4], 0, &err);
|
||||||
else
|
else
|
||||||
ret = pat_ref_add(appctx->ctx.map.ref, args[3], NULL, &err);
|
ret = pat_ref_add(appctx->ctx.map.ref, args[3], NULL, 0, &err);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
if (err)
|
if (err)
|
||||||
memprintf(&err, "%s.\n", err);
|
memprintf(&err, "%s.\n", err);
|
||||||
|
|
|
@ -1697,7 +1697,7 @@ int pat_ref_push(struct pat_ref_elt *elt, struct pattern_expr *expr,
|
||||||
*/
|
*/
|
||||||
int pat_ref_add(struct pat_ref *ref,
|
int pat_ref_add(struct pat_ref *ref,
|
||||||
const char *pattern, const char *sample,
|
const char *pattern, const char *sample,
|
||||||
char **err)
|
int patflags, char **err)
|
||||||
{
|
{
|
||||||
struct pat_ref_elt *elt;
|
struct pat_ref_elt *elt;
|
||||||
struct pattern_expr *expr;
|
struct pattern_expr *expr;
|
||||||
|
@ -1732,7 +1732,7 @@ int pat_ref_add(struct pat_ref *ref,
|
||||||
LIST_ADDQ(&ref->head, &elt->list);
|
LIST_ADDQ(&ref->head, &elt->list);
|
||||||
|
|
||||||
list_for_each_entry(expr, &ref->pat, list) {
|
list_for_each_entry(expr, &ref->pat, list) {
|
||||||
if (!pat_ref_push(elt, expr, 0, err)) {
|
if (!pat_ref_push(elt, expr, patflags, err)) {
|
||||||
/* If the insertion fails, try to delete all the added entries. */
|
/* If the insertion fails, try to delete all the added entries. */
|
||||||
pat_ref_delete_by_id(ref, elt);
|
pat_ref_delete_by_id(ref, elt);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -3260,7 +3260,7 @@ http_req_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
||||||
/* perform update */
|
/* perform update */
|
||||||
/* add entry only if it does not already exist */
|
/* add entry only if it does not already exist */
|
||||||
if (pat_ref_find_elt(ref, key) == NULL)
|
if (pat_ref_find_elt(ref, key) == NULL)
|
||||||
pat_ref_add(ref, key, NULL, NULL);
|
pat_ref_add(ref, key, NULL, 0, NULL);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3295,7 +3295,7 @@ http_req_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
||||||
pat_ref_set(ref, key, value, NULL);
|
pat_ref_set(ref, key, value, NULL);
|
||||||
else
|
else
|
||||||
/* insert a new entry */
|
/* insert a new entry */
|
||||||
pat_ref_add(ref, key, value, NULL);
|
pat_ref_add(ref, key, value, 0, NULL);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3441,7 +3441,7 @@ http_res_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
||||||
/* perform update */
|
/* perform update */
|
||||||
/* check if the entry already exists */
|
/* check if the entry already exists */
|
||||||
if (pat_ref_find_elt(ref, key) == NULL)
|
if (pat_ref_find_elt(ref, key) == NULL)
|
||||||
pat_ref_add(ref, key, NULL, NULL);
|
pat_ref_add(ref, key, NULL, 0, NULL);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3476,7 +3476,7 @@ http_res_get_intercept_rule(struct proxy *px, struct list *rules, struct session
|
||||||
pat_ref_set(ref, key, value, NULL);
|
pat_ref_set(ref, key, value, NULL);
|
||||||
else
|
else
|
||||||
/* insert a new entry */
|
/* insert a new entry */
|
||||||
pat_ref_add(ref, key, value, NULL);
|
pat_ref_add(ref, key, value, 0, NULL);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue