-/* Copyright (C) 2007-2016 Open Information Security Foundation
+/* Copyright (C) 2007-2021 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
int SCThresholdConfInitContext(DetectEngineCtx *de_ctx)
{
const char *filename = NULL;
+ int ret = 0;
#ifndef UNITTESTS
FILE *fd = NULL;
#else
}
#endif
- SCThresholdConfParseFile(de_ctx, fd);
+ if (SCThresholdConfParseFile(de_ctx, fd) < 0) {
+ SCLogWarning(
+ SC_WARN_THRESH_CONFIG, "Error loading threshold configuration from %s", filename);
+ /* maintain legacy behavior so no errors unless config testing */
+ if (RunmodeGetCurrent() == RUNMODE_CONF_TEST) {
+ ret = -1;
+ }
+ goto error;
+ }
SCThresholdConfDeInitContext(de_ctx, fd);
#ifdef UNITTESTS
error:
SCThresholdConfDeInitContext(de_ctx, fd);
- return -1;
+
+return ret;
}
/**
* \param de_ctx Pointer to the Detection Engine Context.
* \param fd Pointer to file descriptor.
*/
-void SCThresholdConfParseFile(DetectEngineCtx *de_ctx, FILE *fp)
+int SCThresholdConfParseFile(DetectEngineCtx *de_ctx, FILE *fp)
{
char line[8192] = "";
int rule_num = 0;
int esc_pos = 0;
if (fp == NULL)
- return;
+ return -1;
while (fgets(line + esc_pos, (int)sizeof(line) - esc_pos, fp) != NULL) {
if (SCThresholdConfIsLineBlankOrComment(line)) {
esc_pos = SCThresholdConfLineIsMultiline(line);
if (esc_pos == 0) {
- rule_num++;
- SCLogDebug("Adding threshold.config rule num %"PRIu32"( %s )", rule_num, line);
- SCThresholdConfAddThresholdtype(line, de_ctx);
+ if (SCThresholdConfAddThresholdtype(line, de_ctx) < 0) {
+ if (RunmodeGetCurrent() == RUNMODE_CONF_TEST)
+ return -1;
+ } else {
+ SCLogDebug("Adding threshold.config rule num %" PRIu32 "( %s )", rule_num, line);
+ rule_num++;
+ }
}
}
SCLogInfo("Threshold config parsed: %d rule(s) found", rule_num);
- return;
+ return 0;
}
#ifdef UNITTESTS
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD01();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD01();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD01();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateInValidDummyFD02();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD03();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
Signature *s = de_ctx->sig_list;
SigMatch *m = DetectGetLastSMByListId(s, DETECT_SM_LIST_THRESHOLD,
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD04();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD05();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_DETECTION_FILTER, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD06();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig, DETECT_SM_LIST_THRESHOLD,
DETECT_DETECTION_FILTER, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD07();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD08();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD09();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD10();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD11();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigMatch *m = DetectGetLastSMByListId(sig,
DETECT_SM_LIST_SUPPRESS, DETECT_THRESHOLD, -1);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD11();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD11();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD11();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD11();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateInvalidDummyFD12();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
FAIL_IF_NULL(s->sm_arrays[DETECT_SM_LIST_SUPPRESS]);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateInvalidDummyFD13();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
FAIL_IF_NULL(s->sm_arrays[DETECT_SM_LIST_SUPPRESS]);
SigMatchData *smd = s->sm_arrays[DETECT_SM_LIST_SUPPRESS];
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD20();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
FAIL_IF_NULL(s->sm_arrays[DETECT_SM_LIST_SUPPRESS]);
FAIL_IF_NULL(s);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD20();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
FAIL_IF_NULL(s->sm_arrays[DETECT_SM_LIST_SUPPRESS]);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD22();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FAIL_IF_NOT_NULL(g_ut_threshold_fp);
g_ut_threshold_fp = SCThresholdConfGenerateValidDummyFD23();
FAIL_IF_NULL(g_ut_threshold_fp);
- SCThresholdConfInitContext(de_ctx);
+ FAIL_IF(-1 == SCThresholdConfInitContext(de_ctx));
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);