From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web09.4778.1649418756521314522 for ; Fri, 08 Apr 2022 04:52:40 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Q42tQE+W; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: n.jayaprakash@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649418760; x=1680954760; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=6VB76GsBddDlC44bzAwGxOFsDU0L8iXKHyq4WtEClEY=; b=Q42tQE+WkaCBeDtYHVCBC97T2xEpeUSpQXJ7pd+QAarT1TZT2ZHBW5/2 fUJq93FOs9IzJ5T1dYkkG+c5+2o/bh5kE0bjH591+YPSEFcObNKWRjp6u W+o+6m/fgnj4tRjXVzIb/nR35CqsvYym/I03VL58yqeQ6zJ/Q29qVthLs 2vrGmYBhQoox43ZOAL449dJoymJLfy4s3VksdciSXDoFMyeyYLlzQd8A9 RUNxS1V14O8yNBMEzx/6toXpFMDifZ+Pd0BeCyPdz+tBVEIh+YMMKMkgp Ee1S32fja+InzgA0yvPgInTVOmkwB2AbMKvFBwGkCSatufz1yiRmgxSgW g==; X-IronPort-AV: E=McAfee;i="6400,9594,10310"; a="348013978" X-IronPort-AV: E=Sophos;i="5.90,244,1643702400"; d="scan'208";a="348013978" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2022 04:52:39 -0700 X-IronPort-AV: E=Sophos;i="5.90,244,1643702400"; d="scan'208";a="524751326" Received: from njayapra-mobl1.gar.corp.intel.com ([10.213.111.252]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2022 04:52:38 -0700 From: "Jayaprakash, N" To: devel@edk2.groups.io Subject: [edk2-libc Patch 1/1] AppPkg\Applications\Python\Python-3.6.8\Lib: uuid.py module port for UEFI environment Date: Fri, 8 Apr 2022 17:22:09 +0530 Message-Id: <20220408115209.2002-2-n.jayaprakash@intel.com> X-Mailer: git-send-email 2.32.0.windows.2 In-Reply-To: <20220408115209.2002-1-n.jayaprakash@intel.com> References: <20220408115209.2002-1-n.jayaprakash@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3899 This is commit contains the UEFI port of uuid.py module. Made necessary changes required to uuid.py module to support UEFI environment. Porting of this module to UEFI is required for open source tools such as Chipsec to function properly. Cc: Rebecca Cran Cc: Michael D Kinney Signed-off-by: Jayaprakash N --- .../Python/Python-3.6.8/Lib/uuid.py | 94 ++++++++++--------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/AppPkg/Applications/Python/Python-3.6.8/Lib/uuid.py b/AppPkg/Applications/Python/Python-3.6.8/Lib/uuid.py index db8b2ef..84ed0b8 100644 --- a/AppPkg/Applications/Python/Python-3.6.8/Lib/uuid.py +++ b/AppPkg/Applications/Python/Python-3.6.8/Lib/uuid.py @@ -471,57 +471,61 @@ def _netbios_getnode(): continue return int.from_bytes(bytes, 'big') + # Thanks to Thomas Heller for ctypes and for his help with its use here. # If ctypes is available, use it to find system routines for UUID generation. # XXX This makes the module non-thread-safe! _uuid_generate_time = _UuidCreate = None -try: - import ctypes, ctypes.util - import sys - - # The uuid_generate_* routines are provided by libuuid on at least - # Linux and FreeBSD, and provided by libc on Mac OS X. - _libnames = ['uuid'] - if not sys.platform.startswith('win'): - _libnames.append('c') - for libname in _libnames: - try: - lib = ctypes.CDLL(ctypes.util.find_library(libname)) - except Exception: - continue - if hasattr(lib, 'uuid_generate_time'): - _uuid_generate_time = lib.uuid_generate_time - break - del _libnames - - # The uuid_generate_* functions are broken on MacOS X 10.5, as noted - # in issue #8621 the function generates the same sequence of values - # in the parent process and all children created using fork (unless - # those children use exec as well). - # - # Assume that the uuid_generate functions are broken from 10.5 onward, - # the test can be adjusted when a later version is fixed. - if sys.platform == 'darwin': - if int(os.uname().release.split('.')[0]) >= 9: - _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 - # random UUID and UuidCreateSequential gives a UUID containing the - # hardware address. These routines are provided by the RPC runtime. - # NOTE: at least on Tim's WinXP Pro SP2 desktop box, while the last - # 6 bytes returned by UuidCreateSequential are fixed, they don't appear - # to bear any relationship to the MAC address of any network device - # on the box. +if os.name != 'edk2': + # This code is not meant to run on UEFI environment try: - lib = ctypes.windll.rpcrt4 + import ctypes, ctypes.util + import sys + + # The uuid_generate_* routines are provided by libuuid on at least + # Linux and FreeBSD, and provided by libc on Mac OS X. + _libnames = ['uuid'] + if not sys.platform.startswith('win'): + _libnames.append('c') + for libname in _libnames: + try: + lib = ctypes.CDLL(ctypes.util.find_library(libname)) + except Exception: + continue + if hasattr(lib, 'uuid_generate_time'): + _uuid_generate_time = lib.uuid_generate_time + break + del _libnames + + # The uuid_generate_* functions are broken on MacOS X 10.5, as noted + # in issue #8621 the function generates the same sequence of values + # in the parent process and all children created using fork (unless + # those children use exec as well). + # + # Assume that the uuid_generate functions are broken from 10.5 onward, + # the test can be adjusted when a later version is fixed. + if sys.platform == 'darwin': + if int(os.uname().release.split('.')[0]) >= 9: + _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 + # random UUID and UuidCreateSequential gives a UUID containing the + # hardware address. These routines are provided by the RPC runtime. + # NOTE: at least on Tim's WinXP Pro SP2 desktop box, while the last + # 6 bytes returned by UuidCreateSequential are fixed, they don't appear + # to bear any relationship to the MAC address of any network device + # on the box. + try: + lib = ctypes.windll.rpcrt4 + except: + lib = None + _UuidCreate = getattr(lib, 'UuidCreateSequential', + getattr(lib, 'UuidCreate', None)) except: - lib = None - _UuidCreate = getattr(lib, 'UuidCreateSequential', - getattr(lib, 'UuidCreate', None)) -except: - pass + pass + def _unixdll_getnode(): """Get the hardware address on Unix using ctypes.""" @@ -563,6 +567,8 @@ def getnode(): import sys if sys.platform == 'win32': getters = _NODE_GETTERS_WIN32 + elif sys.platform == 'uefi': + getters = [] else: getters = _NODE_GETTERS_UNIX -- 2.32.0.windows.2