From e6bdbce71624c38417c6ffb2993ac4eae7a42c2c Mon Sep 17 00:00:00 2001 From: Eli Collins Date: Wed, 27 Jun 2012 16:55:49 -0400 Subject: removed some unused files, tweaked some internal comments --- admin/test_release.py | 256 --------------------------------------- docs/notes.txt | 53 -------- passlib/handlers/ldap_digests.py | 14 +-- 3 files changed, 4 insertions(+), 319 deletions(-) delete mode 100644 admin/test_release.py delete mode 100644 docs/notes.txt diff --git a/admin/test_release.py b/admin/test_release.py deleted file mode 100644 index d62e18b..0000000 --- a/admin/test_release.py +++ /dev/null @@ -1,256 +0,0 @@ -"""helper script that tries to build & test passlib for various python versions. - -note that this script is very Linux-specific, -and in fact contains various hardcoded assumptions -that are only true for the systems used by passlib's developers. - -it also calls "rm -rf" a lot, so be wary :) -""" -#========================================================================= -# imports -#========================================================================= -import re -import sys -import os.path -import subprocess - -#========================================================================= -# helpers -#========================================================================= -def absjoin(*args): - return os.path.abspath(os.path.join(*args)) - -def discard_paths(*paths, **kwds): - cmd = [ "rm", "-rf" ] - if kwds.get("sudo"): - cmd.insert(0, "sudo") - paths = filter(os.path.exists, paths) - if paths: - subprocess.check_call(cmd + list(paths)) - -#========================================================================= -# main -#========================================================================= -class PlatformTestApp(object): - "command line program that runs passlib's unittest suite for all python versions" - - #========================================================================= - # class attrs - #========================================================================= - # names of vms to test - vm_names = [ - # normal python versions - "2.5", - "2.6", - "2.7", - "3.1", - "3.2", - - # other vms - "y2.7-1.5", # pypy 1.5 - "y2.7-1.6", # pypy 1.6 - "j2.5", # jython 2.5 - "gae", - ] - - #========================================================================= - # instance attrs - #========================================================================= - root_dir = None # root dir of source - version = None #current version string - sdist_dir = None # unpacked sdist dir - - #========================================================================= - # init - #========================================================================= - def __init__(self, args): - self.args = args - - #========================================================================= - # run - #========================================================================= - def run(self): - # change dir root dir - self.root_dir = absjoin(__file__, os.pardir, os.pardir) - os.chdir(self.root_dir) - - # get version - self.version = subprocess.check_output( - ["python", "setup.py","--version"]).strip() - - # purge build & dist - discard_paths( - absjoin(self.root_dir, "dist"), - absjoin(self.root_dir, "build"), - ) - - # create new source dist, extract it, and work from that - subprocess.check_call(["python", "setup.py", "sdist"]) - os.chdir(absjoin(self.root_dir, "dist")) - subprocess.check_call(["tar", "zxvf", "passlib-" + self.version + ".tar.gz"]) - self.sdist_dir = absjoin(self.root_dir, "dist", "passlib-" + self.version) - - # run test for each of the vms - for name in self.vm_names: - self.run_vm_test(name) - - return 0 - - def run_vm_test(self, name): - # cd to sdist dir, purge everything - os.chdir(self.sdist_dir) - discard_paths( - absjoin(self.sdist_dir, "dist"), - absjoin(self.sdist_dir, "build"), - ) - self.uninstall_passlib(name) - - # if gae, run unittests directly in source - if name == "gae": - self.run_gae_test() - else: - self.run_vm_test_egg(name) - if not self.parse_vm(name)[0]: - self.uninstall_passlib(name) - self.run_vm_test_pip(name) - - self.uninstall_passlib(name) - - def run_gae_test(self): - # cd to preconfigured gae app - gae_dir = absjoin(self.root_dir, os.pardir, "gae") - os.chdir(gae_dir) - - # cleanup and init symlink for passlib - target_dir = absjoin(gae_dir, "passlib") - discard_paths(target_dir) - os.symlink(absjoin(self.sdist_dir, "passlib"), target_dir) - - # run nose w/ gae integration - subprocess.check_call([ - self.get_vm_exe("gae", "nosetests"), - "--with-gae", - "--exe", # later versions set exe bit on test_xxx.py files - "--tests", "passlib/tests", - ]) - - def run_vm_test_pip(self, name): - os.chdir(absjoin(self.root_dir, "dist")) - - # install via pip - pkg = "passlib-" + self.version + ".tar.gz" - if self.is_vm_sitewide(name): - subprocess.check_call([ - "sudo", - self.get_vm_exe(name, "pip"), - "install", - pkg, - ]) - else: - subprocess.check_call([ - self.get_vm_exe(name, "pip"), - "install", "--user", - pkg, - ]) - - # cd to install location and run tests - # NOTE: just testing that pip worked, so skipping expensive tests - os.chdir(absjoin(self.get_vm_dir(name))) - subprocess.check_call([ - self.get_vm_exe(name, "nosetests"), - "--exe", # later versions set exe bit on test_xxx.py files - "--tests", "passlib/tests/test_context.py", - ]) - - def run_vm_test_egg(self, name): - - # build & install egg - subprocess.check_call([ - self.get_vm_exe(name, "python"), - "setup.py", - "bdist_egg", - ]) - egg_name = "passlib-%s-py%s.egg" % (self.version, self.get_vm_suffix(name)) - exe = self.get_vm_exe(name, "easy_install") - if self.is_vm_sitewide(name): - subprocess.check_call(["sudo", exe, "dist/" + egg_name]) - else: - subprocess.check_call([exe, "--user", "dist/" + egg_name]) - - # cd to install location and run tests - os.chdir(absjoin(self.get_vm_dir(name), egg_name)) - subprocess.check_call([ - self.get_vm_exe(name, "nosetests"), - "--exe", # later versions set exe bit on test_xxx.py files - "--tests", "passlib/tests", - ]) - - def uninstall_passlib(self, name): - vm_dir = self.get_vm_dir(name) - discard_paths(*[ - absjoin(vm_dir, fname) - for fname in os.listdir(vm_dir) - if fname.startswith("passlib") - ], sudo=self.is_vm_sitewide(name)) - - #========================================================================= - # vm info - #========================================================================= - def parse_vm(self, name): - "parse 'vm name' string into (vm id, py version, vm release)" - if name == "gae": - name = "2.5" - m = re.match(r"^(?P[a-z]*)(?P[\d.]+)(-(?P[\d.]+))?$", name) - if not m: - raise ValueError("can't parse vm name: %r" % (name,)) - return m.group("vm", "ver", "rel") - - def is_vm_sitewide(self, name): - "does vm require installing site-wide?" - vm, ver, rel = self.parse_vm(name) - return vm == "y" or ver == "2.5" - - def get_vm_suffix(self, name): - "return suffix used by egg built using specified vm" - return self.parse_vm(name)[1] - - def get_vm_dir(self, name): - "get name of dir where eggs will be installed for specified vm" - vm, ver, rel = self.parse_vm(name) - if vm == "y": - return "/opt/pypy-" + rel + "/site-packages" - elif vm in ["j", ""] and ver == "2.5": - prefix = "/usr/lib" - else: - prefix = os.path.expanduser("~/.local/lib") - return prefix + "/python" + self.get_vm_suffix(name) + "/site-packages" - - def get_vm_exe(self, name, exe): - "return path to appropriate exe for specified vm" - vm, ver, rel = self.parse_vm(name) - if vm: - if vm == "y": - if exe == "python": - exe = "pypy" - return "/opt/pypy-" + rel + "/bin/" + exe - elif vm == "j" and exe == "python": - return "jython" - else: - return exe + "-" + name - else: - if exe == "python": - return "python" + ver - else: - return exe + "-" + ver - - #========================================================================= - # eoc - #========================================================================= - -if __name__ == "__main__": - app = PlatformTestApp(sys.argv[1:]) - sys.exit(app.run()) - -#========================================================================= -# eof -#========================================================================= diff --git a/docs/notes.txt b/docs/notes.txt deleted file mode 100644 index ebafa5f..0000000 --- a/docs/notes.txt +++ /dev/null @@ -1,53 +0,0 @@ -==== -Todo -==== - -Internal Changes ----------------- -* C extensions to speed up some implementations - -Other Hash Formats ------------------- -* Mac OSX hash formats - -* SCrypt - http://www.tarsnap.com/scrypt.html - https://bitbucket.org/mhallin/py-scrypt/src - -Notes on various hash formats -============================= - -Mac OSX -------- -Summary of info from http://www.dribin.org/dave/blog/archives/2006/04/28/os_x_passwords_2/ - -osx < 10.2 used /etc/passwd w/ DES-CRYPT - -osx 10.3 hash file (passwd "macintosh") - -D47F3AF827A48F7DFA4F2C1F12D68CD6 <-- nthash -08460EB13C5CA0C4CA9516712F7FED95 <-- lmhash -01424f955c11f92efef0b79d7fa3fb6be56a9f99 <-- sha1 - -osx 10.4 hash file (passwd "macintosh") -00000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -000000000E6A48F765D0FFFFF6247FA80D748E615F91DD0C7431E4D9000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -00000000000000000000000000000000000000000000000000000000000000000000000000000000\ -0000000000000000000000000000000000000000 - -offset 0-64 - nt hash + lm hash OR all zeros -offset 64 - 40 chars - raw sha1 password OR all zeroes (if from upgraded from 10.3) -offset 169-216 ( 48 chars) - salted sha1 hash - unhex first 8 chars + password | sha1 -> hexdigest diff --git a/passlib/handlers/ldap_digests.py b/passlib/handlers/ldap_digests.py index 17c9686..ed12e86 100644 --- a/passlib/handlers/ldap_digests.py +++ b/passlib/handlers/ldap_digests.py @@ -110,8 +110,6 @@ class ldap_md5(_Base64DigestHelper): The :meth:`~passlib.ifc.PasswordHash.encrypt` and :meth:`~passlib.ifc.PasswordHash.genconfig` methods have no optional keywords. """ name = "ldap_md5" - setting_kwds = () - ident = u("{MD5}") _hash_func = md5 _hash_regex = re.compile(u(r"^\{MD5\}(?P[+/a-zA-Z0-9]{22}==)$")) @@ -122,8 +120,6 @@ class ldap_sha1(_Base64DigestHelper): The :meth:`~passlib.ifc.PasswordHash.encrypt` and :meth:`~passlib.ifc.PasswordHash.genconfig` methods have no optional keywords. """ name = "ldap_sha1" - setting_kwds = () - ident = u("{SHA}") _hash_func = sha1 _hash_regex = re.compile(u(r"^\{SHA\}(?P[+/a-zA-Z0-9]{27}=)$")) @@ -241,17 +237,15 @@ class ldap_plaintext(plaintext): return bool(hash) and cls._2307_pat.match(hash) is None #========================================================= -#{CRYPT} wrappers -#========================================================= - +# {CRYPT} wrappers # the following are wrappers around the base crypt algorithms, # which add the ldap required {CRYPT} prefix - +#========================================================= ldap_crypt_schemes = [ 'ldap_' + name for name in unix_crypt_schemes ] def _init_ldap_crypt_handlers(): - #XXX: it's not nice to play in globals like this, - # but don't want to write all all these handlers + # NOTE: I don't like to implicitly modify globals() like this, + # but don't want to write out all these handlers out either :) g = globals() for wname in unix_crypt_schemes: name = 'ldap_' + wname -- cgit v1.2.1