]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
exception: extract 'auto' check to function
authorJuliana Fajardini <jufajardini@oisf.net>
Thu, 1 Jun 2023 01:52:48 +0000 (22:52 -0300)
committerVictor Julien <vjulien@oisf.net>
Sat, 29 Jul 2023 06:00:12 +0000 (08:00 +0200)
Part of
Bug #5825

(cherry picked from commit e849afbda14aae690ab7b2b8c0734aaeba490ec9)

src/util-exception-policy.c

index 383c72d37031bed0890123eabad5b378e0bb74ee..820fd2a10a8f7ba3e2093e34a4f08ad4ec634381 100644 (file)
@@ -183,6 +183,19 @@ static enum ExceptionPolicy ExceptionPolicyConfigValueParse(
     return policy;
 }
 
+static enum ExceptionPolicy ExceptionPolicyPickAuto(bool midstream_enabled, bool support_flow)
+{
+    enum ExceptionPolicy policy = EXCEPTION_POLICY_NOT_SET;
+    if (!midstream_enabled && EngineModeIsIPS()) {
+        if (support_flow) {
+            policy = EXCEPTION_POLICY_DROP_FLOW;
+        } else {
+            policy = EXCEPTION_POLICY_DROP_PACKET;
+        }
+    }
+    return policy;
+}
+
 static enum ExceptionPolicy ExceptionPolicyMasterParse(const char *value)
 {
     enum ExceptionPolicy policy = EXCEPTION_POLICY_NOT_SET;
@@ -227,6 +240,9 @@ enum ExceptionPolicy ExceptionPolicyParse(const char *option, bool support_flow)
             policy = ExceptionPolicyMasterParse(value_str);
         } else {
             policy = ExceptionPolicyConfigValueParse(option, value_str);
+            if (policy == EXCEPTION_POLICY_AUTO) {
+                policy = ExceptionPolicyPickAuto(false, support_flow);
+            }
             if (!support_flow) {
                 policy = PickPacketAction(option, policy);
             }
@@ -246,7 +262,9 @@ enum ExceptionPolicy ExceptionPolicyMidstreamParse(bool midstream_enabled)
     /* policy was set directly */
     if ((ConfGet("stream.midstream-policy", &value_str)) == 1 && value_str != NULL) {
         policy = ExceptionPolicyConfigValueParse("midstream-policy", value_str);
-        if (midstream_enabled) {
+        if (policy == EXCEPTION_POLICY_AUTO) {
+            policy = ExceptionPolicyPickAuto(midstream_enabled, true);
+        } else if (midstream_enabled) {
             if (policy != EXCEPTION_POLICY_NOT_SET && policy != EXCEPTION_POLICY_PASS_FLOW) {
                 FatalErrorOnInit(SC_ERR_INVALID_VALUE,
                         "Error parsing stream.midstream-policy from config file. \"%s\" is "