]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
multi-detect: improve error handling
authorVictor Julien <victor@inliniac.net>
Mon, 23 Nov 2015 13:58:34 +0000 (14:58 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 23 Nov 2015 15:58:33 +0000 (16:58 +0100)
src/detect-engine.c
src/detect-engine.h
src/suricata.c

index 63c1dafb4561eeebca55dae69af9af9826a28c5b..f5b2edf0da6f9de8527277dfc8ca9594b9f63a51 100644 (file)
@@ -2043,7 +2043,7 @@ int DetectEngineReloadTenantBlocking(uint32_t tenant_id, const char *yaml, int r
  *  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;
@@ -2156,11 +2156,11 @@ void DetectEngineMultiTenantSetup(void)
                 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");
                 }
             }
         }
@@ -2176,11 +2176,13 @@ void DetectEngineMultiTenantSetup(void)
                     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),
@@ -2201,7 +2203,8 @@ void DetectEngineMultiTenantSetup(void)
                     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;
                 }
@@ -2214,13 +2217,15 @@ void DetectEngineMultiTenantSetup(void)
         }
 
         /* 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)
index 7b62171007b25db0d68755eb771a0f60ef1ee6c0..70b18133fcb3d7267b5f796e489b427fff73f74e 100644 (file)
@@ -79,7 +79,7 @@ int DetectEngineReload(const char *filename, SCInstance *suri);
 int DetectEngineEnabled(void);
 int DetectEngineMTApply(void);
 int DetectEngineMultiTenantEnabled(void);
-void DetectEngineMultiTenantSetup(void);
+int DetectEngineMultiTenantSetup(void);
 
 int DetectEngineReloadStart(void);
 int DetectEngineReloadIsStart(void);
index 876418e90baf283bff465cbfd87f9fe6f04f5948..b368f21d07f5a5e56c051e03dbe895f43c1a8065 100644 (file)
@@ -2291,7 +2291,11 @@ int main(int argc, char **argv)
         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 {