diff options
author | Benjamin Peterson <benjamin@python.org> | 2015-10-30 03:38:04 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2015-10-30 03:38:04 (GMT) |
commit | 788cb52905efa5be5d5a05d336940444ba332089 (patch) | |
tree | bbf2f0ff672333e5443f21e8a2b7cf46291d59a6 /Lib | |
parent | 265cee04806c55756e5480bd3405ec4d1d8129f0 (diff) | |
download | cpython-788cb52905efa5be5d5a05d336940444ba332089.zip cpython-788cb52905efa5be5d5a05d336940444ba332089.tar.gz cpython-788cb52905efa5be5d5a05d336940444ba332089.tar.bz2 |
always use os.urandom for the uuid4 algorithm (closes #25515)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/uuid.py | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/Lib/uuid.py b/Lib/uuid.py index a6643ed..5b24e2c 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -44,6 +44,8 @@ Typical usage: UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') """ +import os + __author__ = 'Ka-Ping Yee <ping@zesty.ca>' RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [ @@ -456,7 +458,7 @@ def _netbios_getnode(): # If ctypes is available, use it to find system routines for UUID generation. # XXX This makes the module non-thread-safe! -_uuid_generate_random = _uuid_generate_time = _UuidCreate = None +_uuid_generate_time = _UuidCreate = None try: import ctypes, ctypes.util import sys @@ -471,12 +473,9 @@ try: lib = ctypes.CDLL(ctypes.util.find_library(libname)) except Exception: continue - if hasattr(lib, 'uuid_generate_random'): - _uuid_generate_random = lib.uuid_generate_random if hasattr(lib, 'uuid_generate_time'): _uuid_generate_time = lib.uuid_generate_time - if _uuid_generate_random is not None: - break # found everything we were looking for + break del _libnames # The uuid_generate_* functions are broken on MacOS X 10.5, as noted @@ -489,7 +488,7 @@ try: if sys.platform == 'darwin': import os if int(os.uname().release.split('.')[0]) >= 9: - _uuid_generate_random = _uuid_generate_time = None + _uuid_generate_time = None # On Windows prior to 2000, UuidCreate gives a UUID containing the # hardware address. On Windows 2000 and later, UuidCreate makes a @@ -600,20 +599,7 @@ def uuid3(namespace, name): def uuid4(): """Generate a random UUID.""" - - # When the system provides a version-4 UUID generator, use it. - if _uuid_generate_random: - _buffer = ctypes.create_string_buffer(16) - _uuid_generate_random(_buffer) - return UUID(bytes=bytes_(_buffer.raw)) - - # Otherwise, get randomness from urandom or the 'random' module. - try: - import os - return UUID(bytes=os.urandom(16), version=4) - except Exception: - import random - return UUID(int=random.getrandbits(128), version=4) + return UUID(bytes=os.urandom(16), version=4) def uuid5(namespace, name): """Generate a UUID from the SHA-1 hash of a namespace UUID and a name.""" |