]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: tcp-rules: Kill connections when custom actions return ACT_RET_ERR
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 13 Dec 2019 08:31:00 +0000 (09:31 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 20 Jan 2020 14:18:45 +0000 (15:18 +0100)
Thanks to the commit "MINOR: actions: Use ACT_RET_CONT code to ignore an error
from a custom action", it is now possible to trigger an error from a custom
action in tcp-content rules. Now, when a custom action returns the ACT_RET_ERR
code, it has the same behavior than a reject rules, the connection is killed.

Be careful if this patch is backported. The other mentioned patch must be
backported first.

src/tcp_rules.c

index e87b70b8276f53141e57db7c5c85bc0347aca460..ce3900e6b984f61720153091537003dd442d540c 100644 (file)
@@ -158,6 +158,7 @@ resume_execution:
                                break;
                        }
                        else if (rule->action == ACT_ACTION_DENY) {
+                         deny:
                                si_must_kill_conn(chn_prod(req));
                                channel_abort(req);
                                channel_abort(&s->res);
@@ -235,6 +236,7 @@ resume_execution:
 
                                switch (rule->action_ptr(rule, s->be, s->sess, s, act_flags)) {
                                case ACT_RET_ERR:
+                                       goto deny;
                                case ACT_RET_CONT:
                                        continue;
                                case ACT_RET_STOP:
@@ -336,6 +338,7 @@ resume_execution:
                                break;
                        }
                        else if (rule->action == ACT_ACTION_DENY) {
+                         deny:
                                si_must_kill_conn(chn_prod(rep));
                                channel_abort(rep);
                                channel_abort(&s->req);
@@ -370,6 +373,7 @@ resume_execution:
 
                                switch (rule->action_ptr(rule, s->be, s->sess, s, act_flags)) {
                                case ACT_RET_ERR:
+                                       goto deny;
                                case ACT_RET_CONT:
                                        continue;
                                case ACT_RET_STOP: