Hello,

In my HAProxy config, I would like to ban people for a certain amount of time by setting a general-purpose counter from 0 to 1, where 1 = banned, in a stick table. When the stick table entry expires, the counter is reset to 0 and the person is un-banned. This works fine. However, I would like to ignore this person's requests while they're banned. That way, as they make requests, they are not continuously banning themselves.

Consider if I use this ACL and "track" line:

```
acl is_banned sc_get_gpc1(0) gt 0
http-request track-sc0 be_name unless is_banned
```

This ACL uses `sc_get_gpc1(0)` to read the value of the general-purpose counter. When this ACL is used by the `track-sc0` line, it *resets the TTL* on the stick table entry, which means that a person will be banned forever unless they stop making requests. I don't want this. I want to ban them for only 10 seconds. So, instead, I use this ACL:

```
acl is_banned be_name,table_gpc1 gt 0
http-request track-sc0 be_name unless is_banned
```

By using the `table_gpc1` conveter, the TTL is *not* reset when the ACL is used, which is good.

My question is, is this an undocumented feature? A bug that may one day be "fixed"? Why is there a difference between `sc_get_gpc1(0)` and `table_gpc1`, where the former resets the TTL on the stick table entry, but the latter does not?

Also, if this is a bug, would it be helpful to have a parameter on the track-sc0 line that allows me to opt in to not resetting the TTL?

Thank you,
Nick Ramirez

Reply via email to