}
de_ctx->flags |= DE_QUIET;
- SCRConfGenerateValidDummyReferenceConfigFD01();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateValidDummyReferenceConfigFD01();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
s = de_ctx->sig_list = SigInit(de_ctx, "alert icmp any any -> any any "
"(msg:\"One reference\"; reference:one,001-2010; sid:2;)");
}
de_ctx->flags |= DE_QUIET;
- SCRConfGenerateValidDummyReferenceConfigFD01();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateValidDummyReferenceConfigFD01();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
s = de_ctx->sig_list = SigInit(de_ctx, "alert icmp any any -> any any "
"(msg:\"Two references\"; "
}
de_ctx->flags |= DE_QUIET;
- SCRConfGenerateValidDummyReferenceConfigFD01();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd =SCRConfGenerateValidDummyReferenceConfigFD01();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
s = de_ctx->sig_list = SigInit(de_ctx, "alert icmp any any -> any any "
"(msg:\"invalid ref\"; "
/* Holds a pointer to the default path for the reference.config file */
static const char *file_path = SC_RCONF_DEFAULT_FILE_PATH;
-static FILE *fd = NULL;
static pcre *regex = NULL;
static pcre_extra *regex_study = NULL;
* \retval 0 On success.
* \retval -1 On failure.
*/
-static int SCRConfInitContextAndLocalResources(DetectEngineCtx *de_ctx)
+static FILE *SCRConfInitContextAndLocalResources(DetectEngineCtx *de_ctx, FILE *fd)
{
char *filename = NULL;
const char *eb = NULL;
goto error;
}
- return 0;
+ return fd;
error:
if (de_ctx->reference_conf_ht != NULL) {
regex_study = NULL;
}
- return -1;
+ return NULL;
}
/**
* \brief Releases local resources used by the Reference Config API.
*/
-static void SCRConfDeInitLocalResources(DetectEngineCtx *de_ctx)
+static void SCRConfDeInitLocalResources(DetectEngineCtx *de_ctx, FILE *fd)
{
- if (fd != NULL)
+ if (fd != NULL) {
fclose(fd);
+ fd = NULL;
+ }
file_path = SC_RCONF_DEFAULT_FILE_PATH;
- fd = NULL;
if (regex != NULL) {
pcre_free(regex);
*
* \param de_ctx Pointer to the Detection Engine Context.
*/
-static void SCRConfParseFile(DetectEngineCtx *de_ctx)
+static void SCRConfParseFile(DetectEngineCtx *de_ctx, FILE *fd)
{
char line[1024];
uint8_t i = 1;
* \retval 0 On success.
* \retval -1 On failure.
*/
-int SCRConfLoadReferenceConfigFile(DetectEngineCtx *de_ctx)
+int SCRConfLoadReferenceConfigFile(DetectEngineCtx *de_ctx, FILE *fd)
{
- if (SCRConfInitContextAndLocalResources(de_ctx) == -1) {
+ fd = SCRConfInitContextAndLocalResources(de_ctx, fd);
+ if (fd == NULL) {
#ifdef UNITTESTS
if (RunmodeIsUnittests() && fd == NULL) {
return -1;
return -1;
}
- SCRConfParseFile(de_ctx);
- SCRConfDeInitLocalResources(de_ctx);
+ SCRConfParseFile(de_ctx, fd);
+ SCRConfDeInitLocalResources(de_ctx, fd);
return 0;
}
* \brief Creates a dummy reference config, with all valid references, for
* testing purposes.
*/
-void SCRConfGenerateValidDummyReferenceConfigFD01(void)
+FILE *SCRConfGenerateValidDummyReferenceConfigFD01(void)
{
const char *buffer =
"config reference: one http://www.one.com\n"
"config reference: one http://www.one.com\n"
"config reference: three http://www.three.com\n";
- fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
+ FILE *fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
if (fd == NULL)
SCLogDebug("Error with SCFmemopen() called by Reference Config test code");
- return;
+ return fd;
}
/**
* \brief Creates a dummy reference config, with some valid references and a
* couple of invalid references, for testing purposes.
*/
-void SCRConfGenerateInValidDummyReferenceConfigFD02(void)
+FILE *SCRConfGenerateInValidDummyReferenceConfigFD02(void)
{
const char *buffer =
"config reference: one http://www.one.com\n"
"config reference: four\n"
"config reference five http://www.five.com\n";
- fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
+ FILE *fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
if (fd == NULL)
SCLogDebug("Error with SCFmemopen() called by Reference Config test code");
- return;
+ return fd;
}
/**
* \brief Creates a dummy reference config, with all invalid references, for
* testing purposes.
*/
-void SCRConfGenerateInValidDummyReferenceConfigFD03(void)
+FILE *SCRConfGenerateInValidDummyReferenceConfigFD03(void)
{
const char *buffer =
"config reference one http://www.one.com\n"
"config reference_: three http://www.three.com\n"
"config reference: four\n";
- fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
+ FILE *fd = SCFmemopen((void *)buffer, strlen(buffer), "r");
if (fd == NULL)
SCLogDebug("Error with SCFmemopen() called by Reference Config test code");
- return;
-}
-
-/**
- * \brief Deletes the FD, if set by the other testing functions.
- */
-void SCRConfDeleteDummyReferenceConfigFD(void)
-{
- if (fd != NULL) {
- fclose(fd);
- fd = NULL;
- }
-
- return;
+ return fd;
}
/**
if (de_ctx == NULL)
return result;
- SCRConfGenerateValidDummyReferenceConfigFD01();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateValidDummyReferenceConfigFD01();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;
if (de_ctx == NULL)
return result;
- SCRConfGenerateInValidDummyReferenceConfigFD03();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateInValidDummyReferenceConfigFD03();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;
if (de_ctx == NULL)
return result;
- SCRConfGenerateInValidDummyReferenceConfigFD02();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateInValidDummyReferenceConfigFD02();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;
if (de_ctx == NULL)
return 0;
- SCRConfGenerateValidDummyReferenceConfigFD01();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateValidDummyReferenceConfigFD01();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;
if (de_ctx == NULL)
return 0;
- SCRConfGenerateInValidDummyReferenceConfigFD03();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateInValidDummyReferenceConfigFD03();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;
if (de_ctx == NULL)
return 0;
- SCRConfGenerateInValidDummyReferenceConfigFD02();
- SCRConfLoadReferenceConfigFile(de_ctx);
- SCRConfDeleteDummyReferenceConfigFD();
+ FILE *fd = SCRConfGenerateInValidDummyReferenceConfigFD02();
+ SCRConfLoadReferenceConfigFile(de_ctx, fd);
if (de_ctx->reference_conf_ht == NULL)
goto end;