diff --git a/net/haproxy/pkg-descr b/net/haproxy/pkg-descr
index c20f334be..5cba9c35d 100644
--- a/net/haproxy/pkg-descr
+++ b/net/haproxy/pkg-descr
@@ -12,6 +12,7 @@ Added:
* add support for advanced resolver properties (#2330)
* add graceful stop timeout to service settings
* support "monitor-uri" and "monitor fail" in rules (#2387)
+* add new option "case-sensitive" to conditions (#2576)
Fixed:
* no haproxy.conf after restoring a config backup (#2474)
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAcl.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAcl.xml
index 3d5bb47cd..4643f99a8 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAcl.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAcl.xml
@@ -27,6 +27,12 @@
checkbox
+
+ acl.caseSensitive
+
+ checkbox
+
+
header
diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
index 5f7d9db7b..f1b2e2f03 100644
--- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
+++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
@@ -1585,6 +1585,10 @@
0
Y
+
+ 0
+ N
+
/^.{1,255}$/u
Should be a string between 1 and 255 characters.
diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
index 15dc3f76e..7d11f3df9 100644
--- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
+++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
@@ -83,119 +83,187 @@
{% endif %}
{% elif acl_data.expression == 'hdr_beg' %}
{% if acl_data.hdr_beg|default("") != "" %}
-{% do acl_options.append('hdr_beg(host) -i ' ~ acl_data.hdr_beg) %}
+{% do acl_options.append('hdr_beg(host)') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.hdr_beg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'hdr_end' %}
{% if acl_data.hdr_end|default("") != "" %}
-{% do acl_options.append('hdr_end(host) -i ' ~ acl_data.hdr_end) %}
+{% do acl_options.append('hdr_end(host)') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.hdr_end) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'hdr' %}
{% if acl_data.hdr|default("") != "" %}
-{% do acl_options.append('hdr(host) -i ' ~ acl_data.hdr) %}
+{% do acl_options.append('hdr(host)') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.hdr) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'hdr_reg' %}
{% if acl_data.hdr_reg|default("") != "" %}
-{% do acl_options.append('hdr_reg(host) -i ' ~ acl_data.hdr_reg) %}
+{% do acl_options.append('hdr_reg(host)') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.hdr_reg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'hdr_sub' %}
{% if acl_data.hdr_sub|default("") != "" %}
-{% do acl_options.append('hdr_sub(host) -i ' ~ acl_data.hdr_sub) %}
+{% do acl_options.append('hdr_sub(host)') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append('acl_data.hdr_sub) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path_beg' %}
{% if acl_data.path_beg|default("") != "" %}
-{% do acl_options.append('path_beg -i ' ~ acl_data.path_beg) %}
+{% do acl_options.append('path_beg') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path_beg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path_end' %}
{% if acl_data.path_end|default("") != "" %}
-{% do acl_options.append('path_end -i ' ~ acl_data.path_end) %}
+{% do acl_options.append('path_end') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path_end) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path' %}
{% if acl_data.path|default("") != "" %}
-{% do acl_options.append('path -i ' ~ acl_data.path) %}
+{% do acl_options.append('path') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path_reg' %}
{% if acl_data.path_reg|default("") != "" %}
-{% do acl_options.append('path_reg -i ' ~ acl_data.path_reg) %}
+{% do acl_options.append('path_reg') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path_reg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path_dir' %}
{% if acl_data.path_dur|default("") != "" %}
-{% do acl_options.append('path_dir -i ' ~ acl_data.path_dir) %}
+{% do acl_options.append('path_dir') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path_dir) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'path_sub' %}
{% if acl_data.path_sub|default("") != "" %}
-{% do acl_options.append('path_sub -i ' ~ acl_data.path_sub) %}
+{% do acl_options.append('path_sub') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.path_sub) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'cust_hdr_beg' %}
{% if acl_data.cust_hdr_beg|default("") != "" and acl_data.cust_hdr_beg_name|default("") != "" %}
-{% do acl_options.append('hdr_beg(' ~ acl_data.cust_hdr_beg_name ~ ') -i ' ~ acl_data.cust_hdr_beg) %}
+{% do acl_options.append('hdr_beg(' ~ acl_data.cust_hdr_beg_name ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.cust_hdr_beg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'cust_hdr_end' %}
{% if acl_data.cust_hdr_end|default("") != "" and acl_data.cust_hdr_end_name|default("") %}
-{% do acl_options.append('hdr_end(' ~ acl_data.cust_hdr_end_name ~ ') -i ' ~ acl_data.cust_hdr_end) %}
+{% do acl_options.append('hdr_end(' ~ acl_data.cust_hdr_end_name ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.cust_hdr_end) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'cust_hdr' %}
{% if acl_data.cust_hdr|default("") != "" and acl_data.cust_hdr_name|default("") != "" %}
-{% do acl_options.append('hdr(' ~ acl_data.cust_hdr_name ~ ') -i ' ~ acl_data.cust_hdr) %}
+{% do acl_options.append('hdr(' ~ acl_data.cust_hdr_name ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.cust_hdr) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'cust_hdr_reg' %}
{% if acl_data.cust_hdr_reg|default("") != "" and acl_data.cust_hdr_reg_name|default("") != "" %}
-{% do acl_options.append('hdr_reg(' ~ acl_data.cust_hdr_reg_name ~ ') -i ' ~ acl_data.cust_hdr_reg) %}
+{% do acl_options.append('hdr_reg(' ~ acl_data.cust_hdr_reg_name ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.cust_hdr_reg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'cust_hdr_sub' %}
{% if acl_data.cust_hdr_sub|default("") != "" and acl_data.cust_hdr_sub_name|default("") != "" %}
-{% do acl_options.append('hdr_sub(' ~ acl_data.cust_hdr_sub_name ~ ') -i ' ~ acl_data.cust_hdr_sub) %}
+{% do acl_options.append('hdr_sub(' ~ acl_data.cust_hdr_sub_name ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.cust_hdr_sub) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'url_param' %}
{% if acl_data.url_param_value|default("") != "" and acl_data.url_param|default("") != "" %}
-{% do acl_options.append('url_param(' ~ acl_data.url_param ~ ') -i ' ~ acl_data.url_param_value) %}
+{% do acl_options.append('url_param(' ~ acl_data.url_param ~ ')') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.url_param_value) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
@@ -281,35 +349,55 @@
{% endif %}
{% elif acl_data.expression == 'ssl_sni' %}
{% if acl_data.ssl_sni|default("") != "" %}
-{% do acl_options.append('req.ssl_sni -i ' ~ acl_data.ssl_sni) %}
+{% do acl_options.append('req.ssl_sni') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.ssl_sni) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'ssl_sni_sub' %}
{% if acl_data.ssl_sni_sub|default("") != "" %}
-{% do acl_options.append('req.ssl_sni -m sub -i ' ~ acl_data.ssl_sni_sub) %}
+{% do acl_options.append('req.ssl_sni -m sub') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.ssl_sni_sub) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'ssl_sni_beg' %}
{% if acl_data.ssl_sni_beg|default("") != "" %}
-{% do acl_options.append('req.ssl_sni -m beg -i ' ~ acl_data.ssl_sni_beg) %}
+{% do acl_options.append('req.ssl_sni -m beg') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.ssl_sni_beg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'ssl_sni_end' %}
{% if acl_data.ssl_sni_end|default("") != "" %}
-{% do acl_options.append('req.ssl_sni -m end -i ' ~ acl_data.ssl_sni_end) %}
+{% do acl_options.append('req.ssl_sni -m end') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.ssl_sni_end) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
{% elif acl_data.expression == 'ssl_sni_reg' %}
{% if acl_data.ssl_sni_reg|default("") != "" %}
-{% do acl_options.append('req.ssl_sni -m reg -i ' ~ acl_data.ssl_sni_reg) %}
+{% do acl_options.append('req.ssl_sni -m reg') %}
+{% if acl_data.caseSensitive|default('0') == '0' %}
+{% do acl_options.append('-i') %}
+{% endif %}
+{% do acl_options.append(acl_data.ssl_sni_reg) %}
{% else %}
{% set acl_enabled = '0' %}
# ERROR: missing parameters