detect/dataset: fix 'state' path handling

pull/4177/head
Victor Julien 5 years ago
parent e36a963196
commit a3e5b91668

@ -148,8 +148,12 @@ static int DatasetLoadMd5(Dataset *set)
return 0; return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load); 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) { if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s", SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno)); set->load, strerror(errno));
@ -213,8 +217,12 @@ static int DatasetLoadSha256(Dataset *set)
return 0; return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load); 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) { if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s", SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno)); set->load, strerror(errno));
@ -274,8 +282,12 @@ static int DatasetLoadString(Dataset *set)
return 0; return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load); 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) { if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s", SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno)); set->load, strerror(errno));

@ -362,6 +362,13 @@ int DetectDatasetSetup (DetectEngineCtx *de_ctx, Signature *s, const char *rawst
} else if (strlen(save) != 0 && strlen(load) == 0) { } else if (strlen(save) != 0 && strlen(load) == 0) {
if (SetupSavePath(de_ctx, save, sizeof(save)) != 0) if (SetupSavePath(de_ctx, save, sizeof(save)) != 0)
return -1; 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); SCLogDebug("name '%s' load '%s' save '%s'", name, load, save);

Loading…
Cancel
Save