* Tenants and mappings are optional, and can also dynamically be added
* and removed from the unix socket.
*/
-void DetectEngineMultiTenantSetup(void)
+int DetectEngineMultiTenantSetup(void)
{
enum DetectEngineTenantSelectors tenant_selector = TENANT_SELECTOR_UNKNOWN;
DetectEngineMasterCtx *master = &g_master_de_ctx;
SCLogNotice("no tenant traffic mappings defined, "
"tenants won't be used until mappings are added");
} else {
- if (failure_fatal)
- SCLogWarning(SC_ERR_MT_NO_MAPPING, "no multi-detect mappings defined");
- else {
+ if (failure_fatal) {
SCLogError(SC_ERR_MT_NO_MAPPING, "no multi-detect mappings defined");
goto error;
+ } else {
+ SCLogWarning(SC_ERR_MT_NO_MAPPING, "no multi-detect mappings defined");
}
}
}
goto bad_tenant;
}
ConfNode *id_node = ConfNodeLookupChild(tenant_node, "id");
- if (id_node == NULL)
+ if (id_node == NULL) {
goto bad_tenant;
+ }
ConfNode *yaml_node = ConfNodeLookupChild(tenant_node, "yaml");
- if (yaml_node == NULL)
+ if (yaml_node == NULL) {
goto bad_tenant;
+ }
uint32_t tenant_id = 0;
if (ByteExtractStringUint32(&tenant_id, 10, strlen(id_node->val),
goto bad_tenant;
}
- if (DetectLoaderSetupLoadTenant(tenant_id, yaml_node->val) != 0) {
+ int r = DetectLoaderSetupLoadTenant(tenant_id, yaml_node->val);
+ if (r < 0) {
/* error logged already */
goto bad_tenant;
}
}
/* wait for our loaders to complete their tasks */
- if (DetectLoadersSync() != 0)
+ if (DetectLoadersSync() != 0) {
goto error;
+ }
} else {
SCLogDebug("multi-detect not enabled (multi tenancy)");
}
+ return 0;
error:
- return;
+ return -1;
}
static uint32_t DetectEngineTentantGetIdFromVlanId(const void *ctx, const Packet *p)
int DetectEngineEnabled(void);
int DetectEngineMTApply(void);
int DetectEngineMultiTenantEnabled(void);
-void DetectEngineMultiTenantSetup(void);
+int DetectEngineMultiTenantSetup(void);
int DetectEngineReloadStart(void);
int DetectEngineReloadIsStart(void);
int default_tenant = 0;
if (mt_enabled)
(void)ConfGetBool("multi-detect.default", &default_tenant);
- DetectEngineMultiTenantSetup();
+ if (DetectEngineMultiTenantSetup() == -1) {
+ SCLogError(SC_ERR_INITIALIZATION, "initializing multi-detect "
+ "detection engine contexts failed.");
+ exit(EXIT_FAILURE);
+ }
if (suri.delayed_detect || (mt_enabled && !default_tenant)) {
de_ctx = DetectEngineCtxInitMinimal();
} else {