]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect/dataset: fix 'state' path handling 4177/head
authorVictor Julien <victor@inliniac.net>
Thu, 5 Sep 2019 13:00:04 +0000 (15:00 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 5 Sep 2019 13:01:42 +0000 (15:01 +0200)
src/datasets.c
src/detect-dataset.c

index b2f68e8bcb00140410b86582b584b7e6ee5186be..2da5db1b517f037bf14ae3debcabdba1df414ec3 100644 (file)
@@ -148,8 +148,12 @@ static int DatasetLoadMd5(Dataset *set)
         return 0;
 
     SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+    const char *fopen_mode = "r";
+    if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+        fopen_mode = "a+";
+    }
 
-    FILE *fp = fopen(set->load, "r");
+    FILE *fp = fopen(set->load, fopen_mode);
     if (fp == NULL) {
         SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
                 set->load, strerror(errno));
@@ -213,8 +217,12 @@ static int DatasetLoadSha256(Dataset *set)
         return 0;
 
     SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+    const char *fopen_mode = "r";
+    if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+        fopen_mode = "a+";
+    }
 
-    FILE *fp = fopen(set->load, "r");
+    FILE *fp = fopen(set->load, fopen_mode);
     if (fp == NULL) {
         SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
                 set->load, strerror(errno));
@@ -274,8 +282,12 @@ static int DatasetLoadString(Dataset *set)
         return 0;
 
     SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+    const char *fopen_mode = "r";
+    if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+        fopen_mode = "a+";
+    }
 
-    FILE *fp = fopen(set->load, "r");
+    FILE *fp = fopen(set->load, fopen_mode);
     if (fp == NULL) {
         SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
                 set->load, strerror(errno));
index c3413b857de0f90b574f8cffacf033d2e746c5ab..a696c074975d00b309a0186afab9c0cf627055e8 100644 (file)
@@ -362,6 +362,13 @@ int DetectDatasetSetup (DetectEngineCtx *de_ctx, Signature *s, const char *rawst
     } else if (strlen(save) != 0 && strlen(load) == 0) {
         if (SetupSavePath(de_ctx, save, sizeof(save)) != 0)
             return -1;
+    /* use 'save' logic for 'state', but put the resulting
+     * path into 'load' as well. */
+    } else if (strlen(save) != 0 && strlen(load) != 0 &&
+            strcmp(save, load) == 0) {
+        if (SetupSavePath(de_ctx, save, sizeof(save)) != 0)
+            return -1;
+        strlcpy(load, save, sizeof(load));
     }
 
     SCLogDebug("name '%s' load '%s' save '%s'", name, load, save);