]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4392: flow: clear deferred trust after the flow is trusted to stop...
authorRon Dempster (rdempste) <rdempste@cisco.com>
Mon, 29 Jul 2024 19:57:59 +0000 (19:57 +0000)
committerRon Dempster (rdempste) <rdempste@cisco.com>
Mon, 29 Jul 2024 19:57:59 +0000 (19:57 +0000)
Merge in SNORT/snort3 from ~RDEMPSTE/snort3:insight_active to master

Squashed commit of the following:

commit ad008ef09d827ea88c8ab48a1b3607b633f32b17
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date:   Fri Jul 19 16:51:57 2024 -0400

    flow: clear deferred trust after the flow is trusted to stop repeated trusting

src/flow/deferred_trust.cc
src/flow/test/deferred_trust_test.cc

index 672e40bf98bf81e143d93ffad109f10a1025eb54..5421c42050b2f3fcb71bf10aed6e3dc57b9a82bf 100644 (file)
@@ -39,8 +39,7 @@ void DeferredTrust::set_deferred_trust(unsigned module_id, bool on)
                 deferred_trust = TRUST_DEFER_ON;
         }
         auto element = deferred_trust_modules.begin();
-        for (; element != deferred_trust_modules.end() && *element != module_id;
-            ++element);
+        for (; element != deferred_trust_modules.end() && *element != module_id; ++element);
         if (element == deferred_trust_modules.end())
             deferred_trust_modules.emplace_front(module_id);
     }
@@ -62,7 +61,10 @@ void DeferredTrust::finalize(Active& active)
     if (active.session_was_blocked())
         clear();
     else if (TRUST_DEFER_DO_TRUST == deferred_trust && active.session_was_allowed())
+    {
         active.set_trust();
+        clear();
+    }
     else if ((TRUST_DEFER_ON == deferred_trust || TRUST_DEFER_DEFERRING == deferred_trust)
         && active.session_was_trusted())
     {
index f954794031b93aff4152cedf653098fdf4ce10ee..686be07a7398ddfa9eb041ff44c483c881270512 100644 (file)
@@ -114,15 +114,16 @@ TEST(deferred_trust_test, finalize)
     deferred_trust.set_deferred_trust(1, false);
     CHECK_TEXT(!deferred_trust.is_active(), "Deferred trust should not be active");
     // State should be do trust
-    deferred_trust.finalize(active);
-    CHECK_TEXT(active.session_was_trusted(), "Session was not trusted from do trust");
-
     // Enable with state do trust goes to deferring
-    deferred_trust.set_deferred_trust(1, true);
+    deferred_trust.set_deferred_trust(2, true);
     CHECK_TEXT(deferred_trust.is_active(), "Deferred trust should be active");
     CHECK_TEXT(deferred_trust.is_deferred(), "Deferred trust should be deferring");
+    deferred_trust.set_deferred_trust(2, false);
+    CHECK_TEXT(!deferred_trust.is_active(), "Deferred trust should not be active");
+    // State should be do trust
+    deferred_trust.finalize(active);
+    CHECK_TEXT(active.session_was_trusted(), "Session was not trusted from do trust");
 
-    deferred_trust.clear();
     // Enable
     deferred_trust.set_deferred_trust(1, true);
     CHECK_TEXT(deferred_trust.is_active(), "Deferred trust should be active");