]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect-tls-validity: use flags for modes
authorMats Klepsland <mats.klepsland@gmail.com>
Tue, 27 Sep 2016 06:56:28 +0000 (08:56 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 30 Sep 2016 10:37:53 +0000 (12:37 +0200)
Use flags for modes to support using multiple modes at the same time.

src/detect-tls-cert-validity.c
src/detect-tls-cert-validity.h

index 08d0122263bdb173dabd199ae8713dcfbf5ea8fe..742249c15297aa7a2bf61fd03b7a158321da3cfc 100644 (file)
@@ -148,13 +148,13 @@ static int DetectTlsValidityMatch (ThreadVars *t, DetectEngineThreadCtx *det_ctx
     if (cert_epoch == 0)
         SCReturnInt(0);
 
-    if (dd->mode == DETECT_TLS_VALIDITY_EQ && cert_epoch == dd->epoch)
+    if ((dd->mode & DETECT_TLS_VALIDITY_EQ) && cert_epoch == dd->epoch)
         ret = 1;
-    else if (dd->mode == DETECT_TLS_VALIDITY_LT && cert_epoch <= dd->epoch)
+    else if ((dd->mode & DETECT_TLS_VALIDITY_LT) && cert_epoch <= dd->epoch)
         ret = 1;
-    else if (dd->mode == DETECT_TLS_VALIDITY_GT && cert_epoch >= dd->epoch)
+    else if ((dd->mode & DETECT_TLS_VALIDITY_GT) && cert_epoch >= dd->epoch)
         ret = 1;
-    else if (dd->mode == DETECT_TLS_VALIDITY_RA &&
+    else if ((dd->mode & DETECT_TLS_VALIDITY_RA) &&
             cert_epoch >= dd->epoch && cert_epoch <= dd->epoch2)
         ret = 1;
 
@@ -315,20 +315,18 @@ static DetectTlsValidityData *DetectTlsValidityParse (char *rawstr)
 
     dd->epoch = 0;
     dd->epoch2 = 0;
-    dd->mode = DETECT_TLS_VALIDITY_EQ;
+    dd->mode = 0;
 
     if (strlen(mode) > 0) {
         if (mode[0] == '<')
-            dd->mode = DETECT_TLS_VALIDITY_LT;
+            dd->mode |= DETECT_TLS_VALIDITY_LT;
         else if (mode[0] == '>')
-            dd->mode = DETECT_TLS_VALIDITY_GT;
-        else
-            dd->mode = DETECT_TLS_VALIDITY_EQ;
+            dd->mode |= DETECT_TLS_VALIDITY_GT;
     }
 
     if (strlen(range) > 0) {
         if (strcmp("<>", range) == 0)
-            dd->mode = DETECT_TLS_VALIDITY_RA;
+            dd->mode |= DETECT_TLS_VALIDITY_RA;
     }
 
     if (strlen(range) != 0 && strlen(mode) != 0) {
@@ -337,6 +335,10 @@ static DetectTlsValidityData *DetectTlsValidityParse (char *rawstr)
         goto error;
     }
 
+    if (dd->mode == 0) {
+        dd->mode |= DETECT_TLS_VALIDITY_EQ;
+    }
+
     /* set the first value */
     dd->epoch = DateStringToEpoch(value1);
     if (dd->epoch == -1)
@@ -344,7 +346,7 @@ static DetectTlsValidityData *DetectTlsValidityParse (char *rawstr)
 
     /* set the second value if specified */
     if (strlen(value2) > 0) {
-        if (dd->mode != DETECT_TLS_VALIDITY_RA) {
+        if (!(dd->mode & DETECT_TLS_VALIDITY_RA)) {
             SCLogError(SC_ERR_INVALID_ARGUMENT,
                 "Multiple tls validity values specified but mode is not range");
             goto error;
index 1589821ab4bba6bca9d536ebac68f9a96e1606b4..382b028ef5560711cf9b03d973420abceeacc2e1 100644 (file)
 #ifndef __DETECT_TLS_VALIDITY_H__
 #define __DETECT_TLS_VALIDITY_H__
 
-#define DETECT_TLS_VALIDITY_LT 0
-#define DETECT_TLS_VALIDITY_EQ 1
-#define DETECT_TLS_VALIDITY_GT 2
-#define DETECT_TLS_VALIDITY_RA 3
+#define DETECT_TLS_VALIDITY_EQ (1)    /* equal */
+#define DETECT_TLS_VALIDITY_LT (1<<1) /* less than */
+#define DETECT_TLS_VALIDITY_GT (1<<2) /* greater than */
+#define DETECT_TLS_VALIDITY_RA (1<<3) /* range */
 
 #define DETECT_TLS_TYPE_NOTBEFORE 0
 #define DETECT_TLS_TYPE_NOTAFTER  1