summaryrefslogtreecommitdiffstats
path: root/suricata/update/commands/listsources.py
diff options
context:
space:
mode:
Diffstat (limited to 'suricata/update/commands/listsources.py')
-rw-r--r--suricata/update/commands/listsources.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/suricata/update/commands/listsources.py b/suricata/update/commands/listsources.py
new file mode 100644
index 0000000..d35c3cd
--- /dev/null
+++ b/suricata/update/commands/listsources.py
@@ -0,0 +1,116 @@
+# Copyright (C) 2017 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
+# Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# version 2 along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+from __future__ import print_function
+
+import logging
+
+from suricata.update import config
+from suricata.update import sources
+from suricata.update import util
+from suricata.update import exceptions
+
+logger = logging.getLogger()
+
+def register(parser):
+ parser.add_argument("--free", action="store_true",
+ default=False, help="List all freely available sources")
+ parser.add_argument("--enabled", action="store_true",
+ help="List all enabled sources")
+ parser.add_argument("--all", action="store_true",
+ help="List all sources (including deprecated and obsolete)")
+ parser.set_defaults(func=list_sources)
+
+def list_sources():
+ enabled = config.args().enabled or \
+ config.args().subcommand == "list-enabled-sources"
+
+ if enabled:
+ found = False
+
+ # First list sources from the main config.
+ config_sources = config.get("sources")
+ if config_sources:
+ found = True
+ print("From %s:" % (config.filename))
+ for source in config_sources:
+ print(" - %s" % (source))
+
+ # And local files.
+ local = config.get("local")
+ if local:
+ found = True
+ print("Local files/directories:")
+ for filename in local:
+ print(" - %s" % (filename))
+
+ enabled_sources = sources.get_enabled_sources()
+ if enabled_sources:
+ found = True
+ print("Enabled sources:")
+ for source in enabled_sources.values():
+ print(" - %s" % (source["source"]))
+
+ # If no enabled sources were found, log it.
+ if not found:
+ logger.warning("No enabled sources.")
+ return 0
+
+ free_only = config.args().free
+ if not sources.source_index_exists(config):
+ logger.warning("Source index does not exist, will use bundled one.")
+ logger.warning("Please run suricata-update update-sources.")
+
+ index = sources.load_source_index(config)
+ for name, source in index.get_sources().items():
+ is_not_free = source.get("subscribe-url")
+ if free_only and is_not_free:
+ continue
+ if not config.args().all:
+ if source.get("deprecated") is not None or \
+ source.get("obsolete") is not None:
+ continue
+ print("%s: %s" % (util.bright_cyan("Name"), util.bright_magenta(name)))
+ print(" %s: %s" % (
+ util.bright_cyan("Vendor"), util.bright_magenta(source["vendor"])))
+ print(" %s: %s" % (
+ util.bright_cyan("Summary"), util.bright_magenta(source["summary"])))
+ print(" %s: %s" % (
+ util.bright_cyan("License"), util.bright_magenta(source["license"])))
+ if "tags" in source:
+ print(" %s: %s" % (
+ util.bright_cyan("Tags"),
+ util.bright_magenta(", ".join(source["tags"]))))
+ if "replaces" in source:
+ print(" %s: %s" % (
+ util.bright_cyan("Replaces"),
+ util.bright_magenta(", ".join(source["replaces"]))))
+ if "parameters" in source:
+ print(" %s: %s" % (
+ util.bright_cyan("Parameters"),
+ util.bright_magenta(", ".join(source["parameters"]))))
+ if "subscribe-url" in source:
+ print(" %s: %s" % (
+ util.bright_cyan("Subscription"),
+ util.bright_magenta(source["subscribe-url"])))
+ if "deprecated" in source:
+ print(" %s: %s" % (
+ util.orange("Deprecated"),
+ util.bright_magenta(source["deprecated"])))
+ if "obsolete" in source:
+ print(" %s: %s" % (
+ util.orange("Obsolete"),
+ util.bright_magenta(source["obsolete"])))