Commit 56507c78 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.
parent a04f4e03
import unittest
from test import support
import builtins
import io
import os
import uuid
......@@ -356,6 +358,25 @@ class TestUUID(unittest.TestCase):
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')
def test_uuid1(self):
equal = self.assertEqual
......
......@@ -327,8 +327,16 @@ def _find_mac(command, args, hw_identifiers, get_index):
words = line.lower().split()
for i in range(len(words)):
if words[i] in hw_identifiers:
return int(
words[get_index(i)].replace(':', ''), 16)
try:
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 IOError:
continue
return None
......
......@@ -394,6 +394,7 @@ John Fouhy
Andrew Francis
Stefan Franke
Martin Franklin
Kent Frazier
Bruce Frederiksen
Robin Friedrich
Bradley Froehle
......
......@@ -16,6 +16,9 @@ Core and Builtins
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 #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