From ba6b73cd106aaa7fd53e4f1867fe7ce44b3bc2c7 Mon Sep 17 00:00:00 2001 From: Shivani Bhardwaj Date: Sun, 14 Apr 2019 00:09:06 +0530 Subject: [PATCH] ctl/filestore: Add check for filestore directory 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 | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/python/suricata/ctl/filestore.py b/python/suricata/ctl/filestore.py index 076e4ef310..2901f597e2 100644 --- a/python/suricata/ctl/filestore.py +++ b/python/suricata/ctl/filestore.py @@ -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