]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] acl: add fe_id/so_id to match frontend's and socket's id
authorKrzysztof Piotr Oledzki <ole@ans.pl>
Tue, 12 Jan 2010 20:59:30 +0000 (21:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 12 Jan 2010 22:00:51 +0000 (23:00 +0100)
doc/configuration.txt
src/client.c

index 6ca20b9a61a26fb97476d9bb6e3be8599c9abb9b..9d980748532c25426d851f827d9f36f666311e11 100644 (file)
@@ -5604,6 +5604,13 @@ fe_conn(frontend) <integer>
   considered saturated. See also the "dst_conn", "be_conn" and "fe_sess_rate"
   criteria.
 
+fe_id <integer>
+  Applies to the fronted's id. Can be used in backends to check from which
+  frontend it was called.
+
+so_id <integer>
+  Applies to the socket's id. Useful in frontends with many bind keywords.
+
 be_conn <integer>
 be_conn(frontend) <integer>
   Applies to the number of currently established connections on the backend,
index 16ee2d09f0580ab0c5165fa0dbc6615827614a3a..458bb1c2c937cb90d3276a09b2dcc7b5f650c476 100644 (file)
@@ -610,6 +610,30 @@ acl_fetch_dconn(struct proxy *px, struct session *l4, void *l7, int dir,
        return 1;
 }
 
+/* set test->i to the id of the frontend */
+static int
+acl_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, int dir,
+                struct acl_expr *expr, struct acl_test *test) {
+
+       test->flags = ACL_TEST_F_READ_ONLY;
+
+       test->i = l4->fe->uuid;
+
+       return 1;
+}
+
+/* set test->i to the id of the socket (listener) */
+static int
+acl_fetch_so_id(struct proxy *px, struct session *l4, void *l7, int dir,
+                struct acl_expr *expr, struct acl_test *test) {
+
+       test->flags = ACL_TEST_F_READ_ONLY;
+
+       test->i = l4->listener->luid;
+
+       return 1;
+}
+
 
 /* Note: must not be declared <const> as its list will be overwritten */
 static struct acl_kw_list acl_kws = {{ },{
@@ -621,6 +645,8 @@ static struct acl_kw_list acl_kws = {{ },{
        { "src_limit",  acl_parse_int,   acl_fetch_sconn,    acl_match_int },
 #endif
        { "dst_conn",   acl_parse_int,   acl_fetch_dconn,    acl_match_int, ACL_USE_NOTHING },
+       { "fe_id",      acl_parse_int,   acl_fetch_fe_id,    acl_match_int, ACL_USE_NOTHING },
+       { "so_id",      acl_parse_int,   acl_fetch_so_id,    acl_match_int, ACL_USE_NOTHING },
        { NULL, NULL, NULL, NULL },
 }};