]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: add comparison-mode LTE/GTE for Detect(U32/u8)Data
authorfrank honza <frank.honza@dcso.de>
Sun, 18 Oct 2020 19:46:04 +0000 (21:46 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 5 Mar 2021 13:47:10 +0000 (14:47 +0100)
src/detect-engine-uint.c
src/detect-engine-uint.h

index 51513d877dc84148a61fa9a89320d808a49815aa..769b8bfdfbe676ca0d60329b0373a628a82684f3 100644 (file)
@@ -49,11 +49,21 @@ int DetectU32Match(const uint32_t parg, const DetectU32Data *du32)
                 return 1;
             }
             return 0;
+        case DETECT_UINT_LTE:
+            if (parg <= du32->arg1) {
+                return 1;
+            }
+            return 0;
         case DETECT_UINT_GT:
             if (parg > du32->arg1) {
                 return 1;
             }
             return 0;
+        case DETECT_UINT_GTE:
+            if (parg >= du32->arg1) {
+                return 1;
+            }
+            return 0;
         case DETECT_UINT_RA:
             if (parg > du32->arg1 && parg < du32->arg2) {
                 return 1;
@@ -137,9 +147,17 @@ DetectU32Data *DetectU32Parse (const char *u32str)
                     return NULL;
 
                 if (arg2[0] == '<') {
-                    u32da.mode = DETECT_UINT_LT;
+                    if (arg2[1] == '=') {
+                        u32da.mode = DETECT_UINT_LTE;
+                    } else {
+                        u32da.mode = DETECT_UINT_LT;
+                    }
                 } else { // arg2[0] == '>'
-                    u32da.mode = DETECT_UINT_GT;
+                    if (arg2[1] == '=') {
+                        u32da.mode = DETECT_UINT_GTE;
+                    } else {
+                        u32da.mode = DETECT_UINT_GT;
+                    }
                 }
                 break;
             case '-':
@@ -244,11 +262,21 @@ int DetectU8Match(const uint8_t parg, const DetectU8Data *du8)
                 return 1;
             }
             return 0;
+        case DETECT_UINT_LTE:
+            if (parg <= du8->arg1) {
+                return 1;
+            }
+            return 0;
         case DETECT_UINT_GT:
             if (parg > du8->arg1) {
                 return 1;
             }
             return 0;
+        case DETECT_UINT_GTE:
+            if (parg >= du8->arg1) {
+                return 1;
+            }
+            return 0;
         case DETECT_UINT_RA:
             if (parg > du8->arg1 && parg < du8->arg2) {
                 return 1;
@@ -328,9 +356,17 @@ DetectU8Data *DetectU8Parse (const char *u8str)
                     return NULL;
 
                 if (arg2[0] == '<') {
-                    u8da.mode = DETECT_UINT_LT;
+                    if (arg2[1] == '=') {
+                        u8da.mode = DETECT_UINT_LTE;
+                    } else {
+                        u8da.mode = DETECT_UINT_LT;
+                    }
                 } else { // arg2[0] == '>'
-                    u8da.mode = DETECT_UINT_GT;
+                    if (arg2[1] == '=') {
+                        u8da.mode = DETECT_UINT_GTE;
+                    } else {
+                        u8da.mode = DETECT_UINT_GT;
+                    }
                 }
                 break;
             case '-':
index f76a50121fc684461cdff311ba00253737b959d9..5d49389f459eeea8ee1f735a015c3b1b452e1f9a 100644 (file)
@@ -31,6 +31,8 @@ typedef enum {
     DETECT_UINT_EQ,
     DETECT_UINT_GT,
     DETECT_UINT_RA,
+    DETECT_UINT_LTE,
+    DETECT_UINT_GTE,
 } DetectUintMode;
 
 typedef struct DetectU32Data_ {