]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
ctl/filestore: Add check for filestore directory
authorShivani Bhardwaj <shivanib134@gmail.com>
Sat, 13 Apr 2019 18:39:06 +0000 (00:09 +0530)
committerVictor Julien <victor@inliniac.net>
Mon, 9 Sep 2019 17:12:38 +0000 (19:12 +0200)
Up until now, suricatactl would delete any directory that is provided as
an argument on command line. This patch adds a basic test for the
directories `tmp`, `00` and `ff` in order to justify that the provided
directory is actually a filestore directory.

Additionally, some code has been broken up and made more readable and
pythonic.

Closes redmine ticket #2843

python/suricata/ctl/filestore.py

index 076e4ef310c1c80d295c4d83f61b602a5b0844b0..2901f597e2f984479d667d93ac33d771445e3ee7 100644 (file)
@@ -82,22 +82,32 @@ def remove_file(path, dry_run):
     return size
 
 
-def prune(args):
+def set_logger_level(args):
     if args.verbose:
         logger.setLevel(logging.DEBUG)
     if args.quiet:
         logger.setLevel(logging.WARNING)
 
-    if not args.directory:
-        print(
-            "error: the filestore directory must be provided with --directory",
-            file=sys.stderr)
-        return 1
 
-    if not args.age:
-        print("error: no age provided, nothing to do", file=sys.stderr)
-        return 1
+def perform_sanity_checks(args):
+    set_logger_level(args)
+    err_msg = {
+            "directory": "filestore directory must be provided",
+            "age": "no age provided, nothing to do",
+            }
+    for val, msg in err_msg.items():
+        if not getattr(args, val):
+            print("Error: {}".format(msg), file=sys.stderr)
+            sys.exit(1)
+    required_dirs = ["tmp", "00", "ff"]
+    for required_dir in required_dirs:
+        if not os.path.exists(os.path.join(args.directory, required_dir)):
+            logger.error("Provided directory is not a filestore directory")
+            sys.exit(1)
+
 
+def prune(args):
+    perform_sanity_checks(args)
     age = parse_age(args.age)
     now = time.time()
     size = 0