datasets: fix hash table config

Example:

datasets:
  ua-seen:
    type: string
    state: ua-seen.lst
    hash:
      hash-size: 100000
      prealloc: 1000
      memcap: 256mb
pull/4275/head
Victor Julien 6 years ago
parent 9b64b6794b
commit e264a0cee8

@ -407,6 +407,10 @@ Dataset *DatasetFind(const char *name, enum DatasetTypes type)
Dataset *DatasetGet(const char *name, enum DatasetTypes type,
const char *save, const char *load)
{
if (strlen(name) > DATASET_NAME_MAX_LEN) {
return NULL;
}
SCMutexLock(&sets_lock);
Dataset *set = DatasetSearchByName(name);
if (set) {
@ -461,9 +465,12 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type,
SCLogDebug("set \'%s\' loading \'%s\' from \'%s\'", set->name, load, set->load);
}
char cnf_name[128];
snprintf(cnf_name, sizeof(cnf_name), "datasets.%s.hash", name);
switch (type) {
case DATASET_TYPE_MD5:
set->hash = THashInit(name, sizeof(Md5Type), Md5StrSet,
set->hash = THashInit(cnf_name, sizeof(Md5Type), Md5StrSet,
Md5StrFree, Md5StrHash, Md5StrCompare);
if (set->hash == NULL)
goto out_err;
@ -471,7 +478,7 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type,
goto out_err;
break;
case DATASET_TYPE_STRING:
set->hash = THashInit(name, sizeof(StringType), StringSet,
set->hash = THashInit(cnf_name, sizeof(StringType), StringSet,
StringFree, StringHash, StringCompare);
if (set->hash == NULL)
goto out_err;
@ -479,7 +486,7 @@ Dataset *DatasetGet(const char *name, enum DatasetTypes type,
goto out_err;
break;
case DATASET_TYPE_SHA256:
set->hash = THashInit(name, sizeof(Sha256Type), Sha256StrSet,
set->hash = THashInit(cnf_name, sizeof(Sha256Type), Sha256StrSet,
Sha256StrFree, Sha256StrHash, Sha256StrCompare);
if (set->hash == NULL)
goto out_err;
@ -507,8 +514,6 @@ out_err:
return NULL;
}
#define SETNAME_MAX 63
int DatasetsInit(void)
{
SCLogDebug("datasets start");
@ -527,9 +532,9 @@ int DatasetsInit(void)
char load[PATH_MAX] = "";
const char *set_name = iter->name;
if (strlen(set_name) > SETNAME_MAX) {
if (strlen(set_name) > DATASET_NAME_MAX_LEN) {
FatalError(SC_ERR_CONF_NAME_TOO_LONG, "set name '%s' too long, max %d chars",
set_name, SETNAME_MAX);
set_name, DATASET_NAME_MAX_LEN);
}
ConfNode *set_type =

@ -32,8 +32,9 @@ enum DatasetTypes {
DATASET_TYPE_SHA256,
};
#define DATASET_NAME_MAX_LEN 63
typedef struct Dataset {
char name[64];
char name[DATASET_NAME_MAX_LEN + 1];
enum DatasetTypes type;
uint32_t id;

@ -315,7 +315,7 @@ int DetectDatasetSetup (DetectEngineCtx *de_ctx, Signature *s, const char *rawst
DetectDatasetData *cd = NULL;
SigMatch *sm = NULL;
uint8_t cmd = 0;
char cmd_str[16] = "", name[64] = "";
char cmd_str[16] = "", name[DATASET_NAME_MAX_LEN + 1] = "";
enum DatasetTypes type = DATASET_TYPE_NOTSET;
char load[PATH_MAX] = "";
char save[PATH_MAX] = "";

Loading…
Cancel
Save