*found = true;
- const char *val = json_string_value(key);
+ char val[DATAJSON_JSON_LENGTH];
+ strlcpy(val, json_string_value(key), DATAJSON_JSON_LENGTH - 1);
DataJsonType elt = { .value = NULL, .len = 0 };
+ if (set->remove_key) {
+ json_object_del(value, json_key);
+ }
elt.value = json_dumps(value, JSON_COMPACT);
elt.len = strlen(elt.value);
return 0;
}
DataJsonType elt = { .value = NULL, .len = 0 };
+ if (set->remove_key) {
+ json_object_del(value, json_key);
+ }
elt.value = json_dumps(value, JSON_COMPACT);
elt.len = strlen(elt.value);
return 0;
}
DataJsonType elt = { .value = NULL, .len = 0 };
+ if (set->remove_key) {
+ json_object_del(value, json_key);
+ }
elt.value = json_dumps(value, JSON_COMPACT);
elt.len = strlen(elt.value);
return 0;
}
DataJsonType elt = { .value = NULL, .len = 0 };
+ if (set->remove_key) {
+ json_object_del(value, json_key);
+ }
elt.value = json_dumps(value, JSON_COMPACT);
elt.len = strlen(elt.value);
return 0;
}
DataJsonType elt = { .value = NULL, .len = 0 };
+ if (set->remove_key) {
+ json_object_del(value, json_key);
+ }
elt.value = json_dumps(value, JSON_COMPACT);
elt.len = strlen(elt.value);
}
Dataset *DatajsonGet(const char *name, enum DatasetTypes type, const char *load, uint64_t memcap,
- uint32_t hashsize, char *json_key_value, char *json_array_key, DatasetFormats format)
+ uint32_t hashsize, char *json_key_value, char *json_array_key, DatasetFormats format,
+ bool remove_key)
{
uint64_t default_memcap = 0;
uint32_t default_hashsize = 0;
strlcpy(set->name, name, sizeof(set->name));
set->type = type;
+ set->remove_key = remove_key;
if (load && strlen(load)) {
strlcpy(set->load, load, sizeof(set->load));
SCLogDebug("set \'%s\' loading \'%s\' from \'%s\'", set->name, load, set->load);
enum DatasetTypes *type, char *load, size_t load_size, char *save, size_t save_size,
uint64_t *memcap, uint32_t *hashsize, DatasetFormats *format, char *value_key,
size_t value_key_size, char *array_key, size_t array_key_size, char *enrichment_key,
- size_t enrichment_key_size)
+ size_t enrichment_key_size, bool *remove_key)
{
bool cmd_set = false;
bool name_set = false;
name_set = true;
} else {
if (val == NULL) {
- return -1;
- }
-
- if (strcmp(key, "type") == 0) {
+ /* only non fixed place option without value is remove_key */
+ if (strcmp(key, "remove_key") == 0) {
+ *remove_key = true;
+ } else
+ return -1;
+ } else if (strcmp(key, "type") == 0) {
SCLogDebug("type %s", val);
if (strcmp(val, "md5") == 0) {
char value_key[SIG_JSON_CONTENT_KEY_LEN] = "";
char array_key[SIG_JSON_CONTENT_KEY_LEN] = "";
char enrichment_key[SIG_JSON_CONTENT_KEY_LEN] = "";
+ bool remove_key = false;
if (DetectBufferGetActiveList(de_ctx, s) == -1) {
SCLogError("datasets are only supported for sticky buffers");
if (!DetectDatasetParse(rawstr, cmd_str, sizeof(cmd_str), name, sizeof(name), &type, load,
sizeof(load), save, sizeof(save), &memcap, &hashsize, &format, value_key,
sizeof(value_key), array_key, sizeof(array_key), enrichment_key,
- sizeof(enrichment_key))) {
+ sizeof(enrichment_key), &remove_key)) {
return -1;
}
Dataset *set = NULL;
if (format == DATASET_FORMAT_JSON) {
- set = DatajsonGet(
- name, type, load, memcap, hashsize, value_key, array_key, DATASET_FORMAT_JSON);
+ set = DatajsonGet(name, type, load, memcap, hashsize, value_key, array_key,
+ DATASET_FORMAT_JSON, remove_key);
} else if (format == DATASET_FORMAT_JSONLINE) {
- set = DatajsonGet(
- name, type, load, memcap, hashsize, value_key, NULL, DATASET_FORMAT_JSONLINE);
+ set = DatajsonGet(name, type, load, memcap, hashsize, value_key, NULL,
+ DATASET_FORMAT_JSONLINE, remove_key);
} else {
set = DatasetGet(name, type, save, load, memcap, hashsize);
}