#!/usr/local/bin/python import tarfile import sys import os print "Python Version:", sys.version print "Executable:", sys.executable print "Tarfile Version: ", tarfile.version myscript = sys.argv[0] dummyfile = myscript def run_pathlength_test(posix=True, maxlen=256): loops = (maxlen - len("fooo")) / len("tmp/") ## defauls to 63 for i in range(int(loops)): dir = "tmp/" * i arcname = dir + "fooo" try: tar = tarfile.open("/tmp/tmp.tar", "w:gz") tar.posix = posix tar.debug = 0 # set 3 for debug output tar.add(myscript, arcname) tar.close() ## reopen the tarfile, this way the tarfile-member list ## will be reinitialized, restoring the file-name from ## tarinfo.prefix and tarinfo.name, otherwise tarfile.getnames() ## returns invalid filename-list tar = tarfile.open("/tmp/tmp.tar", "r") if arcname not in tar.getnames(): print "TarFile pathlength check failed, do not use!!" print "failed for %s (length %d, posix=%s)" % (arcname, len(arcname), str(posix)) return ## check getmember() operation, might throw exception tar.getmember (arcname) tar.close() except Exception,e: print "TarFile pathlength check failed, do not use!!" print "failed for %s (length %d, posix=%s) with %s" % (arcname, len(arcname), str(posix), str(e)) return print "Tarfile module (posix=%s) is Ok" % posix run_pathlength_test(posix=True, maxlen=256) run_pathlength_test(posix=False, maxlen=1024)