dataset:<cmd>,<name>,<options>;
- dataset:<set|isset|isnotset>,<name> \
+ dataset:<set|unset|isset|isnotset>,<name> \
[, type <string|md5|sha256|ipv4|ip>, save <file name>, load <file name>, state <file name>, memcap <size>, hashsize <size>];
type <type>
return DatasetOpSerialized(set, string, DatasetRemoveString, DatasetRemoveMd5,
DatasetRemoveSha256, DatasetRemoveIPv4, DatasetRemoveIPv6);
}
+
+int DatasetRemove(Dataset *set, const uint8_t *data, const uint32_t data_len)
+{
+ if (set == NULL)
+ return -1;
+
+ switch (set->type) {
+ case DATASET_TYPE_STRING:
+ return DatasetRemoveString(set, data, data_len);
+ case DATASET_TYPE_MD5:
+ return DatasetRemoveMd5(set, data, data_len);
+ case DATASET_TYPE_SHA256:
+ return DatasetRemoveSha256(set, data, data_len);
+ case DATASET_TYPE_IPV4:
+ return DatasetRemoveIPv4(set, data, data_len);
+ case DATASET_TYPE_IPV6:
+ return DatasetRemoveIPv6(set, data, data_len);
+ }
+ return -1;
+}
Dataset *DatasetGet(const char *name, enum DatasetTypes type, const char *save, const char *load,
uint64_t memcap, uint32_t hashsize);
int DatasetAdd(Dataset *set, const uint8_t *data, const uint32_t data_len);
+int DatasetRemove(Dataset *set, const uint8_t *data, const uint32_t data_len);
int DatasetLookup(Dataset *set, const uint8_t *data, const uint32_t data_len);
DataRepResultType DatasetLookupwRep(Dataset *set, const uint8_t *data, const uint32_t data_len,
const DataRepType *rep);
return 1;
break;
}
+ case DETECT_DATASET_CMD_UNSET: {
+ int r = DatasetRemove(sd->set, data, data_len);
+ if (r == 1)
+ return 1;
+ break;
+ }
default:
abort();
}