MEDIUM: pattern_find_smp: functions find_smp uses the pat_ref_elt to find the element to be removed

The find_smp search the smp using the value of the pat_ref_elt pointer.

The pat_find_smp_* are no longer used. The function pattern_find_smp()
known all pattern indexation, and can be found
This commit is contained in:
Thierry FOURNIER 2014-01-29 16:24:55 +01:00 committed by Willy Tarreau
parent 7acca4b269
commit e369ca2e66
9 changed files with 174 additions and 347 deletions

View File

@ -74,20 +74,6 @@ void pat_del_list_ptr(struct pattern_expr *expr, struct pat_ref_elt *ref);
void pat_del_tree_str(struct pattern_expr *expr, struct pat_ref_elt *ref); void pat_del_tree_str(struct pattern_expr *expr, struct pat_ref_elt *ref);
void pat_del_list_reg(struct pattern_expr *expr, struct pat_ref_elt *ref); void pat_del_list_reg(struct pattern_expr *expr, struct pat_ref_elt *ref);
/*
*
* The following function lookup the pattern and return a pointer on the
* pointer containing the sample expression. This is useful to replace
* the sample.
*
*/
struct sample_storage **pat_find_smp_list_val(struct pattern_expr *expr, struct pattern *pattern);
struct sample_storage **pat_find_smp_tree_ip(struct pattern_expr *expr, struct pattern *pattern);
struct sample_storage **pat_find_smp_list_ptr(struct pattern_expr *expr, struct pattern *pattern);
struct sample_storage **pat_find_smp_tree_str(struct pattern_expr *expr, struct pattern *pattern);
struct sample_storage **pat_find_smp_list_str(struct pattern_expr *expr, struct pattern *pattern);
struct sample_storage **pat_find_smp_list_reg(struct pattern_expr *expr, struct pattern *pattern);
/* /*
* *
* The following functions clean all entries of a pattern expression and * The following functions clean all entries of a pattern expression and
@ -189,6 +175,7 @@ struct pat_ref *pat_ref_newid(int unique_id, const char *display, unsigned int f
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, char **err);
int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample); int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample);
int pat_ref_set_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt, const char *value);
int pat_ref_delete(struct pat_ref *ref, const char *key); int pat_ref_delete(struct pat_ref *ref, const char *key);
int pat_ref_delete_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt); int pat_ref_delete_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt);
void pat_ref_prune(struct pat_ref *ref); void pat_ref_prune(struct pat_ref *ref);
@ -207,7 +194,7 @@ int pattern_read_from_file(struct pattern_head *head, unsigned int refflags, con
void pattern_init_expr(struct pattern_expr *expr); void pattern_init_expr(struct pattern_expr *expr);
struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_ref *ref); struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_ref *ref);
struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref, char **err); struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref, char **err);
struct sample_storage **pattern_find_smp(const char *key, struct pattern_expr *expr, char **err); struct sample_storage **pattern_find_smp(struct pattern_expr *expr, struct pat_ref_elt *elt);
int pattern_delete(struct pattern_expr *expr, struct pat_ref_elt *ref); int pattern_delete(struct pattern_expr *expr, struct pat_ref_elt *ref);

View File

@ -95,7 +95,6 @@ struct acl_keyword {
int (*parse)(const char *text, struct pattern *pattern, char **err); int (*parse)(const char *text, struct pattern *pattern, char **err);
int (*index)(struct pattern_expr *expr, struct pattern *pattern, char **err); int (*index)(struct pattern_expr *expr, struct pattern *pattern, char **err);
void (*delete)(struct pattern_expr *expr, struct pat_ref_elt *); void (*delete)(struct pattern_expr *expr, struct pat_ref_elt *);
struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
void (*prune)(struct pattern_expr *expr); void (*prune)(struct pattern_expr *expr);
struct pattern *(*match)(struct sample *smp, struct pattern_expr *expr, int fill); struct pattern *(*match)(struct sample *smp, struct pattern_expr *expr, int fill);
/* must be after the config params */ /* must be after the config params */

View File

@ -208,7 +208,6 @@ struct pattern_head {
int (*parse_smp)(const char *text, struct sample_storage *smp); int (*parse_smp)(const char *text, struct sample_storage *smp);
int (*index)(struct pattern_expr *, struct pattern *, char **); int (*index)(struct pattern_expr *, struct pattern *, char **);
void (*delete)(struct pattern_expr *, struct pat_ref_elt *); void (*delete)(struct pattern_expr *, struct pat_ref_elt *);
struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
void (*prune)(struct pattern_expr *); void (*prune)(struct pattern_expr *);
struct pattern *(*match)(struct sample *, struct pattern_expr *, int); struct pattern *(*match)(struct sample *, struct pattern_expr *, int);
int expect_type; /* type of the expected sample (SMP_T_*) */ int expect_type; /* type of the expected sample (SMP_T_*) */
@ -220,7 +219,6 @@ extern char *pat_match_names[PAT_MATCH_NUM];
extern int (*pat_parse_fcts[PAT_MATCH_NUM])(const char *, struct pattern *, char **); extern int (*pat_parse_fcts[PAT_MATCH_NUM])(const char *, struct pattern *, char **);
extern int (*pat_index_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *, char **); extern int (*pat_index_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *, char **);
extern void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pat_ref_elt *); extern void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pat_ref_elt *);
extern struct sample_storage **(*pat_find_smp_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *);
void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *); void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *);
extern struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern_expr *, int); extern struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern_expr *, int);
extern int pat_match_types[PAT_MATCH_NUM]; extern int pat_match_types[PAT_MATCH_NUM];

View File

@ -362,7 +362,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
expr->pat.match = aclkw ? aclkw->match : NULL; expr->pat.match = aclkw ? aclkw->match : NULL;
expr->pat.delete = aclkw ? aclkw->delete : NULL; expr->pat.delete = aclkw ? aclkw->delete : NULL;
expr->pat.prune = aclkw ? aclkw->prune : NULL; expr->pat.prune = aclkw ? aclkw->prune : NULL;
expr->pat.find_smp = aclkw ? aclkw->find_smp : NULL;
expr->pat.expect_type = smp->fetch->out_type; expr->pat.expect_type = smp->fetch->out_type;
expr->smp = smp; expr->smp = smp;
smp = NULL; smp = NULL;
@ -377,7 +376,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
expr->pat.match = pat_match_fcts[PAT_MATCH_BOOL]; expr->pat.match = pat_match_fcts[PAT_MATCH_BOOL];
expr->pat.delete = pat_delete_fcts[PAT_MATCH_BOOL]; expr->pat.delete = pat_delete_fcts[PAT_MATCH_BOOL];
expr->pat.prune = pat_prune_fcts[PAT_MATCH_BOOL]; expr->pat.prune = pat_prune_fcts[PAT_MATCH_BOOL];
expr->pat.find_smp = pat_find_smp_fcts[PAT_MATCH_BOOL];
expr->pat.expect_type = pat_match_types[PAT_MATCH_BOOL]; expr->pat.expect_type = pat_match_types[PAT_MATCH_BOOL];
break; break;
case SMP_T_SINT: case SMP_T_SINT:
@ -387,7 +385,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
expr->pat.match = pat_match_fcts[PAT_MATCH_INT]; expr->pat.match = pat_match_fcts[PAT_MATCH_INT];
expr->pat.delete = pat_delete_fcts[PAT_MATCH_INT]; expr->pat.delete = pat_delete_fcts[PAT_MATCH_INT];
expr->pat.prune = pat_prune_fcts[PAT_MATCH_INT]; expr->pat.prune = pat_prune_fcts[PAT_MATCH_INT];
expr->pat.find_smp = pat_find_smp_fcts[PAT_MATCH_INT];
expr->pat.expect_type = pat_match_types[PAT_MATCH_INT]; expr->pat.expect_type = pat_match_types[PAT_MATCH_INT];
break; break;
case SMP_T_IPV4: case SMP_T_IPV4:
@ -397,7 +394,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
expr->pat.match = pat_match_fcts[PAT_MATCH_IP]; expr->pat.match = pat_match_fcts[PAT_MATCH_IP];
expr->pat.delete = pat_delete_fcts[PAT_MATCH_IP]; expr->pat.delete = pat_delete_fcts[PAT_MATCH_IP];
expr->pat.prune = pat_prune_fcts[PAT_MATCH_IP]; expr->pat.prune = pat_prune_fcts[PAT_MATCH_IP];
expr->pat.find_smp = pat_find_smp_fcts[PAT_MATCH_IP];
expr->pat.expect_type = pat_match_types[PAT_MATCH_IP]; expr->pat.expect_type = pat_match_types[PAT_MATCH_IP];
break; break;
} }
@ -484,7 +480,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
expr->pat.match = pat_match_fcts[idx]; expr->pat.match = pat_match_fcts[idx];
expr->pat.delete = pat_delete_fcts[idx]; expr->pat.delete = pat_delete_fcts[idx];
expr->pat.prune = pat_prune_fcts[idx]; expr->pat.prune = pat_prune_fcts[idx];
expr->pat.find_smp = pat_find_smp_fcts[idx];
expr->pat.expect_type = pat_match_types[idx]; expr->pat.expect_type = pat_match_types[idx];
args++; args++;
} }

View File

@ -259,7 +259,6 @@ static int sample_load_map(struct arg *arg, struct sample_conv *conv, char **err
desc->pat.index = pat_index_fcts[conv->private]; desc->pat.index = pat_index_fcts[conv->private];
desc->pat.delete = pat_delete_fcts[conv->private]; desc->pat.delete = pat_delete_fcts[conv->private];
desc->pat.prune = pat_prune_fcts[conv->private]; desc->pat.prune = pat_prune_fcts[conv->private];
desc->pat.find_smp = pat_find_smp_fcts[conv->private];
desc->pat.expect_type = pat_match_types[conv->private]; desc->pat.expect_type = pat_match_types[conv->private];
/* Set the output parse method. */ /* Set the output parse method. */

View File

@ -88,23 +88,6 @@ void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pat_ref_elt
[PAT_MATCH_REG] = pat_del_list_reg, [PAT_MATCH_REG] = pat_del_list_reg,
}; };
struct sample_storage **(*pat_find_smp_fcts[PAT_MATCH_NUM])(struct pattern_expr *,
struct pattern *) = {
[PAT_MATCH_FOUND] = pat_find_smp_list_val,
[PAT_MATCH_BOOL] = pat_find_smp_list_val,
[PAT_MATCH_INT] = pat_find_smp_list_val,
[PAT_MATCH_IP] = pat_find_smp_tree_ip,
[PAT_MATCH_BIN] = pat_find_smp_list_ptr,
[PAT_MATCH_LEN] = pat_find_smp_list_val,
[PAT_MATCH_STR] = pat_find_smp_tree_str,
[PAT_MATCH_BEG] = pat_find_smp_list_str,
[PAT_MATCH_SUB] = pat_find_smp_list_str,
[PAT_MATCH_DIR] = pat_find_smp_list_str,
[PAT_MATCH_DOM] = pat_find_smp_list_str,
[PAT_MATCH_END] = pat_find_smp_list_str,
[PAT_MATCH_REG] = pat_find_smp_list_reg,
};
void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *) = { void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *) = {
[PAT_MATCH_FOUND] = pat_prune_val, [PAT_MATCH_FOUND] = pat_prune_val,
[PAT_MATCH_BOOL] = pat_prune_val, [PAT_MATCH_BOOL] = pat_prune_val,
@ -1174,189 +1157,6 @@ int pat_idx_tree_str(struct pattern_expr *expr, struct pattern *pat, char **err)
return 1; return 1;
} }
struct sample_storage **pat_find_smp_list_val(struct pattern_expr *expr, struct pattern *pattern)
{
struct pattern_list *pat;
struct pattern_list *safe;
list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
/* Check equality. */
if (pattern->val.range.min_set != pat->pat.val.range.min_set)
continue;
if (pattern->val.range.max_set != pat->pat.val.range.max_set)
continue;
if (pattern->val.range.min_set &&
pattern->val.range.min != pat->pat.val.range.min)
continue;
if (pattern->val.range.max_set &&
pattern->val.range.max != pat->pat.val.range.max)
continue;
/* Return the pointer on the sample pointer. */
return &pat->pat.smp;
}
return NULL;
}
struct sample_storage **pat_find_smp_tree_ip(struct pattern_expr *expr, struct pattern *pattern)
{
struct ebmb_node *node, *next_node;
struct pattern_tree *elt;
struct pattern_list *pat;
struct pattern_list *safe;
unsigned int mask;
/* browse each node of the tree for IPv4 addresses. */
if (pattern->type == SMP_T_IPV4) {
/* Convert mask. If the mask is contiguous, browse each node
* of the tree for IPv4 addresses.
*/
mask = ntohl(pattern->val.ipv4.mask.s_addr);
if (mask + (mask & -mask) == 0) {
mask = mask ? 33 - flsnz(mask & -mask) : 0; /* equals cidr value */
for (node = ebmb_first(&expr->pattern_tree), next_node = ebmb_next(node);
node;
node = next_node, next_node = next_node ? ebmb_next(next_node) : NULL) {
/* Extract container of the tree node. */
elt = container_of(node, struct pattern_tree, node);
/* Check equality. */
if (strcmp(pattern->ptr.str, (char *)elt->node.key) != 0)
continue;
/* Return the pointer on the sample pointer. */
return &elt->smp;
}
}
else {
/* Browse each node of the list for IPv4 addresses. */
list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
/* Check equality. */
if (memcmp(&pattern->val.ipv4.addr, &pat->pat.val.ipv4.addr,
sizeof(pat->pat.val.ipv4.addr)) != 0)
continue;
if (memcmp(&pattern->val.ipv4.mask, &pat->pat.val.ipv4.mask,
sizeof(pat->pat.val.ipv4.addr)) != 0)
continue;
/* Return the pointer on the sample pointer. */
return &pat->pat.smp;
}
}
}
else if (pattern->type == SMP_T_IPV6) {
/* browse each node of the tree for IPv4 addresses. */
for (node = ebmb_first(&expr->pattern_tree_2), next_node = ebmb_next(node);
node;
node = next_node, next_node = next_node ? ebmb_next(next_node) : NULL) {
/* Extract container of the tree node. */
elt = container_of(node, struct pattern_tree, node);
/* Check equality. */
if (strcmp(pattern->ptr.str, (char *)elt->node.key) != 0)
continue;
/* Return the pointer on the sample pointer. */
return &elt->smp;
}
}
return NULL;
}
struct sample_storage **pat_find_smp_list_ptr(struct pattern_expr *expr, struct pattern *pattern)
{
struct pattern_list *pat;
struct pattern_list *safe;
list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
/* Check equality. */
if (pattern->len != pat->pat.len)
continue;
if (memcmp(pattern->ptr.ptr, pat->pat.ptr.ptr, pat->pat.len) != 0)
continue;
/* Return the pointer on the sample pointer. */
return &pat->pat.smp;
}
return NULL;
}
struct sample_storage **pat_find_smp_tree_str(struct pattern_expr *expr, struct pattern *pattern)
{
struct ebmb_node *node, *next_node;
struct pattern_tree *elt;
/* browse each node of the tree. */
for (node = ebmb_first(&expr->pattern_tree), next_node = ebmb_next(node);
node;
node = next_node, next_node = next_node ? ebmb_next(next_node) : NULL) {
/* Extract container of the tree node. */
elt = container_of(node, struct pattern_tree, node);
/* Check equality. */
if (strcmp(pattern->ptr.str, (char *)elt->node.key) != 0)
continue;
/* Return the pointer on the sample pointer. */
return &elt->smp;
}
return NULL;
}
struct sample_storage **pat_find_smp_list_str(struct pattern_expr *expr, struct pattern *pattern)
{
struct pattern_list *pat;
struct pattern_list *safe;
list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
/* Check equality. */
if (pattern->len != pat->pat.len)
continue;
if (pat->pat.flags & PAT_F_IGNORE_CASE) {
if (strncasecmp(pattern->ptr.str, pat->pat.ptr.str, pat->pat.len) != 0)
continue;
}
else {
if (strncmp(pattern->ptr.str, pat->pat.ptr.str, pat->pat.len) != 0)
continue;
}
/* Return the pointer on the sample pointer. */
return &pat->pat.smp;
}
return NULL;
}
struct sample_storage **pat_find_smp_list_reg(struct pattern_expr *expr, struct pattern *pattern)
{
struct pattern_list *pat;
struct pattern_list *safe;
list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
/* Check equality. */
if (pat->pat.flags & PAT_F_IGNORE_CASE) {
if (strcasecmp(pattern->ptr.reg->regstr, pat->pat.ptr.reg->regstr) != 0)
continue;
}
else {
if (strcmp(pattern->ptr.reg->regstr, pat->pat.ptr.reg->regstr) != 0)
continue;
}
/* Return the pointer on the sample pointer. */
return &pat->pat.smp;
}
return NULL;
}
void pat_del_list_val(struct pattern_expr *expr, struct pat_ref_elt *ref) void pat_del_list_val(struct pattern_expr *expr, struct pat_ref_elt *ref)
{ {
struct pattern_list *pat; struct pattern_list *pat;
@ -1595,39 +1395,68 @@ int pat_ref_delete(struct pat_ref *ref, const char *key)
return 1; return 1;
} }
/* This function modify the sample of the first pattern that match the <key>. */ /* This function modify the sample of the first pattern that match the <key>. */
int pat_ref_set(struct pat_ref *ref, const char *key, const char *value) static inline int pat_ref_set_elt(struct pat_ref *ref, struct pat_ref_elt *elt,
const char *value)
{ {
struct pattern_expr *expr; struct pattern_expr *expr;
struct pat_ref_elt *elt;
struct sample_storage **smp; struct sample_storage **smp;
char *sample; char *sample;
int found = 0; int ret = 1;
/* modify pattern from reference */ /* Modify pattern from reference. */
list_for_each_entry(elt, &ref->head, list) { sample = strdup(value);
if (strcmp(key, elt->pattern) == 0) { if (!sample)
sample = strdup(value); return 0;
if (!sample) free(elt->sample);
return 0; elt->sample = sample;
free(elt->sample);
elt->sample = sample; /* Load sample in each reference. */
found = 1; list_for_each_entry(expr, &ref->pat, list) {
break; if (!expr->pat_head->parse_smp)
continue;
smp = pattern_find_smp(expr, elt);
if (smp && *smp) {
if (!expr->pat_head->parse_smp(sample, *smp)) {
*smp = NULL;
ret = 0;
}
} }
} }
if (!found) return ret;
return 0; }
list_for_each_entry(expr, &ref->pat, list) { /* This function modify the sample of the first pattern that match the <key>. */
smp = pattern_find_smp(key, expr, NULL); int pat_ref_set_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt, const char *value)
if (smp && expr->pat_head->parse_smp) {
if (!expr->pat_head->parse_smp(value, *smp)) struct pat_ref_elt *elt;
*smp = NULL;
/* Look for pattern in the reference. */
list_for_each_entry(elt, &ref->head, list) {
if (elt == refelt) {
pat_ref_set_elt(ref, elt, value);
return 1;
}
} }
return 0;
}
return 1; /* This function modify the sample of the first pattern that match the <key>. */
int pat_ref_set(struct pat_ref *ref, const char *key, const char *value)
{
struct pat_ref_elt *elt;
int ret = 0;
/* Look for pattern in the reference. */
list_for_each_entry(elt, &ref->head, list) {
if (strcmp(key, elt->pattern) == 0) {
pat_ref_set_elt(ref, elt, value);
ret = 1;
}
}
return ret;
} }
/* This function create new reference. <ref> is the reference name. /* This function create new reference. <ref> is the reference name.
@ -2125,13 +1954,33 @@ void pattern_prune(struct pattern_head *head)
* the function returns NULL. If the key cannot be parsed, the function * the function returns NULL. If the key cannot be parsed, the function
* fill <err>. * fill <err>.
*/ */
struct sample_storage **pattern_find_smp(const char *key, struct pattern_expr *expr, char **err) struct sample_storage **pattern_find_smp(struct pattern_expr *expr, struct pat_ref_elt *ref)
{ {
struct pattern pattern; struct ebmb_node *node;
struct pattern_tree *elt;
struct pattern_list *pat;
if (!expr->pat_head->parse(key, &pattern, err)) for (node = ebmb_first(&expr->pattern_tree);
return NULL; node;
return expr->pat_head->find_smp(expr, &pattern); node = ebmb_next(node)) {
elt = container_of(node, struct pattern_tree, node);
if (elt->ref == ref)
return &elt->smp;
}
for (node = ebmb_first(&expr->pattern_tree_2);
node;
node = ebmb_next(node)) {
elt = container_of(node, struct pattern_tree, node);
if (elt->ref == ref)
return &elt->smp;
}
list_for_each_entry(pat, &expr->patterns, list)
if (pat->pat.ref == ref)
return &pat->pat.smp;
return NULL;
} }
/* This function search all the pattern matching the <key> and delete it. /* This function search all the pattern matching the <key> and delete it.

View File

@ -681,13 +681,13 @@ static struct sample_fetch_kw_list smp_kws = {ILH, {
* Please take care of keeping this list alphabetically sorted. * Please take care of keeping this list alphabetically sorted.
*/ */
static struct acl_kw_list acl_kws = {ILH, { static struct acl_kw_list acl_kws = {ILH, {
{ "payload", "req.payload", pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_find_smp_list_ptr, pat_prune_ptr, pat_match_bin }, { "payload", "req.payload", pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_prune_ptr, pat_match_bin },
{ "payload_lv", "req.payload_lv", pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_find_smp_list_ptr, pat_prune_ptr, pat_match_bin }, { "payload_lv", "req.payload_lv", pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_prune_ptr, pat_match_bin },
{ "req_rdp_cookie", "req.rdp_cookie", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "req_rdp_cookie", "req.rdp_cookie", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "req_rdp_cookie_cnt", "req.rdp_cookie_cnt", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_int }, { "req_rdp_cookie_cnt", "req.rdp_cookie_cnt", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_int },
{ "req_ssl_sni", "req.ssl_sni", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "req_ssl_sni", "req.ssl_sni", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "req_ssl_ver", "req.ssl_ver", pat_parse_dotted_ver, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_int }, { "req_ssl_ver", "req.ssl_ver", pat_parse_dotted_ver, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_int },
{ "req.ssl_ver", "req.ssl_ver", pat_parse_dotted_ver, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_int }, { "req.ssl_ver", "req.ssl_ver", pat_parse_dotted_ver, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_int },
{ /* END */ }, { /* END */ },
}}; }};

View File

@ -10359,84 +10359,84 @@ static int sample_conv_http_date(const struct arg *args, struct sample *smp)
* Please take care of keeping this list alphabetically sorted. * Please take care of keeping this list alphabetically sorted.
*/ */
static struct acl_kw_list acl_kws = {ILH, { static struct acl_kw_list acl_kws = {ILH, {
{ "base", "base", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "base", "base", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "base_beg", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "base_beg", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "base_dir", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "base_dir", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "base_dom", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "base_dom", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "base_end", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "base_end", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "base_len", "base", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "base_len", "base", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "base_reg", "base", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "base_reg", "base", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "base_sub", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "base_sub", "base", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "cook", "req.cook", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "cook", "req.cook", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "cook_beg", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "cook_beg", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "cook_dir", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "cook_dir", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "cook_dom", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "cook_dom", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "cook_end", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "cook_end", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "cook_len", "req.cook", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "cook_len", "req.cook", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "cook_reg", "req.cook", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "cook_reg", "req.cook", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "cook_sub", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "cook_sub", "req.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "hdr", "req.hdr", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "hdr", "req.hdr", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "hdr_beg", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "hdr_beg", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "hdr_dir", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "hdr_dir", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "hdr_dom", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "hdr_dom", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "hdr_end", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "hdr_end", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "hdr_len", "req.hdr", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "hdr_len", "req.hdr", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "hdr_reg", "req.hdr", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "hdr_reg", "req.hdr", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "hdr_sub", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "hdr_sub", "req.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "http_auth_group", NULL, pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_auth }, { "http_auth_group", NULL, pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_auth },
{ "method", NULL, pat_parse_meth, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_meth }, { "method", NULL, pat_parse_meth, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_meth },
{ "path", "path", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "path", "path", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "path_beg", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "path_beg", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "path_dir", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "path_dir", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "path_dom", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "path_dom", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "path_end", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "path_end", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "path_len", "path", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "path_len", "path", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "path_reg", "path", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "path_reg", "path", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "path_sub", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "path_sub", "path", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "req_ver", "req.ver", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "req_ver", "req.ver", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "resp_ver", "res.ver", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "resp_ver", "res.ver", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "scook", "res.cook", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "scook", "res.cook", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "scook_beg", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "scook_beg", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "scook_dir", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "scook_dir", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "scook_dom", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "scook_dom", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "scook_end", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "scook_end", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "scook_len", "res.cook", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "scook_len", "res.cook", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "scook_reg", "res.cook", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "scook_reg", "res.cook", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "scook_sub", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "scook_sub", "res.cook", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "shdr", "res.hdr", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "shdr", "res.hdr", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "shdr_beg", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "shdr_beg", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "shdr_dir", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "shdr_dir", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "shdr_dom", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "shdr_dom", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "shdr_end", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "shdr_end", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "shdr_len", "res.hdr", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "shdr_len", "res.hdr", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "shdr_reg", "res.hdr", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "shdr_reg", "res.hdr", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "shdr_sub", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "shdr_sub", "res.hdr", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "url", "url", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "url", "url", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "url_beg", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "url_beg", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "url_dir", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "url_dir", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "url_dom", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "url_dom", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "url_end", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "url_end", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "url_len", "url", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "url_len", "url", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "url_reg", "url", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "url_reg", "url", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "url_sub", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "url_sub", "url", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ "urlp", "urlp", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "urlp", "urlp", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "urlp_beg", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_beg }, { "urlp_beg", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_beg },
{ "urlp_dir", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dir }, { "urlp_dir", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dir },
{ "urlp_dom", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_dom }, { "urlp_dom", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_dom },
{ "urlp_end", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "urlp_end", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "urlp_len", "urlp", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_find_smp_list_val, pat_prune_val, pat_match_len }, { "urlp_len", "urlp", pat_parse_int, pat_idx_list_val, pat_del_list_val, pat_prune_val, pat_match_len },
{ "urlp_reg", "urlp", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "urlp_reg", "urlp", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ "urlp_sub", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_sub }, { "urlp_sub", "urlp", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_sub },
{ /* END */ }, { /* END */ },
}}; }};

View File

@ -3546,31 +3546,31 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
* Please take care of keeping this list alphabetically sorted. * Please take care of keeping this list alphabetically sorted.
*/ */
static struct acl_kw_list acl_kws = {ILH, { static struct acl_kw_list acl_kws = {ILH, {
{ "ssl_c_i_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_i_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_key_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_key_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_notafter", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_notafter", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_notbefore", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_notbefore", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_sig_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_sig_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_s_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_c_s_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_c_serial", NULL, pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_find_smp_list_ptr, pat_prune_ptr, pat_match_bin }, { "ssl_c_serial", NULL, pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_prune_ptr, pat_match_bin },
{ "ssl_f_i_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_i_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_key_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_key_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_notafter", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_notafter", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_notbefore", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_notbefore", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_sig_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_sig_alg", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_s_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_f_s_dn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_f_serial", NULL, pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_find_smp_list_ptr, pat_prune_ptr, pat_match_bin }, { "ssl_f_serial", NULL, pat_parse_bin, pat_idx_list_ptr, pat_del_list_ptr, pat_prune_ptr, pat_match_bin },
{ "ssl_fc_cipher", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_fc_cipher", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
#ifdef OPENSSL_NPN_NEGOTIATED #ifdef OPENSSL_NPN_NEGOTIATED
{ "ssl_fc_npn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_fc_npn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
#endif #endif
#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
{ "ssl_fc_alpn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_fc_alpn", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
#endif #endif
{ "ssl_fc_protocol", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_fc_protocol", NULL, pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_fc_sni", "ssl_fc_sni", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_find_smp_tree_str, pat_prune_ptr, pat_match_str }, { "ssl_fc_sni", "ssl_fc_sni", pat_parse_str, pat_idx_tree_str, pat_del_tree_str, pat_prune_ptr, pat_match_str },
{ "ssl_fc_sni_end", "ssl_fc_sni", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_find_smp_list_str, pat_prune_ptr, pat_match_end }, { "ssl_fc_sni_end", "ssl_fc_sni", pat_parse_str, pat_idx_list_str, pat_del_list_ptr, pat_prune_ptr, pat_match_end },
{ "ssl_fc_sni_reg", "ssl_fc_sni", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_find_smp_list_reg, pat_prune_reg, pat_match_reg }, { "ssl_fc_sni_reg", "ssl_fc_sni", pat_parse_reg, pat_idx_list_reg, pat_del_list_reg, pat_prune_reg, pat_match_reg },
{ /* END */ }, { /* END */ },
}}; }};