]> git.ipfire.org Git - thirdparty/suricata-update.git/commitdiff
Fix check-versions command
authorShivani Bhardwaj <shivanib134@gmail.com>
Wed, 9 Oct 2019 18:26:30 +0000 (23:56 +0530)
committerJason Ish <jason.ish@oisf.net>
Fri, 11 Oct 2019 15:17:04 +0000 (09:17 -0600)
This patch addresses the following issues:
1. Checks wherever code could fail
2. Proper handling of dev and stable versions
3. Small optimizations

suricata/update/commands/checkversions.py
suricata/update/sources.py

index c4f0bdbe8edf2c2170cd650f1ae28f6a7ea939f4..98a0f3857306c5f2894d3747ab46a1bf823421b7 100644 (file)
@@ -26,33 +26,38 @@ def register(parser):
 
 
 def check_version(suricata_version):
+    if "dev" in suricata_version.full:
+        logger.warning("Development version of Suricata found: %s. "
+                "Skipping version check.", suricata_version.full)
+        return
+
     index_filename = sources.get_index_filename()
     if not os.path.exists(index_filename):
         logger.warning("No index exists, will use bundled index.")
         logger.warning("Please run suricata-update update-sources.")
     index = sources.Index(index_filename)
     version = index.get_versions()
-    recommended = engine.parse_version(version['suricata']['recommended'])
-    if suricata_version.full in recommended.full:
-        logger.info("Suricata version %s is up to date", suricata_version.full)
-    elif suricata_version.short > recommended.short:
-        return None
-    elif "dev" in suricata_version.full:
-        if (suricata_version.short not in recommended.short or
-                suricata_version.short not in version['suricata']) and \
-                float(suricata_version.short) < float(recommended.short):
-            logger.warning(
-                "Suricata version %s has reached EOL. Please upgrade to %s.",
+    recommended = engine.parse_version(version["suricata"]["recommended"])
+    if not recommended:
+        logger.error("Recommended version was not parsed properly")
+        sys.exit(1)
+    # In case index is out of date
+    if float(suricata_version.short) > float(recommended.short):
+        return
+    # Evaluate if the installed version is present in index
+    upgrade_version = version["suricata"].get(suricata_version.short)
+    if not upgrade_version:
+        logger.warning("Suricata version %s has reached EOL. Please upgrade to %s.",
                 suricata_version.full, recommended.full)
-        elif float(suricata_version.short) >= float(recommended.short):
-            logger.info(
-                "Suricata version %s is up to date", suricata_version.full)
-    elif suricata_version.short in version['suricata'] and \
-            suricata_version.full not in recommended.full:
+        return
+    if suricata_version.full == upgrade_version:
+        logger.info("Suricata version %s is up to date", suricata_version.full)
+    elif upgrade_version == recommended.full:
         logger.warning(
             "Suricata version %s is outdated. Please upgrade to %s.",
             suricata_version.full, recommended.full)
     else:
         logger.warning(
-            "Suricata version %s has reached EOL. Please upgrade to %s.",
-            suricata_version.full, recommended.full)
+            "Suricata version %s is outdated. Please upgrade to %s or %s.",
+            suricata_version.full, upgrade_version, recommended.full)
+
index f0ce7088df739f52ed647121e9e22e44522b4d08..78b5cbb55b668af1945bf1e2a268a09f63456c56 100644 (file)
@@ -134,7 +134,8 @@ class Index:
         try:
             return self.index["versions"]
         except KeyError:
-            raise Exception("Version information not in index")
+            logger.error("Version information not in index")
+            sys.exit(1)
 
 def load_source_index(config):
     return Index(get_index_filename())