From: Eric Leblond Date: Mon, 18 Jan 2021 21:11:15 +0000 (+0100) Subject: datasets: add dataset-clear command X-Git-Tag: suricata-7.0.0-rc1~474 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f25e48897f0e1e8177c252d022dd25a3e22853e;p=thirdparty%2Fsuricata.git datasets: add dataset-clear command Ticket: #5184 --- diff --git a/src/runmode-unix-socket.c b/src/runmode-unix-socket.c index c302519464..c4981e9323 100644 --- a/src/runmode-unix-socket.c +++ b/src/runmode-unix-socket.c @@ -772,6 +772,42 @@ TmEcode UnixSocketDatasetDump(json_t *cmd, json_t *answer, void *data) SCReturnInt(TM_ECODE_OK); } +TmEcode UnixSocketDatasetClear(json_t *cmd, json_t *answer, void *data) +{ + /* 1 get dataset name */ + json_t *narg = json_object_get(cmd, "setname"); + if (!json_is_string(narg)) { + json_object_set_new(answer, "message", json_string("setname is not a string")); + return TM_ECODE_FAILED; + } + const char *set_name = json_string_value(narg); + + /* 2 get the data type */ + json_t *targ = json_object_get(cmd, "settype"); + if (!json_is_string(targ)) { + json_object_set_new(answer, "message", json_string("settype is not a string")); + return TM_ECODE_FAILED; + } + const char *type = json_string_value(targ); + + enum DatasetTypes t = DatasetGetTypeFromString(type); + if (t == DATASET_TYPE_NOTSET) { + json_object_set_new(answer, "message", json_string("unknown settype")); + return TM_ECODE_FAILED; + } + + Dataset *set = DatasetFind(set_name, t); + if (set == NULL) { + json_object_set_new(answer, "message", json_string("set not found or wrong type")); + return TM_ECODE_FAILED; + } + + THashCleanup(set->hash); + + json_object_set_new(answer, "message", json_string("dataset cleared")); + return TM_ECODE_OK; +} + /** * \brief Command to add a tenant handler * diff --git a/src/runmode-unix-socket.h b/src/runmode-unix-socket.h index 31c59ee2f5..469dc771c9 100644 --- a/src/runmode-unix-socket.h +++ b/src/runmode-unix-socket.h @@ -36,6 +36,7 @@ float MemcapsGetPressure(void); TmEcode UnixSocketDatasetAdd(json_t *cmd, json_t* answer, void *data); TmEcode UnixSocketDatasetRemove(json_t *cmd, json_t* answer, void *data); TmEcode UnixSocketDatasetDump(json_t *cmd, json_t *answer, void *data); +TmEcode UnixSocketDatasetClear(json_t *cmd, json_t *answer, void *data); TmEcode UnixSocketRegisterTenantHandler(json_t *cmd, json_t* answer, void *data); TmEcode UnixSocketUnregisterTenantHandler(json_t *cmd, json_t* answer, void *data); TmEcode UnixSocketRegisterTenant(json_t *cmd, json_t* answer, void *data); diff --git a/src/unix-manager.c b/src/unix-manager.c index 4d0203d933..3fdcb73fe5 100644 --- a/src/unix-manager.c +++ b/src/unix-manager.c @@ -1089,6 +1089,8 @@ int UnixManagerInit(void) UnixManagerRegisterCommand( "get-flow-stats-by-id", UnixSocketGetFlowStatsById, &command, UNIX_CMD_TAKE_ARGS); UnixManagerRegisterCommand("dataset-dump", UnixSocketDatasetDump, NULL, 0); + UnixManagerRegisterCommand( + "dataset-clear", UnixSocketDatasetClear, &command, UNIX_CMD_TAKE_ARGS); return 0; }