@@ -25,11 +25,28 @@ if [ -n "${CONFIG_FILE}" ]; then
25
25
setup_conf_path=" ${CONFIG_FILE} "
26
26
fi
27
27
28
+ # Detect CRS version based on the config file content
29
+ detect_crs_version () {
30
+ if grep -q " tx\.blocking_paranoia_level" " ${setup_conf_path} " ; then
31
+ echo " v4"
32
+ elif grep -q " tx\.paranoia_level" " ${setup_conf_path} " ; then
33
+ echo " v3"
34
+ else
35
+ echo " Unknown CRS version"
36
+ exit 10
37
+ fi
38
+ }
39
+
40
+ # Get the CRS version
41
+ CRS_VERSION=" $( detect_crs_version) "
42
+ echo " Detected CRS config file version: ${CRS_VERSION} "
43
+
28
44
set_value () {
29
45
rule=" ${1} "
30
46
var_name=" ${2} "
31
47
tx_var_name=" ${3} "
32
48
var_value=" ${4} "
49
+
33
50
echo " Configuring ${rule} for ${var_name} with ${tx_var_name} =${var_value} "
34
51
35
52
# For each rule, we do one pass to uncomment the rule (up to first blank line after the rule),
@@ -40,7 +57,7 @@ set_value() {
40
57
ed -s " ${setup_conf_path} " << EOF 2 > /dev/null
41
58
/id:${rule} /
42
59
-
43
- .,/^#\? $/ s/#//
60
+ .,/^$/ s/#//
44
61
wq
45
62
EOF
46
63
fi
52
69
# Use `#` as pattern delimiter, as `/` is part of some variable values.
53
70
ed -s " ${setup_conf_path} " << EOF 2 > /dev/null
54
71
/id:${rule} /
55
- /setvar:'\? tx\.${tx_var_name} =/
56
- s#=[^,'"]\+ #=${var_value} #
72
+ /setvar:[']* tx\.${tx_var_name} =/
73
+ s#=[^,'"]* #=${var_value} #
57
74
wq
58
75
EOF
59
76
}
@@ -68,8 +85,7 @@ can_set() {
68
85
69
86
if ! grep -q " id:${rule} " " ${setup_conf_path} " ; then
70
87
return 1
71
- fi
72
- if grep -Eq " setvar:'?tx\.${tx_var_name} " " ${setup_conf_path} " ; then
88
+ elif ! grep -Eq " setvar:'?tx\.${tx_var_name} " " ${setup_conf_path} " ; then
73
89
return 1
74
90
fi
75
91
return 0
@@ -96,6 +112,14 @@ get_tx_var_name() {
96
112
echo " ${1} " | awk -F' \|' ' {print $4}'
97
113
}
98
114
115
+ get_tx_var_name () {
116
+ echo " ${1} " | awk -F' \|' ' {print $4}'
117
+ }
118
+
119
+ get_test_value () {
120
+ echo " ${1} " | awk -F' \|' ' {print $5}'
121
+ }
122
+
99
123
while read -r line; do
100
124
if [ -z " ${line} " ] || echo " ${line} " | grep -Eq " ^#" ; then
101
125
continue
@@ -106,23 +130,20 @@ while read -r line; do
106
130
var_value=" $( get_var_value " ${line} " ) "
107
131
rule=" $( get_rule " ${line} " ) "
108
132
tx_var_name=" $( get_tx_var_name " ${line} " ) "
109
-
133
+
110
134
if should_set " ${var_value} " " ${tx_var_name} " ; then
111
135
if ! can_set " ${rule} " " ${tx_var_name} " ; then
112
136
if [ " ${legacy} " = " true" ]; then
113
137
echo " Legacy variable ${var_name} (${rule} ) set but nothing found to substitute. Skipping"
114
138
continue
115
- elif [ " ${legacy} " = " false" -a " ${rule} " != " 900000" ]; then
116
- echo " Non-legacy variable ${var_name} (${rule} ) set but nothing found to substitute. Skipping"
117
- continue
118
139
fi
119
140
echo " Failed to find rule ${rule} to set ${tx_var_name} =${var_value} for ${var_name} in ${setup_conf_path} . Aborting"
120
141
exit 1
121
142
fi
122
143
123
144
set_value " ${rule} " " ${var_name} " " ${tx_var_name} " " ${var_value} "
124
145
fi
125
- done < " ${DIRECTORY} /configure-rules.conf"
146
+ done < " ${DIRECTORY} /configure-rules.${CRS_VERSION} . conf"
126
147
127
148
# Add SecDefaultActions
128
149
var=" ${MODSEC_DEFAULT_PHASE1_ACTION} "
0 commit comments