classification
Title: Virtual Interfaces cause uuid._find_mac to raise a ValueError under Linux
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.4, Python 3.3, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: serhiy.storchaka Nosy List: kfrazier, python-dev, serhiy.storchaka, zach.ware
Priority: normal Keywords: patch

Created on 2011-03-14 20:31 by kfrazier, last changed 2014-09-30 17:34 by python-dev. This issue is now closed.

Files
File name Uploaded Description Edit
uuid_ValueError_fix.diff kfrazier, 2011-03-14 21:23 Fix for ValueError caused by virtual interfaces in Linux. Includes test review
Messages (10)
msg130892 - (view) Author: Kent Frazier (kfrazier) * Date: 2011-03-14 20:31
If a virtual interface is present in the system, such as if the user is connected to a VPN, then there may be entries in ifconfig that do not conform to the expected `HWAddr 01:23:45:67:89:ab` MAC address format expected by uuid._find_mac. For instance, under Ubuntu 10.10 on my Acer Eee 1005HA, using Cisco's AnyConnect VPN client, I have the following entry in ifconfig:

cscotun0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 

Not only is this more than 6 bytes long, it also uses dashes as a delimiter rather than the colons used by MAC address. After reading the relevant parts of RFC4122's definition of the algorithm for UUID1, I think we probably should be ignoring these virtual interfaces, since I doubt they are guaranteed to be unique.

The attached patch assumes that it is correct to ignore these entries. If this is not appropriate, it might be better to strip all colons and dashes before the int conversion.

I tried to write a test to demonstrate this issue, but had difficulty figuring out how to make it work. The import of `os` is at the function level rather than at the top of the uuid module, so mocking out the module didn't seem feasible. I also tried replacing the call to ifconfig with a call to echo with the appropriate strings to emulate this result, but echo is typically not within any of the hard-coded list of directories that _find_mac looks in. If anyone has a good idea of how to write a test for this issue, I would be happy to write one with some guidance, but I was stumped.

This is my first patch submission to CPython, so if I did anything incorrectly, please let me know and I will try to correct my error.
msg130904 - (view) Author: Kent Frazier (kfrazier) * Date: 2011-03-14 21:23
I was mistaken about the issues with mocking. I am submitting a new patch with a test included.
msg201455 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-10-27 13:13
Kent, can you please submit a contributor form?

http://python.org/psf/contrib/contrib-form/
http://python.org/psf/contrib/
msg201659 - (view) Author: Kent Frazier (kfrazier) * Date: 2013-10-29 19:35
Serhiy, I signed the form. Let me know if you need anything else.
msg204534 - (view) Author: Roundup Robot (python-dev) Date: 2013-11-26 20:50
New changeset 72951ffbdc76 by Serhiy Storchaka in branch '2.7':
Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
http://hg.python.org/cpython/rev/72951ffbdc76

New changeset a5c26e57f429 by Serhiy Storchaka in branch '3.3':
Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
http://hg.python.org/cpython/rev/a5c26e57f429

New changeset efd0e6d675ff by Serhiy Storchaka in branch 'default':
Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
http://hg.python.org/cpython/rev/efd0e6d675ff
msg204535 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-11-26 20:51
Thank you Kent for your contribution.
msg204539 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2013-11-26 21:43
This seems to have broken 64-bit Windows:
http://buildbot.python.org/all/builders/AMD64%20Windows7%20SP1%203.x/builds/3472/steps/test/logs/stdio
http://buildbot.python.org/all/builders/AMD64%20Windows7%20SP1%203.3/builds/1288/steps/test/logs/stdio
http://buildbot.python.org/all/builders/AMD64%20Windows7%20SP1%202.7/builds/940/steps/test/logs/stdio
msg204555 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-11-27 07:00
Thank you Zachary for your report.
msg204558 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-11-27 07:02
Fixed in issue19804.
msg227958 - (view) Author: Roundup Robot (python-dev) Date: 2014-09-30 17:34
New changeset f9cd915410d2 by Georg Brandl in branch '3.2':
Issue #19855: uuid.getnode() on Unix now looks on the PATH for the
https://hg.python.org/cpython/rev/f9cd915410d2
History
Date User Action Args
2014-09-30 17:34:51python-devsetmessages: + msg227958
2013-11-27 07:02:15serhiy.storchakasetmessages: + msg204558
2013-11-27 07:00:01serhiy.storchakasetmessages: + msg204555
2013-11-26 21:43:37zach.waresetnosy: + zach.ware
messages: + msg204539
2013-11-26 20:51:06serhiy.storchakasetstatus: open -> closed
versions: + Python 2.7
messages: + msg204535

resolution: fixed
stage: patch review -> resolved
2013-11-26 20:50:02python-devsetnosy: + python-dev
messages: + msg204534
2013-10-29 19:35:41kfraziersetmessages: + msg201659
2013-10-27 13:13:38serhiy.storchakasetmessages: + msg201455
2013-10-27 13:10:10serhiy.storchakasetversions: + Python 3.4
nosy: + serhiy.storchaka

assignee: serhiy.storchaka
type: crash -> behavior
stage: patch review
2011-03-14 21:23:11kfraziersetfiles: + uuid_ValueError_fix.diff

messages: + msg130904
2011-03-14 21:21:40kfraziersetfiles: - uuid_ValueError_fix.diff
2011-03-14 20:31:27kfraziercreate