]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MAJOR: acl: make all ACLs reference the fetch function via a sample.
authorWilly Tarreau <w@1wt.eu>
Fri, 11 Jan 2013 14:49:37 +0000 (15:49 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 3 Apr 2013 00:12:58 +0000 (02:12 +0200)
ACL fetch functions used to directly reference a fetch function. Now
that all ACL fetches have their sample fetches equivalent, we can make
ACLs reference a sample fetch keyword instead.

In order to simplify the code, a sample keyword name may be NULL if it
is the same as the ACL's, which is the most common case.

A minor change appeared, http_auth always expects one argument though
the ACL allowed it to be missing and reported as such afterwards, so
fix the ACL to match this. This is not really a bug.

13 files changed:
include/proto/acl.h
include/proto/sample.h
include/types/acl.h
src/acl.c
src/backend.c
src/frontend.c
src/haproxy.c
src/listener.c
src/payload.c
src/proto_http.c
src/proto_tcp.c
src/session.c
src/ssl_sock.c

index 569136a4f2ef28eef221cef708b51f13f13681b5..58591ab9dd28d0d92f07ef130bb45336ff963a47 100644 (file)
@@ -124,6 +124,11 @@ void acl_register_keywords(struct acl_kw_list *kwl);
  */
 void acl_unregister_keywords(struct acl_kw_list *kwl);
 
+/* initializes ACLs by resolving the sample fetch names they rely upon.
+ * Returns 0 on success, otherwise an error.
+ */
+int init_acl();
+
 
 /*
  *
index 3137948afd2cfbd3a0f6e8b065bed8fe7cfcff58..036ac7684dd77504cfd774e548562fd6bc4a1150 100644 (file)
@@ -35,5 +35,6 @@ struct sample *sample_fetch_string(struct proxy *px, struct session *l4, void *l
 void sample_register_fetches(struct sample_fetch_kw_list *psl);
 void sample_register_convs(struct sample_conv_kw_list *psl);
 const char *sample_src_names(unsigned int use);
+struct sample_fetch *find_sample_fetch(const char *kw, int len);
 
 #endif /* _PROTO_SAMPLE_H */
index 0cdcef27d883cb091edc3b205bf4aeaa4457ec3a..fb457ca3eb05f197e7b29a87888debad02ee9e71 100644 (file)
@@ -233,14 +233,14 @@ struct session;
 struct acl_expr;
 struct acl_keyword {
        const char *kw;
+       char *fetch_kw;
        int (*parse)(const char **text, struct acl_pattern *pattern, int *opaque, char **err);
-       int (*fetch)(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
-                    const struct arg *args, struct sample *smp);
        int (*match)(struct sample *smp, struct acl_pattern *pattern);
        unsigned int requires;   /* bit mask of all ACL_USE_* required to evaluate this keyword */
        int arg_mask; /* mask describing up to 7 arg types */
        int (*val_args)(struct arg *arg_p, char **err_msg);  /* argument validation function */
        /* must be after the config params */
+       struct sample_fetch *smp; /* the sample fetch we depend on */
        int use_cnt;
 };
 
index fe5c869b68fda2833c17399ba049abbdc67b44a6..8e6f97ae7ce9d9a32aba1771d07f3e1aa6d203fe 100644 (file)
--- a/src/acl.c
+++ b/src/acl.c
@@ -27,6 +27,7 @@
 #include <proto/channel.h>
 #include <proto/log.h>
 #include <proto/proxy.h>
+#include <proto/sample.h>
 #include <proto/stick_table.h>
 
 #include <ebsttree.h>
@@ -1583,7 +1584,7 @@ int acl_exec_cond(struct acl_cond *cond, struct proxy *px, struct session *l4, v
                                /* we need to reset context and flags */
                                memset(&smp, 0, sizeof(smp));
                        fetch_next:
-                               if (!expr->kw->fetch(px, l4, l7, opt, expr->args, &smp)) {
+                               if (!expr->kw->smp->process(px, l4, l7, opt, expr->args, &smp)) {
                                        /* maybe we could not fetch because of missing data */
                                        if (smp.flags & SMP_F_MAY_CHANGE && !(opt & SMP_OPT_FINAL))
                                                acl_res |= ACL_PAT_MISS;
@@ -1901,6 +1902,35 @@ acl_find_targets(struct proxy *p)
        return cfgerr;
 }
 
+/* initializes ACLs by resolving the sample fetch names they rely upon.
+ * Returns 0 on success, otherwise an error.
+ */
+int init_acl()
+{
+       int err = 0;
+       int index;
+       const char *name;
+       struct acl_kw_list *kwl;
+       struct sample_fetch *smp;
+
+       list_for_each_entry(kwl, &acl_keywords.list, list) {
+               for (index = 0; kwl->kw[index].kw != NULL; index++) {
+                       name = kwl->kw[index].fetch_kw;
+                       if (!name)
+                               name = kwl->kw[index].kw;
+
+                       smp = find_sample_fetch(name, strlen(name));
+                       if (!smp) {
+                               Alert("Critical internal error: ACL keyword '%s' relies on sample fetch '%s' which was not registered!\n",
+                                     kwl->kw[index].kw, name);
+                               err++;
+                               continue;
+                       }
+                       kwl->kw[index].smp = smp;
+               }
+       }
+       return err;
+}
 
 /************************************************************************/
 /*       All supported sample fetch functions must be declared here     */
@@ -1947,8 +1977,8 @@ static struct sample_fetch_kw_list smp_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "always_false", acl_parse_nothing, smp_fetch_false, acl_match_nothing, ACL_USE_NOTHING, 0 },
-       { "always_true",  acl_parse_nothing, smp_fetch_true,  acl_match_nothing, ACL_USE_NOTHING, 0 },
+       { "always_false", NULL, acl_parse_nothing, acl_match_nothing, ACL_USE_NOTHING, 0 },
+       { "always_true",  NULL, acl_parse_nothing, acl_match_nothing, ACL_USE_NOTHING, 0 },
        { /* END */ },
 }};
 
index 4c2d9e84e80a695a4dec760478c5c7f4260b2d6c..d0d132bcf3e4bfcc729b2af419fbd48133a5f8a5 100644 (file)
@@ -1599,17 +1599,17 @@ static struct sample_fetch_kw_list smp_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "avg_queue",     acl_parse_int,     smp_fetch_avg_queue_size, acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "be_conn",       acl_parse_int,     smp_fetch_be_conn,        acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "be_id",         acl_parse_int,     smp_fetch_be_id,          acl_match_int,     ACL_USE_NOTHING,      0           },
-       { "be_sess_rate",  acl_parse_int,     smp_fetch_be_sess_rate,   acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "connslots",     acl_parse_int,     smp_fetch_connslots,      acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "nbsrv",         acl_parse_int,     smp_fetch_nbsrv,          acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "queue",         acl_parse_int,     smp_fetch_queue_size,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
-       { "srv_conn",      acl_parse_int,     smp_fetch_srv_conn,       acl_match_int,     ACL_USE_NOTHING,      ARG1(1,SRV) },
-       { "srv_id",        acl_parse_int,     smp_fetch_srv_id,         acl_match_int,     ACL_USE_RTR_INTERNAL, 0           },
-       { "srv_is_up",     acl_parse_nothing, smp_fetch_srv_is_up,      acl_match_nothing, ACL_USE_NOTHING,      ARG1(1,SRV) },
-       { "srv_sess_rate", acl_parse_int,     smp_fetch_srv_sess_rate,  acl_match_int,     ACL_USE_NOTHING,      ARG1(1,SRV) },
+       { "avg_queue",     NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "be_conn",       NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "be_id",         NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      0           },
+       { "be_sess_rate",  NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "connslots",     NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "nbsrv",         NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "queue",         NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,BE)  },
+       { "srv_conn",      NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,SRV) },
+       { "srv_id",        NULL, acl_parse_int,     acl_match_int,     ACL_USE_RTR_INTERNAL, 0           },
+       { "srv_is_up",     NULL, acl_parse_nothing, acl_match_nothing, ACL_USE_NOTHING,      ARG1(1,SRV) },
+       { "srv_sess_rate", NULL, acl_parse_int,     acl_match_int,     ACL_USE_NOTHING,      ARG1(1,SRV) },
        { /* END */ },
 }};
 
index d7b0939912f526b7523f368ef9f029ced6a557b2..589a541dcb46b22730bd7c103b351d853ae38673 100644 (file)
@@ -268,9 +268,9 @@ static struct sample_fetch_kw_list smp_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "fe_conn",      acl_parse_int, smp_fetch_fe_conn,      acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
-       { "fe_id",        acl_parse_int, smp_fetch_fe_id,        acl_match_int, ACL_USE_NOTHING, 0          },
-       { "fe_sess_rate", acl_parse_int, smp_fetch_fe_sess_rate, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
+       { "fe_conn",      NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
+       { "fe_id",        NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING, 0          },
+       { "fe_sess_rate", NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING, ARG1(1,FE) },
        { /* END */ },
 }};
 
index 1782bce385278bdbdc974a279c3943c5e43aa947..9cbec7ff428787bd655b40ca40c2394894efe8a6 100644 (file)
@@ -471,6 +471,8 @@ void init(int argc, char **argv)
        strftime(localtimezone, 6, "%z", &curtime);
 
        signal_init();
+       if (init_acl() != 0)
+               exit(1);
        init_task();
        init_session();
        init_connection();
index e9ce07e128ed615a264b199edddf7fef6cb91c2c..28c5bf038b16bf7b14a4e559263ecce248918fd4 100644 (file)
@@ -653,8 +653,8 @@ static struct sample_fetch_kw_list smp_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "dst_conn",   acl_parse_int,   smp_fetch_dconn,    acl_match_int, ACL_USE_NOTHING, 0 },
-       { "so_id",      acl_parse_int,   smp_fetch_so_id,    acl_match_int, ACL_USE_NOTHING, 0 },
+       { "dst_conn",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING, 0 },
+       { "so_id",     NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING, 0 },
        { /* END */ },
 }};
 
index 21d72a70b66dd48eb9fa0468bde36220eaaf9231..4a032ed37eb6763b19a3300020011dfa3e2483ef 100644 (file)
@@ -669,16 +669,16 @@ static struct sample_fetch_kw_list smp_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "payload",            acl_parse_str,        smp_fetch_payload,        acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG2(2,UINT,UINT),      val_payload },
-       { "payload_lv",         acl_parse_str,        smp_fetch_payload_lv,     acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG3(2,UINT,UINT,SINT), val_payload_lv },
-       { "rep_ssl_hello_type", acl_parse_int,        smp_fetch_ssl_hello_type, acl_match_int,     ACL_USE_L6RTR_VOLATILE, 0 },
-       { "req_len",            acl_parse_int,        smp_fetch_req_len,        acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
-       { "req_rdp_cookie",     acl_parse_str,        smp_fetch_rdp_cookie,     acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG1(0,STR) },
-       { "req_rdp_cookie_cnt", acl_parse_int,        smp_fetch_rdp_cookie_cnt, acl_match_int,     ACL_USE_L6REQ_VOLATILE, ARG1(0,STR) },
-       { "req_ssl_hello_type", acl_parse_int,        smp_fetch_ssl_hello_type, acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
-       { "req_ssl_sni",        acl_parse_str,        smp_fetch_ssl_hello_sni,  acl_match_str,     ACL_USE_L6REQ_VOLATILE, 0 },
-       { "req_ssl_ver",        acl_parse_dotted_ver, smp_fetch_req_ssl_ver,    acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
-       { "wait_end",           acl_parse_nothing,    smp_fetch_wait_end,       acl_match_nothing, ACL_USE_NOTHING, 0 },
+       { "payload",            NULL,             acl_parse_str,        acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG2(2,UINT,UINT),      val_payload },
+       { "payload_lv",         NULL,             acl_parse_str,        acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG3(2,UINT,UINT,SINT), val_payload_lv },
+       { "rep_ssl_hello_type", NULL,             acl_parse_int,        acl_match_int,     ACL_USE_L6RTR_VOLATILE, 0 },
+       { "req_len",            NULL,             acl_parse_int,        acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
+       { "req_rdp_cookie",     "rdp_cookie",     acl_parse_str,        acl_match_str,     ACL_USE_L6REQ_VOLATILE, ARG1(0,STR) },
+       { "req_rdp_cookie_cnt", "rdp_cookie_cnt", acl_parse_int,        acl_match_int,     ACL_USE_L6REQ_VOLATILE, ARG1(0,STR) },
+       { "req_ssl_hello_type", NULL,             acl_parse_int,        acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
+       { "req_ssl_sni",        NULL,             acl_parse_str,        acl_match_str,     ACL_USE_L6REQ_VOLATILE, 0 },
+       { "req_ssl_ver",        NULL,             acl_parse_dotted_ver, acl_match_int,     ACL_USE_L6REQ_VOLATILE, 0 },
+       { "wait_end",           NULL,             acl_parse_nothing,    acl_match_nothing, ACL_USE_NOTHING, 0 },
        { /* END */ },
 }};
 
index e11d2a7cb954c209751dc22a7d3a7e618295c651..d49b37c921b04e523c387b75914f27adc2e95ca4 100644 (file)
@@ -9522,106 +9522,106 @@ static int val_usr(struct arg *arg, char **err_msg)
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "base",            acl_parse_str,     smp_fetch_base,           acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_beg",        acl_parse_str,     smp_fetch_base,           acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_dir",        acl_parse_str,     smp_fetch_base,           acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_dom",        acl_parse_str,     smp_fetch_base,           acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_end",        acl_parse_str,     smp_fetch_base,           acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_len",        acl_parse_int,     smp_fetch_base,           acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_reg",        acl_parse_reg,     smp_fetch_base,           acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "base_sub",        acl_parse_str,     smp_fetch_base,           acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
-
-       { "cook",            acl_parse_str,     smp_fetch_cookie,         acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_beg",        acl_parse_str,     smp_fetch_cookie,         acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_cnt",        acl_parse_int,     smp_fetch_cookie_cnt,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_dir",        acl_parse_str,     smp_fetch_cookie,         acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_dom",        acl_parse_str,     smp_fetch_cookie,         acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_end",        acl_parse_str,     smp_fetch_cookie,         acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_len",        acl_parse_int,     smp_fetch_cookie,         acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_reg",        acl_parse_reg,     smp_fetch_cookie,         acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_sub",        acl_parse_str,     smp_fetch_cookie,         acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "cook_val",        acl_parse_int,     smp_fetch_cookie_val,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-
-       { "hdr",             acl_parse_str,     smp_fetch_hdr,            acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_beg",         acl_parse_str,     smp_fetch_hdr,            acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_cnt",         acl_parse_int,     smp_fetch_hdr_cnt,        acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
-       { "hdr_dir",         acl_parse_str,     smp_fetch_hdr,            acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_dom",         acl_parse_str,     smp_fetch_hdr,            acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_end",         acl_parse_str,     smp_fetch_hdr,            acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_ip",          acl_parse_ip,      smp_fetch_hdr_ip,         acl_match_ip,      ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_len",         acl_parse_int,     smp_fetch_hdr,            acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_reg",         acl_parse_reg,     smp_fetch_hdr,            acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_sub",         acl_parse_str,     smp_fetch_hdr,            acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "hdr_val",         acl_parse_int,     smp_fetch_hdr_val,        acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-
-       { "http_auth",       acl_parse_nothing, smp_fetch_http_auth,      acl_match_nothing, ACL_USE_L7REQ_VOLATILE, ARG1(0,USR) },
-       { "http_auth_group", acl_parse_strcat,  smp_fetch_http_auth_grp,  acl_match_auth,    ACL_USE_L7REQ_VOLATILE, ARG1(1,USR) },
-
-       { "http_first_req",  acl_parse_nothing, smp_fetch_http_first_req, acl_match_nothing, ACL_USE_L7REQ_PERMANENT, 0 },
-
-       { "method",          acl_parse_meth,    smp_fetch_meth,           acl_match_meth,    ACL_USE_L7REQ_PERMANENT, 0 },
-
-       { "path",            acl_parse_str,     smp_fetch_path,           acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_beg",        acl_parse_str,     smp_fetch_path,           acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_dir",        acl_parse_str,     smp_fetch_path,           acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_dom",        acl_parse_str,     smp_fetch_path,           acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_end",        acl_parse_str,     smp_fetch_path,           acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_len",        acl_parse_int,     smp_fetch_path,           acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_reg",        acl_parse_reg,     smp_fetch_path,           acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "path_sub",        acl_parse_str,     smp_fetch_path,           acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
-
-       { "req_proto_http",  acl_parse_nothing, smp_fetch_proto_http,     acl_match_nothing, ACL_USE_L7REQ_PERMANENT, 0 },
-       { "req_ver",         acl_parse_ver,     smp_fetch_rqver,          acl_match_str,     ACL_USE_L7REQ_VOLATILE,  0 },
-       { "resp_ver",        acl_parse_ver,     smp_fetch_stver,          acl_match_str,     ACL_USE_L7RTR_VOLATILE,  0 },
-
-       { "scook",           acl_parse_str,     smp_fetch_cookie,         acl_match_str,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_beg",       acl_parse_str,     smp_fetch_cookie,         acl_match_beg,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_cnt",       acl_parse_int,     smp_fetch_cookie_cnt,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_dir",       acl_parse_str,     smp_fetch_cookie,         acl_match_dir,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_dom",       acl_parse_str,     smp_fetch_cookie,         acl_match_dom,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_end",       acl_parse_str,     smp_fetch_cookie,         acl_match_end,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_len",       acl_parse_int,     smp_fetch_cookie,         acl_match_len,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_reg",       acl_parse_reg,     smp_fetch_cookie,         acl_match_reg,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_sub",       acl_parse_str,     smp_fetch_cookie,         acl_match_sub,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "scook_val",       acl_parse_int,     smp_fetch_cookie_val,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-
-       { "shdr",            acl_parse_str,     smp_fetch_hdr,            acl_match_str,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_beg",        acl_parse_str,     smp_fetch_hdr,            acl_match_beg,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_cnt",        acl_parse_int,     smp_fetch_hdr_cnt,        acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
-       { "shdr_dir",        acl_parse_str,     smp_fetch_hdr,            acl_match_dir,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_dom",        acl_parse_str,     smp_fetch_hdr,            acl_match_dom,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_end",        acl_parse_str,     smp_fetch_hdr,            acl_match_end,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_ip",         acl_parse_ip,      smp_fetch_hdr_ip,         acl_match_ip,      ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_len",        acl_parse_int,     smp_fetch_hdr,            acl_match_len,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_reg",        acl_parse_reg,     smp_fetch_hdr,            acl_match_reg,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_sub",        acl_parse_str,     smp_fetch_hdr,            acl_match_sub,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-       { "shdr_val",        acl_parse_int,     smp_fetch_hdr_val,        acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
-
-       { "status",          acl_parse_int,     smp_fetch_stcode,         acl_match_int,     ACL_USE_L7RTR_PERMANENT, 0 },
-
-       { "url",             acl_parse_str,     smp_fetch_url,            acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_beg",         acl_parse_str,     smp_fetch_url,            acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_dir",         acl_parse_str,     smp_fetch_url,            acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_dom",         acl_parse_str,     smp_fetch_url,            acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_end",         acl_parse_str,     smp_fetch_url,            acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_ip",          acl_parse_ip,      smp_fetch_url_ip,         acl_match_ip,      ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_len",         acl_parse_int,     smp_fetch_url,            acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_port",        acl_parse_int,     smp_fetch_url_port,       acl_match_int,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_reg",         acl_parse_reg,     smp_fetch_url,            acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
-       { "url_sub",         acl_parse_str,     smp_fetch_url,            acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
-
-       { "urlp",            acl_parse_str,     smp_fetch_url_param,      acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_beg",        acl_parse_str,     smp_fetch_url_param,      acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_dir",        acl_parse_str,     smp_fetch_url_param,      acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_dom",        acl_parse_str,     smp_fetch_url_param,      acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_end",        acl_parse_str,     smp_fetch_url_param,      acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_ip",         acl_parse_ip,      smp_fetch_url_param,      acl_match_ip,      ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_len",        acl_parse_int,     smp_fetch_url_param,      acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_reg",        acl_parse_reg,     smp_fetch_url_param,      acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_sub",        acl_parse_str,     smp_fetch_url_param,      acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-       { "urlp_val",        acl_parse_int,     smp_fetch_url_param_val,  acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
-
-       { NULL, NULL, NULL, NULL },
+       { "base",            "base",          acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_beg",        "base",          acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_dir",        "base",          acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_dom",        "base",          acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_end",        "base",          acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_len",        "base",          acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_reg",        "base",          acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "base_sub",        "base",          acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
+
+       { "cook",            "cook",          acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_beg",        "cook",          acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_cnt",        "cook_cnt",      acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_dir",        "cook",          acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_dom",        "cook",          acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_end",        "cook",          acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_len",        "cook",          acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_reg",        "cook",          acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_sub",        "cook",          acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "cook_val",        "cook_val",      acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+
+       { "hdr",             "hdr",           acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_beg",         "hdr",           acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_cnt",         "hdr_cnt",       acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG1(0,STR) },
+       { "hdr_dir",         "hdr",           acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_dom",         "hdr",           acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_end",         "hdr",           acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_ip",          "hdr_ip",        acl_parse_ip,      acl_match_ip,      ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_len",         "hdr",           acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_reg",         "hdr",           acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_sub",         "hdr",           acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "hdr_val",         "hdr_val",       acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+
+       { "http_auth",       NULL,            acl_parse_nothing, acl_match_nothing, ACL_USE_L7REQ_VOLATILE, ARG1(1,USR) },
+       { "http_auth_group", NULL,            acl_parse_strcat,  acl_match_auth,    ACL_USE_L7REQ_VOLATILE, ARG1(1,USR) },
+
+       { "http_first_req",  NULL,            acl_parse_nothing, acl_match_nothing, ACL_USE_L7REQ_PERMANENT, 0 },
+
+       { "method",          NULL,            acl_parse_meth,    acl_match_meth,    ACL_USE_L7REQ_PERMANENT, 0 },
+
+       { "path",            "path",          acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_beg",        "path",          acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_dir",        "path",          acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_dom",        "path",          acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_end",        "path",          acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_len",        "path",          acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_reg",        "path",          acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "path_sub",        "path",          acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
+
+       { "req_proto_http",  NULL,            acl_parse_nothing, acl_match_nothing, ACL_USE_L7REQ_PERMANENT, 0 },
+       { "req_ver",         NULL,            acl_parse_ver,     acl_match_str,     ACL_USE_L7REQ_VOLATILE,  0 },
+       { "resp_ver",        NULL,            acl_parse_ver,     acl_match_str,     ACL_USE_L7RTR_VOLATILE,  0 },
+
+       { "scook",           "scook",         acl_parse_str,     acl_match_str,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_beg",       "scook",         acl_parse_str,     acl_match_beg,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_cnt",       "scook_cnt",     acl_parse_int,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_dir",       "scook",         acl_parse_str,     acl_match_dir,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_dom",       "scook",         acl_parse_str,     acl_match_dom,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_end",       "scook",         acl_parse_str,     acl_match_end,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_len",       "scook",         acl_parse_int,     acl_match_len,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_reg",       "scook",         acl_parse_reg,     acl_match_reg,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_sub",       "scook",         acl_parse_str,     acl_match_sub,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "scook_val",       "scook_val",     acl_parse_int,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+
+       { "shdr",            "shdr",          acl_parse_str,     acl_match_str,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_beg",        "shdr",          acl_parse_str,     acl_match_beg,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_cnt",        "shdr_cnt",      acl_parse_int,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG1(0,STR) },
+       { "shdr_dir",        "shdr",          acl_parse_str,     acl_match_dir,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_dom",        "shdr",          acl_parse_str,     acl_match_dom,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_end",        "shdr",          acl_parse_str,     acl_match_end,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_ip",         "shdr_ip",       acl_parse_ip,      acl_match_ip,      ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_len",        "shdr",          acl_parse_int,     acl_match_len,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_reg",        "shdr",          acl_parse_reg,     acl_match_reg,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_sub",        "shdr",          acl_parse_str,     acl_match_sub,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+       { "shdr_val",        "shdr_val",      acl_parse_int,     acl_match_int,     ACL_USE_L7RTR_VOLATILE, ARG2(0,STR,SINT), val_hdr },
+
+       { "status",          NULL,            acl_parse_int,     acl_match_int,     ACL_USE_L7RTR_PERMANENT, 0 },
+
+       { "url",             "url",           acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_beg",         "url",           acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_dir",         "url",           acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_dom",         "url",           acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_end",         "url",           acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_ip",          "url_ip",        acl_parse_ip,      acl_match_ip,      ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_len",         "url",           acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_port",        "url_port",      acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_reg",         "url",           acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, 0 },
+       { "url_sub",         "url",           acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, 0 },
+
+       { "urlp",            "urlp",          acl_parse_str,     acl_match_str,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_beg",        "urlp",          acl_parse_str,     acl_match_beg,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_dir",        "urlp",          acl_parse_str,     acl_match_dir,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_dom",        "urlp",          acl_parse_str,     acl_match_dom,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_end",        "urlp",          acl_parse_str,     acl_match_end,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_ip",         "urlp",          acl_parse_ip,      acl_match_ip,      ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_len",        "urlp",          acl_parse_int,     acl_match_len,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_reg",        "urlp",          acl_parse_reg,     acl_match_reg,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_sub",        "urlp",          acl_parse_str,     acl_match_sub,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+       { "urlp_val",        "urlp_val",      acl_parse_int,     acl_match_int,     ACL_USE_L7REQ_VOLATILE, ARG2(1,STR,STR) },
+
+       { /* END */ },
 }};
 
 /************************************************************************/
index 3d2efcd5a58ac962c4c169d9caed34b9d0b2bf6a..b939369784af0087e539687a05a78d76a181317c 100644 (file)
@@ -1612,10 +1612,10 @@ static struct cfg_kw_list cfg_kws = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "dst",      acl_parse_ip,  smp_fetch_dst,   acl_match_ip,  ACL_USE_TCP4_PERMANENT, 0 },
-       { "dst_port", acl_parse_int, smp_fetch_dport, acl_match_int, ACL_USE_TCP_PERMANENT,  0 },
-       { "src",      acl_parse_ip,  smp_fetch_src,   acl_match_ip,  ACL_USE_TCP4_PERMANENT, 0 },
-       { "src_port", acl_parse_int, smp_fetch_sport, acl_match_int, ACL_USE_TCP_PERMANENT,  0 },
+       { "dst",      NULL, acl_parse_ip,  acl_match_ip,  ACL_USE_TCP4_PERMANENT, 0 },
+       { "dst_port", NULL, acl_parse_int, acl_match_int, ACL_USE_TCP_PERMANENT,  0 },
+       { "src",      NULL, acl_parse_ip,  acl_match_ip,  ACL_USE_TCP4_PERMANENT, 0 },
+       { "src_port", NULL, acl_parse_int, acl_match_int, ACL_USE_TCP_PERMANENT,  0 },
        { /* END */ },
 }};
 
index 4b8a116d3898299eb117c5c53fefcef63bf147d6..c0d8da5c227727fe07a52b4f3c52fefc14b93658 100644 (file)
@@ -3613,59 +3613,59 @@ smp_fetch_table_avl(struct proxy *px, struct session *l4, void *l7, unsigned int
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "sc1_bytes_in_rate",  acl_parse_int,   smp_fetch_sc1_bytes_in_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_bytes_out_rate", acl_parse_int,   smp_fetch_sc1_bytes_out_rate, acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_clr_gpc0",       acl_parse_int,   smp_fetch_sc1_clr_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_conn_cnt",       acl_parse_int,   smp_fetch_sc1_conn_cnt,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_conn_cur",       acl_parse_int,   smp_fetch_sc1_conn_cur,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_conn_rate",      acl_parse_int,   smp_fetch_sc1_conn_rate,      acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_get_gpc0",       acl_parse_int,   smp_fetch_sc1_get_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_http_err_cnt",   acl_parse_int,   smp_fetch_sc1_http_err_cnt,   acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_http_err_rate",  acl_parse_int,   smp_fetch_sc1_http_err_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_http_req_cnt",   acl_parse_int,   smp_fetch_sc1_http_req_cnt,   acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_http_req_rate",  acl_parse_int,   smp_fetch_sc1_http_req_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_inc_gpc0",       acl_parse_int,   smp_fetch_sc1_inc_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_kbytes_in",      acl_parse_int,   smp_fetch_sc1_kbytes_in,      acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
-       { "sc1_kbytes_out",     acl_parse_int,   smp_fetch_sc1_kbytes_out,     acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
-       { "sc1_sess_cnt",       acl_parse_int,   smp_fetch_sc1_sess_cnt,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_sess_rate",      acl_parse_int,   smp_fetch_sc1_sess_rate,      acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc1_trackers",       acl_parse_int,   smp_fetch_sc1_trackers,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_bytes_in_rate",  acl_parse_int,   smp_fetch_sc2_bytes_in_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_bytes_out_rate", acl_parse_int,   smp_fetch_sc2_bytes_out_rate, acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_clr_gpc0",       acl_parse_int,   smp_fetch_sc2_clr_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_conn_cnt",       acl_parse_int,   smp_fetch_sc2_conn_cnt,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_conn_cur",       acl_parse_int,   smp_fetch_sc2_conn_cur,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_conn_rate",      acl_parse_int,   smp_fetch_sc2_conn_rate,      acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_get_gpc0",       acl_parse_int,   smp_fetch_sc2_get_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_http_err_cnt",   acl_parse_int,   smp_fetch_sc2_http_err_cnt,   acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_http_err_rate",  acl_parse_int,   smp_fetch_sc2_http_err_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_http_req_cnt",   acl_parse_int,   smp_fetch_sc2_http_req_cnt,   acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_http_req_rate",  acl_parse_int,   smp_fetch_sc2_http_req_rate,  acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_inc_gpc0",       acl_parse_int,   smp_fetch_sc2_inc_gpc0,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_kbytes_in",      acl_parse_int,   smp_fetch_sc2_kbytes_in,      acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
-       { "sc2_kbytes_out",     acl_parse_int,   smp_fetch_sc2_kbytes_out,     acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
-       { "sc2_sess_cnt",       acl_parse_int,   smp_fetch_sc2_sess_cnt,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_sess_rate",      acl_parse_int,   smp_fetch_sc2_sess_rate,      acl_match_int, ACL_USE_NOTHING,       0 },
-       { "sc2_trackers",       acl_parse_int,   smp_fetch_sc2_trackers,       acl_match_int, ACL_USE_NOTHING,       0 },
-       { "src_bytes_in_rate",  acl_parse_int,   smp_fetch_src_bytes_in_rate,  acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_bytes_out_rate", acl_parse_int,   smp_fetch_src_bytes_out_rate, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_clr_gpc0",       acl_parse_int,   smp_fetch_src_clr_gpc0,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_conn_cnt",       acl_parse_int,   smp_fetch_src_conn_cnt,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_conn_cur",       acl_parse_int,   smp_fetch_src_conn_cur,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_conn_rate",      acl_parse_int,   smp_fetch_src_conn_rate,      acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_get_gpc0",       acl_parse_int,   smp_fetch_src_get_gpc0,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_http_err_cnt",   acl_parse_int,   smp_fetch_src_http_err_cnt,   acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_http_err_rate",  acl_parse_int,   smp_fetch_src_http_err_rate,  acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_http_req_cnt",   acl_parse_int,   smp_fetch_src_http_req_cnt,   acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_http_req_rate",  acl_parse_int,   smp_fetch_src_http_req_rate,  acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_inc_gpc0",       acl_parse_int,   smp_fetch_src_inc_gpc0,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_kbytes_in",      acl_parse_int,   smp_fetch_src_kbytes_in,      acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_kbytes_out",     acl_parse_int,   smp_fetch_src_kbytes_out,     acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_sess_cnt",       acl_parse_int,   smp_fetch_src_sess_cnt,       acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_sess_rate",      acl_parse_int,   smp_fetch_src_sess_rate,      acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "src_updt_conn_cnt",  acl_parse_int,   smp_fetch_src_updt_conn_cnt,  acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
-       { "table_avl",          acl_parse_int,   smp_fetch_table_avl,          acl_match_int, ACL_USE_NOTHING,       ARG1(1,TAB) },
-       { "table_cnt",          acl_parse_int,   smp_fetch_table_cnt,          acl_match_int, ACL_USE_NOTHING,       ARG1(1,TAB) },
+       { "sc1_bytes_in_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_bytes_out_rate", NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_clr_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_conn_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_conn_cur",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_conn_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_get_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_http_err_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_http_err_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_http_req_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_http_req_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_inc_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_kbytes_in",      NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
+       { "sc1_kbytes_out",     NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
+       { "sc1_sess_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_sess_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc1_trackers",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_bytes_in_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_bytes_out_rate", NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_clr_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_conn_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_conn_cur",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_conn_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_get_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_http_err_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_http_err_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_http_req_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_http_req_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_inc_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_kbytes_in",      NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
+       { "sc2_kbytes_out",     NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, 0 },
+       { "sc2_sess_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_sess_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "sc2_trackers",       NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       0 },
+       { "src_bytes_in_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_bytes_out_rate", NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_clr_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_conn_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_conn_cur",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_conn_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_get_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_http_err_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_http_err_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_http_req_cnt",   NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_http_req_rate",  NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_inc_gpc0",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_kbytes_in",      NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_kbytes_out",     NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_sess_cnt",       NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_sess_rate",      NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "src_updt_conn_cnt",  NULL, acl_parse_int, acl_match_int, ACL_USE_TCP4_VOLATILE, ARG1(1,TAB) },
+       { "table_avl",          NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       ARG1(1,TAB) },
+       { "table_cnt",          NULL, acl_parse_int, acl_match_int, ACL_USE_NOTHING,       ARG1(1,TAB) },
        { /* END */ },
 }};
 
index 590c353bd870ed486b14c484761b845658543f46..1106d1d3620ce4d2e6f73cd8c649f9deb5ea2473 100644 (file)
@@ -2967,41 +2967,41 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {{ },{
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct acl_kw_list acl_kws = {{ },{
-       { "ssl_c_ca_err",           acl_parse_int, smp_fetch_ssl_c_ca_err,       acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_ca_err_depth",     acl_parse_int, smp_fetch_ssl_c_ca_err_depth, acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_err",              acl_parse_int, smp_fetch_ssl_c_err,          acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_i_dn",             acl_parse_str, smp_fetch_ssl_c_i_dn,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
-       { "ssl_c_key_alg",          acl_parse_str, smp_fetch_ssl_c_key_alg,      acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_notafter",         acl_parse_str, smp_fetch_ssl_c_notafter,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_notbefore",        acl_parse_str, smp_fetch_ssl_c_notbefore,    acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_sig_alg",          acl_parse_str, smp_fetch_ssl_c_sig_alg,      acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_s_dn",             acl_parse_str, smp_fetch_ssl_c_s_dn,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
-       { "ssl_c_serial",           acl_parse_bin, smp_fetch_ssl_c_serial,       acl_match_bin,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_used",             acl_parse_nothing, smp_fetch_ssl_c_used,     acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_verify",           acl_parse_int, smp_fetch_ssl_c_verify,       acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_c_version",          acl_parse_int, smp_fetch_ssl_c_version,      acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_i_dn",             acl_parse_str, smp_fetch_ssl_f_i_dn,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
-       { "ssl_f_key_alg",          acl_parse_str, smp_fetch_ssl_f_key_alg,      acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_notafter",         acl_parse_str, smp_fetch_ssl_f_notafter,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_notbefore",        acl_parse_str, smp_fetch_ssl_f_notbefore,    acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_sig_alg",          acl_parse_str, smp_fetch_ssl_f_sig_alg,      acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_s_dn",             acl_parse_str, smp_fetch_ssl_f_s_dn,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
-       { "ssl_f_serial",           acl_parse_bin, smp_fetch_ssl_f_serial,       acl_match_bin,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_f_version",          acl_parse_int, smp_fetch_ssl_f_version,      acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc",                 acl_parse_nothing, smp_fetch_ssl_fc,         acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_alg_keysize",     acl_parse_int, smp_fetch_ssl_fc_alg_keysize, acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_cipher",          acl_parse_str, smp_fetch_ssl_fc_cipher,      acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_has_crt",         acl_parse_nothing, smp_fetch_ssl_fc_has_crt, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_has_sni",         acl_parse_nothing, smp_fetch_ssl_fc_has_sni, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_ca_err",           NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_ca_err_depth",     NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_err",              NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_i_dn",             NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
+       { "ssl_c_key_alg",          NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_notafter",         NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_notbefore",        NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_sig_alg",          NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_s_dn",             NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
+       { "ssl_c_serial",           NULL,         acl_parse_bin,     acl_match_bin,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_used",             NULL,         acl_parse_nothing, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_verify",           NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_c_version",          NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_i_dn",             NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
+       { "ssl_f_key_alg",          NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_notafter",         NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_notbefore",        NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_sig_alg",          NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_s_dn",             NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, ARG2(0,STR,SINT) },
+       { "ssl_f_serial",           NULL,         acl_parse_bin,     acl_match_bin,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_f_version",          NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc",                 NULL,         acl_parse_nothing, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_alg_keysize",     NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_cipher",          NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_has_crt",         NULL,         acl_parse_nothing, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_has_sni",         NULL,         acl_parse_nothing, acl_match_nothing, ACL_USE_L6REQ_PERMANENT, 0 },
 #ifdef OPENSSL_NPN_NEGOTIATED
-       { "ssl_fc_npn",             acl_parse_str, smp_fetch_ssl_fc_npn,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_npn",             NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
 #endif
-       { "ssl_fc_protocol",        acl_parse_str, smp_fetch_ssl_fc_protocol,    acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_use_keysize",     acl_parse_int, smp_fetch_ssl_fc_use_keysize, acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_sni",             acl_parse_str, smp_fetch_ssl_fc_sni,         acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_sni_end",         acl_parse_str, smp_fetch_ssl_fc_sni,         acl_match_end,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { "ssl_fc_sni_reg",         acl_parse_reg, smp_fetch_ssl_fc_sni,         acl_match_reg,     ACL_USE_L6REQ_PERMANENT, 0 },
-       { NULL, NULL, NULL, NULL },
+       { "ssl_fc_protocol",        NULL,         acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_use_keysize",     NULL,         acl_parse_int,     acl_match_int,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_sni",             "ssl_fc_sni", acl_parse_str,     acl_match_str,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_sni_end",         "ssl_fc_sni", acl_parse_str,     acl_match_end,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { "ssl_fc_sni_reg",         "ssl_fc_sni", acl_parse_reg,     acl_match_reg,     ACL_USE_L6REQ_PERMANENT, 0 },
+       { /* END */ },
 }};
 
 /* Note: must not be declared <const> as its list will be overwritten.