Commit 822963ed authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with

virtual interface.  Original patch by Kent Frazier.
parents 518e6ee9 56507c78
import unittest import unittest
from test import support
import builtins import builtins
import io
import os import os
import uuid import uuid
...@@ -356,6 +358,25 @@ class TestUUID(unittest.TestCase): ...@@ -356,6 +358,25 @@ class TestUUID(unittest.TestCase):
self.assertEqual(node1, node2) self.assertEqual(node1, node2)
def test_find_mac(self):
data = '''\
fake hwaddr
cscotun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab
'''
def mock_popen(cmd):
return io.StringIO(data)
with support.swap_attr(os, 'popen', mock_popen):
mac = uuid._find_mac(
command='ifconfig',
args='',
hw_identifiers=['hwaddr'],
get_index=lambda x: x + 1,
)
self.assertEqual(mac, 0x1234567890ab)
@unittest.skipUnless(importable('ctypes'), 'requires ctypes') @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
def test_uuid1(self): def test_uuid1(self):
equal = self.assertEqual equal = self.assertEqual
......
...@@ -327,8 +327,16 @@ def _find_mac(command, args, hw_identifiers, get_index): ...@@ -327,8 +327,16 @@ def _find_mac(command, args, hw_identifiers, get_index):
words = line.lower().split() words = line.lower().split()
for i in range(len(words)): for i in range(len(words)):
if words[i] in hw_identifiers: if words[i] in hw_identifiers:
return int( try:
words[get_index(i)].replace(':', ''), 16) return int(
words[get_index(i)].replace(':', ''), 16)
except (ValueError, IndexError):
# Virtual interfaces, such as those provided by
# VPNs, do not have a colon-delimited MAC address
# as expected, but a 16-byte HWAddr separated by
# dashes. These should be ignored in favor of a
# real MAC address
pass
except OSError: except OSError:
continue continue
return None return None
......
...@@ -407,6 +407,7 @@ John Fouhy ...@@ -407,6 +407,7 @@ John Fouhy
Andrew Francis Andrew Francis
Stefan Franke Stefan Franke
Martin Franklin Martin Franklin
Kent Frazier
Bruce Frederiksen Bruce Frederiksen
Robin Friedrich Robin Friedrich
Bradley Froehle Bradley Froehle
......
...@@ -16,6 +16,9 @@ Core and Builtins ...@@ -16,6 +16,9 @@ Core and Builtins
Library Library
------- -------
- Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
virtual interface. Original patch by Kent Frazier.
- Issue #11489: JSON decoder now accepts lone surrogates. - Issue #11489: JSON decoder now accepts lone surrogates.
- Issue #19545: Avoid chained exceptions while passing stray % to - Issue #19545: Avoid chained exceptions while passing stray % to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment