summaryrefslogtreecommitdiffstats
path: root/suricata/update/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'suricata/update/util.py')
-rw-r--r--suricata/update/util.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/suricata/update/util.py b/suricata/update/util.py
new file mode 100644
index 0000000..50788d8
--- /dev/null
+++ b/suricata/update/util.py
@@ -0,0 +1,98 @@
+# Copyright (C) 2017 Open Information Security Foundation
+# Copyright (c) 2013 Jason Ish
+#
+# 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.
+
+""" Module for utility functions that don't really fit anywhere else. """
+
+import hashlib
+import tempfile
+import atexit
+import shutil
+import zipfile
+
+def md5_hexdigest(filename):
+ """ Compute the MD5 checksum for the contents of the provided filename.
+
+ :param filename: Filename to computer MD5 checksum of.
+
+ :returns: A string representing the hex value of the computed MD5.
+ """
+ return hashlib.md5(open(filename).read().encode()).hexdigest()
+
+def mktempdir(delete_on_exit=True):
+ """ Create a temporary directory that is removed on exit. """
+ tmpdir = tempfile.mkdtemp("suricata-update")
+ if delete_on_exit:
+ atexit.register(shutil.rmtree, tmpdir, ignore_errors=True)
+ return tmpdir
+
+class ZipArchiveReader:
+
+ def __init__(self, zipfile):
+ self.zipfile = zipfile
+ self.names = self.zipfile.namelist()
+
+ def __iter__(self):
+ return self
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.zipfile.close()
+
+ def next(self):
+ if self.names:
+ name = self.names.pop(0)
+ if name.endswith("/"):
+ # Is a directory, ignore
+ return self.next()
+ return name
+ raise StopIteration
+
+ def open(self, name):
+ return self.zipfile.open(name)
+
+ def read(self, name):
+ return self.zipfile.read(name)
+
+ @classmethod
+ def from_fileobj(cls, fileobj):
+ zf = zipfile.ZipFile(fileobj)
+ return cls(zf)
+
+GREEN = "\x1b[32m"
+BLUE = "\x1b[34m"
+REDB = "\x1b[1;31m"
+YELLOW = "\x1b[33m"
+RED = "\x1b[31m"
+YELLOWB = "\x1b[1;33m"
+ORANGE = "\x1b[38;5;208m"
+BRIGHT_MAGENTA = "\x1b[1;35m"
+BRIGHT_CYAN = "\x1b[1;36m"
+RESET = "\x1b[0m"
+
+def blue(msg):
+ return "%s%s%s" % (BLUE, msg, RESET)
+
+def bright_magenta(msg):
+ return "%s%s%s" % (BRIGHT_MAGENTA, msg, RESET)
+
+def bright_cyan(msg):
+ return "%s%s%s" % (BRIGHT_CYAN, msg, RESET)
+
+def orange(msg):
+ return "%s%s%s" % (ORANGE, msg, RESET)