summaryrefslogtreecommitdiffstats
path: root/Lib/uuid.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2015-10-30 03:38:04 (GMT)
committerBenjamin Peterson <benjamin@python.org>2015-10-30 03:38:04 (GMT)
commit788cb52905efa5be5d5a05d336940444ba332089 (patch)
treebbf2f0ff672333e5443f21e8a2b7cf46291d59a6 /Lib/uuid.py
parent265cee04806c55756e5480bd3405ec4d1d8129f0 (diff)
downloadcpython-788cb52905efa5be5d5a05d336940444ba332089.zip
cpython-788cb52905efa5be5d5a05d336940444ba332089.tar.gz
cpython-788cb52905efa5be5d5a05d336940444ba332089.tar.bz2
always use os.urandom for the uuid4 algorithm (closes #25515)
Diffstat (limited to 'Lib/uuid.py')
-rw-r--r--Lib/uuid.py26
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."""