]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MEDIUM] acl: get rid of dummy values in always_true/always_false
authorWilly Tarreau <w@1wt.eu>
Sun, 20 Jul 2008 08:39:22 +0000 (10:39 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 20 Jul 2008 08:39:22 +0000 (10:39 +0200)
make use of last change in order to get rid of dummy values in
always_true/always_false.

doc/configuration.txt
include/proto/acl.h
src/acl.c

index a2132d5cca8b8b7b5c2cfbc42dea5eb9d573c730..8e5f707e7393acd51637805c8a3f9d53cdb651cc 100644 (file)
@@ -3941,8 +3941,8 @@ only the first three ones are not layer 7 based.
 
 ACL name          Equivalent to                Usage
 ---------------+-----------------------------+---------------------------------
-TRUE             always_true  1                always match
-FALSE            always_false 0                never match
+TRUE             always_true                   always match
+FALSE            always_false                  never match
 LOCALHOST        src 127.0.0.1/8               match connection from local host
 HTTP_1.0         req_ver 1.0                   match HTTP version 1.0
 HTTP_1.1         req_ver 1.1                   match HTTP version 1.1
index 1f6a7b2f7189e5d97a4078a0e87d2132f14def49..ae64a5053f103bd026b3179c7f1c751fd4690af1 100644 (file)
@@ -111,6 +111,9 @@ void acl_unregister_keywords(struct acl_kw_list *kwl);
  */
 
 
+/* ignore the current line */
+int acl_parse_nothing(const char **text, struct acl_pattern *pattern, int *opaque);
+
 /* NB: For two strings to be identical, it is required that their lengths match */
 int acl_match_str(struct acl_test *test, struct acl_pattern *pattern);
 
@@ -141,6 +144,13 @@ int acl_parse_reg(const char **text, struct acl_pattern *pattern, int *opaque);
  */
 int acl_parse_ip(const char **text, struct acl_pattern *pattern, int *opaque);
 
+/* always fake a data retrieval */
+int acl_fetch_nothing(struct proxy *px, struct session *l4, void *l7, int dir,
+                     struct acl_expr *expr, struct acl_test *test);
+
+/* always return false */
+int acl_match_nothing(struct acl_test *test, struct acl_pattern *pattern);
+
 /* Checks that the pattern matches the end of the tested string. */
 int acl_match_end(struct acl_test *test, struct acl_pattern *pattern);
 
index e755990f8ec9c03cdc89a14890c06350abb4c07e..e66d502f62c102d27d3a64a54b0a6bb46d47e77f 100644 (file)
--- a/src/acl.c
+++ b/src/acl.c
@@ -30,31 +30,44 @@ static struct acl_kw_list acl_keywords = {
  * These functions are only used for debugging complex configurations.
  */
 
-/* ignore the current line */
+/* force TRUE to be returned at the fetch level */
 static int
-acl_parse_nothing(const char **text, struct acl_pattern *pattern, int *opaque)
+acl_fetch_true(struct proxy *px, struct session *l4, void *l7, int dir,
+              struct acl_expr *expr, struct acl_test *test)
 {
+       test->flags |= ACL_TEST_F_SET_RES_PASS;
        return 1;
 }
 
-/* always fake a data retrieval */
+/* force FALSE to be returned at the fetch level */
 static int
-acl_fetch_nothing(struct proxy *px, struct session *l4, void *l7, int dir,
-                 struct acl_expr *expr, struct acl_test *test)
+acl_fetch_false(struct proxy *px, struct session *l4, void *l7, int dir,
+               struct acl_expr *expr, struct acl_test *test)
 {
+       test->flags |= ACL_TEST_F_SET_RES_FAIL;
        return 1;
 }
 
-/* always return true */
-static int
-acl_match_true(struct acl_test *test, struct acl_pattern *pattern)
+
+/*
+ * These functions are exported and may be used by any other component.
+ */
+
+/* ignore the current line */
+int acl_parse_nothing(const char **text, struct acl_pattern *pattern, int *opaque)
 {
-       return ACL_PAT_PASS;
+       return 1;
+}
+
+/* always fake a data retrieval */
+int acl_fetch_nothing(struct proxy *px, struct session *l4, void *l7, int dir,
+                     struct acl_expr *expr, struct acl_test *test)
+{
+       return 1;
 }
 
 /* always return false */
-static int
-acl_match_false(struct acl_test *test, struct acl_pattern *pattern)
+int acl_match_nothing(struct acl_test *test, struct acl_pattern *pattern)
 {
        return ACL_PAT_FAIL;
 }
@@ -743,8 +756,8 @@ const struct {
        const char *name;
        const char *expr[4]; /* put enough for longest expression */
 } default_acl_list[] = {
-       { .name = "TRUE",           .expr = {"always_true","1",""}},
-       { .name = "FALSE",          .expr = {"always_false","0",""}},
+       { .name = "TRUE",           .expr = {"always_true",""}},
+       { .name = "FALSE",          .expr = {"always_false",""}},
        { .name = "LOCALHOST",      .expr = {"src","127.0.0.1/8",""}},
        { .name = "HTTP_1.0",       .expr = {"req_ver","1.0",""}},
        { .name = "HTTP_1.1",       .expr = {"req_ver","1.1",""}},
@@ -1049,8 +1062,8 @@ int acl_exec_cond(struct acl_cond *cond, struct proxy *px, struct session *l4, v
 
 /* Note: must not be declared <const> as its list will be overwritten */
 static struct acl_kw_list acl_kws = {{ },{
-       { "always_true", acl_parse_nothing, acl_fetch_nothing, acl_match_true },
-       { "always_false", acl_parse_nothing, acl_fetch_nothing, acl_match_false },
+       { "always_true", acl_parse_nothing, acl_fetch_true, acl_match_nothing },
+       { "always_false", acl_parse_nothing, acl_fetch_false, acl_match_nothing },
 #if 0
        { "time",       acl_parse_time,  acl_fetch_time,   acl_match_time  },
 #endif