X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/c803b05273f016a3dbbe626e041c6dbecb6c4263..2ee88aeb76a2430ec0c7f86629bf66cfd0b6f564:/lib/utils.py?ds=sidebyside diff --git a/lib/utils.py b/lib/utils.py index 370ba62..48388ba 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -29,7 +29,6 @@ the command line scripts. import sys import os -import sha import time import subprocess import re @@ -47,6 +46,12 @@ import signal from cStringIO import StringIO +try: + from hashlib import sha1 +except ImportError: + import sha + sha1 = sha.new + from ganeti import errors from ganeti import constants @@ -337,7 +342,7 @@ def _FingerprintFile(filename): f = open(filename) - fp = sha.sha() + fp = sha1() while True: data = f.read(4096) if not data: @@ -1186,7 +1191,7 @@ def GenerateSecret(): @return: a sha1 hexdigest of a block of 64 random bytes """ - return sha.new(os.urandom(64)).hexdigest() + return sha1(os.urandom(64)).hexdigest() def EnsureDirs(dirs): @@ -1780,6 +1785,13 @@ def SetupLogging(logfile, debug=False, stderr_logging=False, program="", # we need to re-raise the exception raise +def IsNormAbsPath(path): + """Check whether a path is absolute and also normalized + + This avoids things like /dir/../../other/path to be valid. + + """ + return os.path.normpath(path) == path and os.path.isabs(path) def TailFile(fname, lines=20): """Return the last lines from a file. @@ -1828,6 +1840,16 @@ def SafeEncode(text): return text +def CommaJoin(names): + """Nicely join a set of identifiers. + + @param names: set, list or tuple + @return: a string with the formatted results + + """ + return ", ".join(["'%s'" % val for val in names]) + + def LockedMethod(fn): """Synchronized object access decorator.