Please note that you should *at least* also build an image and an SDK with the updated dnf. And run testimage package management tests, and oe-selftest. And upgrade the rest of the dnf stack, particularly libdnf, as there might be subtle breakage otherwise.
I'll get to this but not right now :) Alex ср, 26 сент. 2018 г. в 7:36, Tim Orling <timothy.t.orl...@linux.intel.com>: > > FWIW, the dnf upgrade appears to be trivial (I did not rebase python3 3.7.0 > patches, but it probably won’t change much): > > http://git.openembedded.org/openembedded-core-contrib/commit/?h=timo/python37&id=94d4bba43097ec22f120f4327e5d13a52c1724fd > > NOTE: I used a hammer and overwrote Alex Kanavin’s patches, when really they > just need to be refreshed. Not right, but I am being lazy. The above built on > top of master on qemux86 without issue. > > IMPORTANT: > Please realize that this will have to wait for the Yocto Project 2.7 release > cycle (beginning at the end of October), since this update to Python 3.7 is a > _MAJOR_ change. I would expect significant breakage, if only in meta-python > and friends... > > Time permitting, I’ll rebase the Python 3.7 patches and build-n-test this. > > > On Sep 25, 2018, at 7:55 AM, Alejandro Hernandez > > <alejandro.enedino.hernandez-samani...@xilinx.com> wrote: > > > > Hello Jens, > > > > > > It literally seems that you didn't even read the email, I am not asking > > whether or not it builds correctly for you, it clearly says that the fact > > that something builds correctly, doesn't necessarily means it runs > > properly, and it also says thanks because it contains some of the manifest > > changes, so I know for a fact that you ran the create_manifest task, but as > > it is very clearly explained, if you run it with a full python3-native > > build you get a different result, please fix that before sending another > > version of this patch. > > > > > > Alejandro > > > > > > On 9/24/2018 1:13 PM, Jens Rehsack wrote: > >> Hi Alejandro, > >> > >> on my system it builds without any problem. And I run the create_manifest > >> task. > >> > >> Cheers, > >> Jens > >> Am Mi., 19. Sep. 2018 um 21:19 Uhr schrieb Alejandro Hernandez > >> <alejandro.enedino.hernandez-samani...@xilinx.com>: > >>> Hello Jens, > >>> > >>> I appreciate the effort of submitting a v4, this version has (mostly > >>> all) the required manifest changes, and at the same time it proves the > >>> point I've been trying to make since the beginning: > >>> > >>> Again, the native build isn't complete and shows: > >>> > >>> Python build finished successfully! > >>> The necessary bits to build these optional modules were not found: > >>> _uuid > >>> > >>> > >>> Which causes _uuid.*.so to be on the python3-misc package because it > >>> wasn't on the native build and it couldn't be found when creating the > >>> manifest (there is simply no reference to it on the manifest, so > >>> python3-misc gets it): > >>> > >>> * python3-misc (dir) > >>> * usr (dir) > >>> * lib (dir) > >>> * python3.7 (dir) > >>> * lib-dynload(dir) > >>> * _uuid.cpython-37m-i386-linux-gnu.so > >>> > >>> > >>> This will eventually cause a runtime error if a user tries to install > >>> python3-netclient, which is exactly the reason why the create_manifest > >>> task exists: > >>> > >>> Traceback (most recent call last): > >>> File "<stdin>", line 1, in <module> > >>> ModuleNotFoundError: No module named '_uuid' > >>> > >>> > >>> This can easily be prevented, as the note on the recipe says, we need to > >>> ensure we have a complete python3-native build to create the manifest on > >>> every new release. If you fix the native build with the instructions I > >>> gave you and re-run the create_manifest task you will realize that the > >>> python3-netclient package should be the one to get the _uuid.*.so > >>> library, since it depends on it to work properly. > >>> > >>> +++ b/meta/recipes-devtools/python/python3/python3-manifest.json > >>> @@ -743,6 +743,7 @@ > >>> "${libdir}/python${PYTHON_MAJMIN}/hmac.py", > >>> "${libdir}/python${PYTHON_MAJMIN}/http", > >>> "${libdir}/python${PYTHON_MAJMIN}/http/__pycache__", > >>> + "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_uuid.*.so", > >>> > >>> > >>> And that is the reason why this upgrade still needs a one line patch to > >>> setup.py to build _uuid on python3-native, I cannot make it any more > >>> clearly. > >>> > >>> Please fix the native build before submitting a new version of this patch. > >>> > >>> > >>> Alejandro > >>> > >>> > >>> On 9/19/2018 2:24 AM, Jens Rehsack wrote: > >>>> Update python3 to recent 3.7.0 release. > >>>> > >>>> Details about new features and bug-fixes can be taken from > >>>> * https://docs.python.org/3/whatsnew/3.7.html > >>>> * https://docs.python.org/3/whatsnew/3.6.html > >>>> > >>>> Remove patches when they were fixed upstream and rebase the > >>>> remaining ones. If necessary, the patches are adopted to > >>>> keep the idea when upstream code was changed. Also remove > >>>> backports from 3.6 and 3.7 into 3.5.6 codebase for TLS > >>>> and multiprocessing. > >>>> > >>>> Open TODO: track patches in a -STABLE rebased git branch for > >>>> easier rebasing or upstream submitting. > >>>> > >>>> Enhancement requests for Yocto project > >>>> * https://bugzilla.yoctoproject.org/show_bug.cgi?id=12375 > >>>> * https://bugzilla.yoctoproject.org/show_bug.cgi?id=12901 > >>>> are solved by this. > >>>> > >>>> Signed-off-by: Jens Rehsack <s...@netbsd.org> > >>>> --- > >>>> meta/classes/python3-dir.bbclass | 6 +- > >>>> .../python/python3-native_3.5.6.bb | 100 ------ > >>>> .../python/python3-native_3.7.0.bb | 73 ++++ > >>>> meta/recipes-devtools/python/python3.inc | 65 +++- > >>>> ...hell-version-of-python-config-that-w.patch | 21 +- > >>>> ..._sysconfigdata.py-to-initialize-dist.patch | 66 ---- > >>>> ...ontext-has-improved-default-settings.patch | 272 --------------- > >>>> ...d-target-to-split-profile-generation.patch | 40 --- > >>>> ...S-1.3-cipher-suites-and-OP_NO_TLSv1_.patch | 227 ------------ > >>>> ...for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch | 173 --------- > >>>> ....3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch | 110 ------ > >>>> ...ALPN-changes-for-OpenSSL-1.1.0f-2305.patch | 68 ---- > >>>> .../python3/03-fix-tkinter-detection.patch | 12 +- > >>>> .../python3/030-fixup-include-dirs.patch | 9 - > >>>> .../080-distutils-dont_adjust_files.patch | 4 +- > >>>> .../python/python3/150-fix-setupterm.patch | 17 - > >>>> ...GS-for-extensions-when-cross-compili.patch | 53 ++- > >>>> .../python3/avoid-ncursesw-include-path.patch | 18 +- > >>>> .../python3/avoid_warning_about_tkinter.patch | 18 +- > >>>> .../python3/configure.ac-fix-LIBPL.patch | 21 +- > >>>> .../python/python3/float-endian.patch | 9 +- > >>>> ...ssing-libraries-to-Extension-for-mul.patch | 26 +- > >>>> .../python/python3/python-3.3-multilib.patch | 241 +++++++------ > >>>> .../python/python3/python3-manifest.json | 35 +- > >>>> ...CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch | 17 +- > >>>> .../python/python3/regen-all.patch | 25 -- > >>>> .../python/python3/signal.patch | 56 --- > >>>> ...port_SOURCE_DATE_EPOCH_in_py_compile.patch | 36 +- > >>>> .../python3/sysroot-include-headers.patch | 23 +- > >>>> .../python3/uuid_when_cross_compiling.patch | 24 ++ > >>>> meta/recipes-devtools/python/python3_3.5.6.bb | 328 ------------------ > >>>> meta/recipes-devtools/python/python3_3.7.0.bb | 299 ++++++++++++++++ > >>>> 32 files changed, 722 insertions(+), 1770 deletions(-) > >>>> delete mode 100644 meta/recipes-devtools/python/python3-native_3.5.6.bb > >>>> create mode 100644 meta/recipes-devtools/python/python3-native_3.7.0.bb > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch > >>>> delete mode 100644 > >>>> meta/recipes-devtools/python/python3/150-fix-setupterm.patch > >>>> delete mode 100644 meta/recipes-devtools/python/python3/regen-all.patch > >>>> delete mode 100644 meta/recipes-devtools/python/python3/signal.patch > >>>> create mode 100644 > >>>> meta/recipes-devtools/python/python3/uuid_when_cross_compiling.patch > >>>> delete mode 100644 meta/recipes-devtools/python/python3_3.5.6.bb > >>>> create mode 100644 meta/recipes-devtools/python/python3_3.7.0.bb > >>>> > >>>> diff --git a/meta/classes/python3-dir.bbclass > >>>> b/meta/classes/python3-dir.bbclass > >>>> index 06bb046d9c..ad7ea8dd9a 100644 > >>>> --- a/meta/classes/python3-dir.bbclass > >>>> +++ b/meta/classes/python3-dir.bbclass > >>>> @@ -1,4 +1,8 @@ > >>>> -PYTHON_BASEVERSION = "3.5" > >>>> +PYTHON_BASEVERSION = "3.7" > >>>> +# [d][m][u] > >>>> +# d: py_debug > >>>> +# m: my_malloc > >>>> +# u: wide-char unicode > >>>> PYTHON_ABI = "m" > >>>> PYTHON_DIR = "python${PYTHON_BASEVERSION}" > >>>> PYTHON_PN = "python3" > >>>> diff --git a/meta/recipes-devtools/python/python3-native_3.5.6.bb > >>>> b/meta/recipes-devtools/python/python3-native_3.5.6.bb > >>>> deleted file mode 100644 > >>>> index d5953cf4bb..0000000000 > >>>> --- a/meta/recipes-devtools/python/python3-native_3.5.6.bb > >>>> +++ /dev/null > >>>> @@ -1,100 +0,0 @@ > >>>> -require recipes-devtools/python/python3.inc > >>>> - > >>>> -DISTRO_SRC_URI ?= "file://sitecustomize.py" > >>>> -DISTRO_SRC_URI_linuxstdbase = "" > >>>> -SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \ > >>>> -file://12-distutils-prefix-is-inside-staging-area.patch \ > >>>> -file://python-config.patch \ > >>>> -file://030-fixup-include-dirs.patch \ > >>>> -file://070-dont-clean-ipkg-install.patch \ > >>>> -file://080-distutils-dont_adjust_files.patch \ > >>>> -file://130-readline-setup.patch \ > >>>> -file://150-fix-setupterm.patch \ > >>>> -file://python-3.3-multilib.patch \ > >>>> -file://03-fix-tkinter-detection.patch \ > >>>> -file://avoid_warning_about_tkinter.patch \ > >>>> -file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \ > >>>> -file://sysroot-include-headers.patch \ > >>>> -file://unixccompiler.patch \ > >>>> -${DISTRO_SRC_URI} \ > >>>> -file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \ > >>>> -file://setup.py-check-cross_compiling-when-get-FLAGS.patch \ > >>>> -file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \ > >>>> -file://support_SOURCE_DATE_EPOCH_in_py_compile.patch \ > >>>> -file://regen-all.patch \ > >>>> -file://0001-Issue-28043-SSLContext-has-improved-default-settings.patch \ > >>>> -file://0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch \ > >>>> -file://0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch \ > >>>> -file://0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch \ > >>>> -file://0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch \ > >>>> -" > >>>> - > >>>> -EXTRANATIVEPATH += "bzip2-native" > >>>> -DEPENDS = "openssl-native bzip2-replacement-native zlib-native > >>>> readline-native sqlite3-native gdbm-native" > >>>> - > >>>> -inherit native > >>>> - > >>>> -EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip" > >>>> - > >>>> -EXTRA_OEMAKE = '\ > >>>> - LIBC="" \ > >>>> - STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \ > >>>> - STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \ > >>>> - LIB=${baselib} \ > >>>> - ARCH=${TARGET_ARCH} \ > >>>> -' > >>>> - > >>>> -do_configure_append() { > >>>> - autoreconf --verbose --install --force --exclude=autopoint > >>>> ../Python-${PV}/Modules/_ctypes/libffi > >>>> - sed -i -e 's,#define HAVE_GETRANDOM 1,/\* #undef HAVE_GETRANDOM > >>>> \*/,' ${B}/pyconfig.h > >>>> -} > >>>> - > >>>> -# Regenerate all of the generated files > >>>> -# This ensures that pgen and friends get created during the compile > >>>> phase > >>>> -# > >>>> -do_compile_prepend() { > >>>> - # Assuming https://bugs.python.org/issue33080 has been addressed in > >>>> Makefile. > >>>> - oe_runmake regen-all > >>>> -} > >>>> - > >>>> -do_install() { > >>>> - install -d ${D}${libdir}/pkgconfig > >>>> - oe_runmake 'DESTDIR=${D}' install > >>>> - if [ -e ${WORKDIR}/sitecustomize.py ]; then > >>>> - install -m 0644 ${WORKDIR}/sitecustomize.py > >>>> ${D}/${libdir}/python${PYTHON_MAJMIN} > >>>> - fi > >>>> - install -d ${D}${bindir}/${PN} > >>>> - install -m 0755 Parser/pgen ${D}${bindir}/${PN} > >>>> - > >>>> - # Make sure we use /usr/bin/env python > >>>> - for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python > >>>> ${D}${bindir}/${PN}`; do > >>>> - sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT > >>>> - done > >>>> - > >>>> - # Add a symlink to the native Python so that scripts can just > >>>> invoke > >>>> - # "nativepython" and get the right one without needing absolute > >>>> paths > >>>> - # (these often end up too long for the #! parser in the kernel > >>>> as the > >>>> - # buffer is 128 bytes long). > >>>> - ln -s python3-native/python3 ${D}${bindir}/nativepython3 > >>>> -} > >>>> - > >>>> -python(){ > >>>> - > >>>> - # Read JSON manifest > >>>> - import json > >>>> - pythondir = d.getVar('THISDIR',True) > >>>> - with open(pythondir+'/python3/python3-manifest.json') as > >>>> manifest_file: > >>>> - python_manifest=json.load(manifest_file) > >>>> - > >>>> - rprovides = d.getVar('RPROVIDES').split() > >>>> - > >>>> - # Hardcoded since it cant be python3-native-foo, should be > >>>> python3-foo-native > >>>> - pn = 'python3' > >>>> - > >>>> - for key in python_manifest: > >>>> - pypackage = pn + '-' + key + '-native' > >>>> - if pypackage not in rprovides: > >>>> - rprovides.append(pypackage) > >>>> - > >>>> - d.setVar('RPROVIDES', ' '.join(rprovides)) > >>>> -} > >>>> diff --git a/meta/recipes-devtools/python/python3-native_3.7.0.bb > >>>> b/meta/recipes-devtools/python/python3-native_3.7.0.bb > >>>> new file mode 100644 > >>>> index 0000000000..3ef9f0a5e3 > >>>> --- /dev/null > >>>> +++ b/meta/recipes-devtools/python/python3-native_3.7.0.bb > >>>> @@ -0,0 +1,73 @@ > >>>> +require recipes-devtools/python/python3.inc > >>>> + > >>>> +SRC_URI += "\ > >>>> + file://12-distutils-prefix-is-inside-staging-area.patch \ > >>>> + > >>>> file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \ > >>>> +" > >>>> + > >>>> +EXTRANATIVEPATH += "bzip2-native" > >>>> +DEPENDS = "openssl-native libffi-native bzip2-replacement-native > >>>> zlib-native \ > >>>> + util-linux-native readline-native sqlite3-native gdbm-native > >>>> \ > >>>> +" > >>>> + > >>>> +inherit native > >>>> + > >>>> +EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip" > >>>> + > >>>> +EXTRA_OEMAKE = '\ > >>>> + LIBC="" \ > >>>> + STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \ > >>>> + STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \ > >>>> + LIB=${baselib} \ > >>>> + ARCH=${TARGET_ARCH} \ > >>>> +' > >>>> + > >>>> +# Regenerate all of the generated files > >>>> +# This ensures that pgen and friends get created during the compile > >>>> phase > >>>> +# > >>>> +do_compile_prepend() { > >>>> + # Assuming https://bugs.python.org/issue33080 has been addressed in > >>>> Makefile. > >>>> + oe_runmake regen-all > >>>> +} > >>>> + > >>>> +do_install() { > >>>> + install -d ${D}${libdir}/pkgconfig > >>>> + oe_runmake 'DESTDIR=${D}' install > >>>> + if [ -e ${WORKDIR}/sitecustomize.py ]; then > >>>> + install -m 0644 ${WORKDIR}/sitecustomize.py > >>>> ${D}/${libdir}/python${PYTHON_MAJMIN} > >>>> + fi > >>>> + install -d ${D}${bindir}/${PN} > >>>> + install -m 0755 Parser/pgen ${D}${bindir}/${PN} > >>>> + > >>>> + # Make sure we use /usr/bin/env python > >>>> + for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python > >>>> ${D}${bindir}/${PN}`; do > >>>> + sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT > >>>> + done > >>>> + > >>>> + # Add a symlink to the native Python so that scripts can just > >>>> invoke > >>>> + # "nativepython" and get the right one without needing absolute > >>>> paths > >>>> + # (these often end up too long for the #! parser in the kernel > >>>> as the > >>>> + # buffer is 128 bytes long). > >>>> + ln -s python3-native/python3 ${D}${bindir}/nativepython3 > >>>> +} > >>>> + > >>>> +python(){ > >>>> + > >>>> + # Read JSON manifest > >>>> + import json > >>>> + pythondir = d.getVar('THISDIR',True) > >>>> + with open(pythondir+'/python3/python3-manifest.json') as > >>>> manifest_file: > >>>> + python_manifest=json.load(manifest_file) > >>>> + > >>>> + rprovides = d.getVar('RPROVIDES').split() > >>>> + > >>>> + # Hardcoded since it cant be python3-native-foo, should be > >>>> python3-foo-native > >>>> + pn = 'python3' > >>>> + > >>>> + for key in python_manifest: > >>>> + pypackage = pn + '-' + key + '-native' > >>>> + if pypackage not in rprovides: > >>>> + rprovides.append(pypackage) > >>>> + > >>>> + d.setVar('RPROVIDES', ' '.join(rprovides)) > >>>> +} > >>>> diff --git a/meta/recipes-devtools/python/python3.inc > >>>> b/meta/recipes-devtools/python/python3.inc > >>>> index f565b3f171..b0fc0144a4 100644 > >>>> --- a/meta/recipes-devtools/python/python3.inc > >>>> +++ b/meta/recipes-devtools/python/python3.inc > >>>> @@ -3,41 +3,74 @@ HOMEPAGE = "http://www.python.org" > >>>> LICENSE = "PSFv2" > >>>> SECTION = "devel/python" > >>>> > >>>> -# TODO Remove this when we upgrade > >>>> -INC_PR = "r1" > >>>> -PR = "${INC_PR}.0" > >>>> +PYTHON_MAJMIN = "3.7" > >>>> +DISTRO_SRC_URI ?= "file://sitecustomize.py" > >>>> +DISTRO_SRC_URI_linuxstdbase = "" > >>>> +SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \ > >>>> + file://python-config.patch \ > >>>> + file://python-3.3-multilib.patch \ > >>>> + file://03-fix-tkinter-detection.patch \ > >>>> + file://avoid_warning_about_tkinter.patch \ > >>>> + file://unixccompiler.patch \ > >>>> + file://sysroot-include-headers.patch \ > >>>> + file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \ > >>>> + file://setup.py-check-cross_compiling-when-get-FLAGS.patch \ > >>>> + file://030-fixup-include-dirs.patch \ > >>>> + file://070-dont-clean-ipkg-install.patch \ > >>>> + file://080-distutils-dont_adjust_files.patch \ > >>>> + file://130-readline-setup.patch \ > >>>> + > >>>> file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \ > >>>> + ${DISTRO_SRC_URI} \ > >>>> + file://support_SOURCE_DATE_EPOCH_in_py_compile.patch \ > >>>> + file://Use-correct-CFLAGS-for-extensions-when-cross-compili.patch \ > >>>> +" > >>>> > >>>> -LIC_FILES_CHKSUM = "file://LICENSE;md5=b6ec515b22618f55fa07276b897bacea" > >>>> +SRC_URI[md5sum] = "eb8c2a6b1447d50813c02714af4681f3" > >>>> +SRC_URI[sha256sum] = > >>>> "0382996d1ee6aafe59763426cf0139ffebe36984474d0ec4126dd1c40a8b3549" > >>>> > >>>> -# TODO consolidate patch set > >>>> -SRC_URI[md5sum] = "f5a99f765e765336a3ebbb2a24ca2be3" > >>>> -SRC_URI[sha256sum] = > >>>> "f55cde04f521f273c7cba08912921cc5642cfc15ca7b22d5829f0aff4371155f" > >>>> +LIC_FILES_CHKSUM = "file://LICENSE;md5=f257cc14f81685691652a3d3e1b5d754" > >>>> > >>>> # exclude pre-releases for both python 2.x and 3.x > >>>> UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar" > >>>> > >>>> -CVE_PRODUCT = "python" > >>>> - > >>>> -PYTHON_MAJMIN = "3.5" > >>>> -PYTHON_BINABI = "${PYTHON_MAJMIN}m" > >>>> - > >>>> S = "${WORKDIR}/Python-${PV}" > >>>> > >>>> -inherit autotools bluetooth pkgconfig > >>>> +CVE_PRODUCT = "python" > >>>> + > >>>> +inherit autotools bluetooth pkgconfig python3-dir > >>>> > >>>> EXTRA_OECONF = "\ > >>>> - --with-threads \ > >>>> --with-pymalloc \ > >>>> --without-cxx-main \ > >>>> - --with-signal-module \ > >>>> --enable-shared \ > >>>> --enable-ipv6=${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'yes', > >>>> 'no', d)} \ > >>>> " > >>>> > >>>> PACKAGECONFIG[bluetooth] = ",ac_cv_header_bluetooth_bluetooth_h=no > >>>> ac_cv_header_bluetooth_h=no,${BLUEZ}" > >>>> > >>>> +do_configure_prepend() { > >>>> + libdirleaf="$(echo ${libdir} | sed -e 's:${prefix}/::')" > >>>> + sed -i -e "s:SEDMELIBLEAF:${libdirleaf}:g" \ > >>>> + ${S}/configure.ac > >>>> +} > >>>> + > >>>> +do_install_prepend() { > >>>> + MAKESETTINGS="$(egrep '^(ABIFLAGS|MULTIARCH)=' ${B}/Makefile | sed > >>>> -E -e 's/[[:space:]]//g' -e 's/=/="/' -e 's/$/"/')" > >>>> + eval ${MAKESETTINGS} > >>>> + if test "${ABIFLAGS}" != "${PYTHON_ABI}"; then > >>>> + die "do_install: configure determined ABIFLAGS '${ABIFLAGS}' > >>>> != '${PYTHON_ABI}' from python3-dir.bbclass" > >>>> + fi > >>>> + if test "x${BUILD_OS}" = "x${TARGET_OS}"; then > >>>> + # no cross-compile at all > >>>> + > >>>> _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_${TARGET_OS}_${MULTIARCH} > >>>> + else > >>>> + # at the very moment, it's the only available target > >>>> + _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_linux_${MULTIARCH} > >>>> + fi > >>>> +} > >>>> + > >>>> do_install_append () { > >>>> sed -i -e 's:${HOSTTOOLS_DIR}/install:install:g' \ > >>>> -e 's:${HOSTTOOLS_DIR}/mkdir:mkdir:g' \ > >>>> - ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py > >>>> + > >>>> ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py > >>>> } > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch > >>>> index 8ea3f03fe0..aac34533ef 100644 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch > >>>> +++ > >>>> b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch > >>>> @@ -14,25 +14,22 @@ Signed-off-by: Alexander Kanavin > >>>> <alex.kana...@gmail.com> > >>>> 1 file changed, 3 insertions(+), 6 deletions(-) > >>>> > >>>> diff --git a/Makefile.pre.in b/Makefile.pre.in > >>>> -index 236f005..5c4337f 100644 > >>>> +index 31b4bcabb3..7da6d6941e 100644 > >>>> --- a/Makefile.pre.in > >>>> +++ b/Makefile.pre.in > >>>> -@@ -1348,12 +1348,9 @@ python-config: $(srcdir)/Misc/python-config.in > >>>> Misc/python-config.sh > >>>> +@@ -1415,12 +1415,9 @@ python-config: $(srcdir)/Misc/python-config.in > >>>> Misc/python-config.sh > >>>> sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < > >>>> $(srcdir)/Misc/python-config.in >python-config.py > >>>> - # Replace makefile compat. variable references with shell script > >>>> compat. ones; $(VAR) -> ${VAR} > >>>> + @ # Replace makefile compat. variable references with shell script > >>>> compat. ones; $(VAR) -> ${VAR} > >>>> LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < > >>>> Misc/python-config.sh >python-config > >>>> -- # On Darwin, always use the python version of the script, the shell > >>>> -- # version doesn't use the compiler customizations that are provided > >>>> -- # in python (_osx_support.py). > >>>> -- if test `uname -s` = Darwin; then \ > >>>> +- @ # On Darwin, always use the python version of the script, the > >>>> shell > >>>> +- @ # version doesn't use the compiler customizations that are > >>>> provided > >>>> +- @ # in python (_osx_support.py). > >>>> +- @if test `uname -s` = Darwin; then \ > >>>> - cp python-config.py python-config; \ > >>>> - fi > >>>> -+ # In OpenEmbedded, always use the python version of the script, > >>>> the shell > >>>> -+ # version is broken in multiple ways, and doesn't return correct > >>>> directories > >>>> ++ @ # In OpenEmbedded, always use the python version of the script, > >>>> the shell > >>>> ++ @ # version is broken in multiple ways, and doesn't return correct > >>>> directories > >>>> + cp python-config.py python-config > >>>> > >>>> > >>>> # Install the include files > >>>> --- > >>>> -2.11.0 > >>>> - > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch > >>>> deleted file mode 100644 > >>>> index d1c92e9eed..0000000000 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch > >>>> +++ /dev/null > >>>> @@ -1,66 +0,0 @@ > >>>> -From bcddbf40c7f1b80336268cdddacc17369fb0ccea Mon Sep 17 00:00:00 2001 > >>>> -From: Libin Dang <libin.d...@windriver.com> > >>>> -Date: Tue, 11 Apr 2017 14:12:15 +0800 > >>>> -Subject: [PATCH] Issue #21272: Use _sysconfigdata.py to initialize > >>>> - distutils.sysconfig > >>>> - > >>>> -Backport upstream commit > >>>> -https://github.com/python/cpython/commit/409482251b06fe75c4ee56e85ffbb4b23d934159 > >>>> - > >>>> -Upstream-Status: Backport > >>>> - > >>>> -Signed-off-by: Li Zhou <li.z...@windriver.com> > >>>> ---- > >>>> - Lib/distutils/sysconfig.py | 35 ++++------------------------------- > >>>> - 1 file changed, 4 insertions(+), 31 deletions(-) > >>>> - > >>>> -diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py > >>>> -index 6d5cfd0..9925d24 100644 > >>>> ---- a/Lib/distutils/sysconfig.py > >>>> -+++ b/Lib/distutils/sysconfig.py > >>>> -@@ -424,38 +424,11 @@ _config_vars = None > >>>> - > >>>> - def _init_posix(): > >>>> - """Initialize the module as appropriate for POSIX systems.""" > >>>> -- g = {} > >>>> -- # load the installed Makefile: > >>>> -- try: > >>>> -- filename = get_makefile_filename() > >>>> -- parse_makefile(filename, g) > >>>> -- except OSError as msg: > >>>> -- my_msg = "invalid Python installation: unable to open %s" % > >>>> filename > >>>> -- if hasattr(msg, "strerror"): > >>>> -- my_msg = my_msg + " (%s)" % msg.strerror > >>>> -- > >>>> -- raise DistutilsPlatformError(my_msg) > >>>> -- > >>>> -- # load the installed pyconfig.h: > >>>> -- try: > >>>> -- filename = get_config_h_filename() > >>>> -- with open(filename) as file: > >>>> -- parse_config_h(file, g) > >>>> -- except OSError as msg: > >>>> -- my_msg = "invalid Python installation: unable to open %s" % > >>>> filename > >>>> -- if hasattr(msg, "strerror"): > >>>> -- my_msg = my_msg + " (%s)" % msg.strerror > >>>> -- > >>>> -- raise DistutilsPlatformError(my_msg) > >>>> -- > >>>> -- # On AIX, there are wrong paths to the linker scripts in the > >>>> Makefile > >>>> -- # -- these paths are relative to the Python source, but when > >>>> installed > >>>> -- # the scripts are in another directory. > >>>> -- if python_build: > >>>> -- g['LDSHARED'] = g['BLDSHARED'] > >>>> -- > >>>> -+ # _sysconfigdata is generated at build time, see the sysconfig > >>>> module > >>>> -+ from _sysconfigdata import build_time_vars > >>>> - global _config_vars > >>>> -- _config_vars = g > >>>> -+ _config_vars = {} > >>>> -+ _config_vars.update(build_time_vars) > >>>> - > >>>> - > >>>> - def _init_nt(): > >>>> --- > >>>> -1.8.3.1 > >>>> - > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch > >>>> deleted file mode 100644 > >>>> index 321b4afa12..0000000000 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch > >>>> +++ /dev/null > >>>> @@ -1,272 +0,0 @@ > >>>> -From 758e7463c104f71b810c8588166747eeab6148d7 Mon Sep 17 00:00:00 2001 > >>>> -From: Christian Heimes <christ...@python.org> > >>>> -Date: Sat, 10 Sep 2016 22:43:48 +0200 > >>>> -Subject: [PATCH 1/4] Issue 28043: SSLContext has improved default > >>>> settings > >>>> - > >>>> -The options OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, > >>>> OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE, OP_NO_SSLv2 (except for > >>>> PROTOCOL_SSLv2), and OP_NO_SSLv3 (except for PROTOCOL_SSLv3) are set by > >>>> default. The initial cipher suite list contains only HIGH ciphers, no > >>>> NULL ciphers and MD5 ciphers (except for PROTOCOL_SSLv2). > >>>> - > >>>> -Upstream-Status: Backport > >>>> -[https://github.com/python/cpython/commit/358cfd426ccc0fcd6a7940d306602138e76420ae] > >>>> - > >>>> -Signed-off-by: Anuj Mittal <anuj.mit...@intel.com> > >>>> ---- > >>>> - Doc/library/ssl.rst | 9 ++++++- > >>>> - Lib/ssl.py | 30 +++++---------------- > >>>> - Lib/test/test_ssl.py | 62 +++++++++++++++++++++++--------------------- > >>>> - Modules/_ssl.c | 31 ++++++++++++++++++++++ > >>>> - 4 files changed, 78 insertions(+), 54 deletions(-) > >>>> - > >>>> -diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst > >>>> -index a2f008346b..14f2d68217 100644 > >>>> ---- a/Doc/library/ssl.rst > >>>> -+++ b/Doc/library/ssl.rst > >>>> -@@ -1151,7 +1151,14 @@ to speed up repeated connections from the same > >>>> clients. > >>>> - > >>>> - .. versionchanged:: 3.5.3 > >>>> - > >>>> -- :data:`PROTOCOL_TLS` is the default value. > >>>> -+ The context is created with secure default values. The options > >>>> -+ :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`, > >>>> -+ :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`, > >>>> -+ :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`), > >>>> -+ and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are > >>>> -+ set by default. The initial cipher suite list contains only > >>>> ``HIGH`` > >>>> -+ ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for > >>>> -+ :data:`PROTOCOL_SSLv2`). > >>>> - > >>>> - > >>>> - :class:`SSLContext` objects have the following methods and attributes: > >>>> -diff --git a/Lib/ssl.py b/Lib/ssl.py > >>>> -index e1913904f3..4d302a78fa 100644 > >>>> ---- a/Lib/ssl.py > >>>> -+++ b/Lib/ssl.py > >>>> -@@ -446,32 +446,16 @@ def > >>>> create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, > >>>> - if not isinstance(purpose, _ASN1Object): > >>>> - raise TypeError(purpose) > >>>> - > >>>> -+ # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, > >>>> -+ # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and > >>>> OP_SINGLE_ECDH_USE > >>>> -+ # by default. > >>>> - context = SSLContext(PROTOCOL_TLS) > >>>> - > >>>> -- # SSLv2 considered harmful. > >>>> -- context.options |= OP_NO_SSLv2 > >>>> -- > >>>> -- # SSLv3 has problematic security and is only required for really > >>>> old > >>>> -- # clients such as IE6 on Windows XP > >>>> -- context.options |= OP_NO_SSLv3 > >>>> -- > >>>> -- # disable compression to prevent CRIME attacks (OpenSSL 1.0+) > >>>> -- context.options |= getattr(_ssl, "OP_NO_COMPRESSION", 0) > >>>> -- > >>>> - if purpose == Purpose.SERVER_AUTH: > >>>> - # verify certs and host name in client mode > >>>> - context.verify_mode = CERT_REQUIRED > >>>> - context.check_hostname = True > >>>> - elif purpose == Purpose.CLIENT_AUTH: > >>>> -- # Prefer the server's ciphers by default so that we get > >>>> stronger > >>>> -- # encryption > >>>> -- context.options |= getattr(_ssl, > >>>> "OP_CIPHER_SERVER_PREFERENCE", 0) > >>>> -- > >>>> -- # Use single use keys in order to improve forward secrecy > >>>> -- context.options |= getattr(_ssl, "OP_SINGLE_DH_USE", 0) > >>>> -- context.options |= getattr(_ssl, "OP_SINGLE_ECDH_USE", 0) > >>>> -- > >>>> -- # disallow ciphers with known vulnerabilities > >>>> - context.set_ciphers(_RESTRICTED_SERVER_CIPHERS) > >>>> - > >>>> - if cafile or capath or cadata: > >>>> -@@ -497,12 +481,10 @@ def > >>>> _create_unverified_context(protocol=PROTOCOL_TLS, *, cert_reqs=None, > >>>> - if not isinstance(purpose, _ASN1Object): > >>>> - raise TypeError(purpose) > >>>> - > >>>> -+ # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, > >>>> -+ # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and > >>>> OP_SINGLE_ECDH_USE > >>>> -+ # by default. > >>>> - context = SSLContext(protocol) > >>>> -- # SSLv2 considered harmful. > >>>> -- context.options |= OP_NO_SSLv2 > >>>> -- # SSLv3 has problematic security and is only required for really > >>>> old > >>>> -- # clients such as IE6 on Windows XP > >>>> -- context.options |= OP_NO_SSLv3 > >>>> - > >>>> - if cert_reqs is not None: > >>>> - context.verify_mode = cert_reqs > >>>> -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py > >>>> -index ffb7314f57..f91af7bd05 100644 > >>>> ---- a/Lib/test/test_ssl.py > >>>> -+++ b/Lib/test/test_ssl.py > >>>> -@@ -73,6 +73,12 @@ NULLBYTECERT = data_file("nullbytecert.pem") > >>>> - DHFILE = data_file("dh1024.pem") > >>>> - BYTES_DHFILE = os.fsencode(DHFILE) > >>>> - > >>>> -+# Not defined in all versions of OpenSSL > >>>> -+OP_NO_COMPRESSION = getattr(ssl, "OP_NO_COMPRESSION", 0) > >>>> -+OP_SINGLE_DH_USE = getattr(ssl, "OP_SINGLE_DH_USE", 0) > >>>> -+OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0) > >>>> -+OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, > >>>> "OP_CIPHER_SERVER_PREFERENCE", 0) > >>>> -+ > >>>> - > >>>> - def handle_error(prefix): > >>>> - exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) > >>>> -@@ -839,8 +845,9 @@ class ContextTests(unittest.TestCase): > >>>> - ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) > >>>> - # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value > >>>> - default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3) > >>>> -- if not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0): > >>>> -- default |= ssl.OP_NO_COMPRESSION > >>>> -+ # SSLContext also enables these by default > >>>> -+ default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | > >>>> -+ OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE) > >>>> - self.assertEqual(default, ctx.options) > >>>> - ctx.options |= ssl.OP_NO_TLSv1 > >>>> - self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) > >>>> -@@ -1205,16 +1212,29 @@ class ContextTests(unittest.TestCase): > >>>> - stats["x509"] += 1 > >>>> - self.assertEqual(ctx.cert_store_stats(), stats) > >>>> - > >>>> -+ def _assert_context_options(self, ctx): > >>>> -+ self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -+ if OP_NO_COMPRESSION != 0: > >>>> -+ self.assertEqual(ctx.options & OP_NO_COMPRESSION, > >>>> -+ OP_NO_COMPRESSION) > >>>> -+ if OP_SINGLE_DH_USE != 0: > >>>> -+ self.assertEqual(ctx.options & OP_SINGLE_DH_USE, > >>>> -+ OP_SINGLE_DH_USE) > >>>> -+ if OP_SINGLE_ECDH_USE != 0: > >>>> -+ self.assertEqual(ctx.options & OP_SINGLE_ECDH_USE, > >>>> -+ OP_SINGLE_ECDH_USE) > >>>> -+ if OP_CIPHER_SERVER_PREFERENCE != 0: > >>>> -+ self.assertEqual(ctx.options & OP_CIPHER_SERVER_PREFERENCE, > >>>> -+ OP_CIPHER_SERVER_PREFERENCE) > >>>> -+ > >>>> - def test_create_default_context(self): > >>>> - ctx = ssl.create_default_context() > >>>> -+ > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) > >>>> - self.assertTrue(ctx.check_hostname) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -- self.assertEqual( > >>>> -- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- ) > >>>> -+ self._assert_context_options(ctx) > >>>> -+ > >>>> - > >>>> - with open(SIGNING_CA) as f: > >>>> - cadata = f.read() > >>>> -@@ -1222,40 +1242,24 @@ class ContextTests(unittest.TestCase): > >>>> - cadata=cadata) > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -- self.assertEqual( > >>>> -- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- ) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -- self.assertEqual( > >>>> -- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- getattr(ssl, "OP_NO_COMPRESSION", 0), > >>>> -- ) > >>>> -- self.assertEqual( > >>>> -- ctx.options & getattr(ssl, "OP_SINGLE_DH_USE", 0), > >>>> -- getattr(ssl, "OP_SINGLE_DH_USE", 0), > >>>> -- ) > >>>> -- self.assertEqual( > >>>> -- ctx.options & getattr(ssl, "OP_SINGLE_ECDH_USE", 0), > >>>> -- getattr(ssl, "OP_SINGLE_ECDH_USE", 0), > >>>> -- ) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - def test__create_stdlib_context(self): > >>>> - ctx = ssl._create_stdlib_context() > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) > >>>> - self.assertFalse(ctx.check_hostname) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1) > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1, > >>>> - cert_reqs=ssl.CERT_REQUIRED, > >>>> -@@ -1263,12 +1267,12 @@ class ContextTests(unittest.TestCase): > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED) > >>>> - self.assertTrue(ctx.check_hostname) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - ctx = > >>>> ssl._create_stdlib_context(purpose=ssl.Purpose.CLIENT_AUTH) > >>>> - self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23) > >>>> - self.assertEqual(ctx.verify_mode, ssl.CERT_NONE) > >>>> -- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, > >>>> ssl.OP_NO_SSLv2) > >>>> -+ self._assert_context_options(ctx) > >>>> - > >>>> - def test_check_hostname(self): > >>>> - ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) > >>>> -diff --git a/Modules/_ssl.c b/Modules/_ssl.c > >>>> -index 86482677ae..0d5c121d2c 100644 > >>>> ---- a/Modules/_ssl.c > >>>> -+++ b/Modules/_ssl.c > >>>> -@@ -2330,6 +2330,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int > >>>> proto_version) > >>>> - PySSLContext *self; > >>>> - long options; > >>>> - SSL_CTX *ctx = NULL; > >>>> -+ int result; > >>>> - #if defined(SSL_MODE_RELEASE_BUFFERS) > >>>> - unsigned long libver; > >>>> - #endif > >>>> -@@ -2393,8 +2394,38 @@ _ssl__SSLContext_impl(PyTypeObject *type, int > >>>> proto_version) > >>>> - options |= SSL_OP_NO_SSLv2; > >>>> - if (proto_version != PY_SSL_VERSION_SSL3) > >>>> - options |= SSL_OP_NO_SSLv3; > >>>> -+ /* Minimal security flags for server and client side context. > >>>> -+ * Client sockets ignore server-side parameters. */ > >>>> -+#ifdef SSL_OP_NO_COMPRESSION > >>>> -+ options |= SSL_OP_NO_COMPRESSION; > >>>> -+#endif > >>>> -+#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE > >>>> -+ options |= SSL_OP_CIPHER_SERVER_PREFERENCE; > >>>> -+#endif > >>>> -+#ifdef SSL_OP_SINGLE_DH_USE > >>>> -+ options |= SSL_OP_SINGLE_DH_USE; > >>>> -+#endif > >>>> -+#ifdef SSL_OP_SINGLE_ECDH_USE > >>>> -+ options |= SSL_OP_SINGLE_ECDH_USE; > >>>> -+#endif > >>>> - SSL_CTX_set_options(self->ctx, options); > >>>> - > >>>> -+ /* A bare minimum cipher list without completly broken cipher > >>>> suites. > >>>> -+ * It's far from perfect but gives users a better head start. */ > >>>> -+ if (proto_version != PY_SSL_VERSION_SSL2) { > >>>> -+ result = SSL_CTX_set_cipher_list(ctx, > >>>> "HIGH:!aNULL:!eNULL:!MD5"); > >>>> -+ } else { > >>>> -+ /* SSLv2 needs MD5 */ > >>>> -+ result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL"); > >>>> -+ } > >>>> -+ if (result == 0) { > >>>> -+ Py_DECREF(self); > >>>> -+ ERR_clear_error(); > >>>> -+ PyErr_SetString(PySSLErrorObject, > >>>> -+ "No cipher can be selected."); > >>>> -+ return NULL; > >>>> -+ } > >>>> -+ > >>>> - #if defined(SSL_MODE_RELEASE_BUFFERS) > >>>> - /* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces > >>>> memory > >>>> - usage for no cost at all. However, don't do this for OpenSSL > >>>> versions > >>>> --- > >>>> -2.17.1 > >>>> - > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch > >>>> deleted file mode 100644 > >>>> index 2b4ba316e4..0000000000 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch > >>>> +++ /dev/null > >>>> @@ -1,40 +0,0 @@ > >>>> -From 98586d6dc598e40b8b821b0dde57599e188a7ca4 Mon Sep 17 00:00:00 2001 > >>>> -From: Anuj Mittal <anuj.mit...@intel.com> > >>>> -Date: Tue, 7 Aug 2018 16:43:17 +0800 > >>>> -Subject: [PATCH 2/2] Makefile: add target to split profile generation > >>>> - > >>>> -We don't want to have profile task invoked from here and want to use > >>>> -qemu-user instead. Split the profile-opt task so qemu can be invoked > >>>> -once binaries have been built with instrumentation and then we can go > >>>> -ahead and build again using the profile data generated. > >>>> - > >>>> -Upstream-Status: Inappropriate [OE-specific] > >>>> - > >>>> -Signed-off-by: Anuj Mittal <anuj.mit...@intel.com> > >>>> ---- > >>>> - Makefile.pre.in | 6 ++---- > >>>> - 1 file changed, 2 insertions(+), 4 deletions(-) > >>>> - > >>>> -diff --git a/Makefile.pre.in b/Makefile.pre.in > >>>> -index 84bc3ff..017a2c4 100644 > >>>> ---- a/Makefile.pre.in > >>>> -+++ b/Makefile.pre.in > >>>> -@@ -469,13 +469,12 @@ profile-opt: > >>>> - $(MAKE) profile-removal > >>>> - $(MAKE) build_all_generate_profile > >>>> - $(MAKE) profile-removal > >>>> -- @echo "Running code to generate profile data (this can take a > >>>> while):" > >>>> -- $(MAKE) run_profile_task > >>>> -- $(MAKE) build_all_merge_profile > >>>> -+ > >>>> -+clean_and_use_profile: > >>>> - @echo "Rebuilding with profile guided optimizations:" > >>>> - $(MAKE) clean > >>>> - $(MAKE) build_all_use_profile > >>>> - $(MAKE) profile-removal > >>>> - > >>>> - build_all_generate_profile: > >>>> - $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) > >>>> $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) > >>>> $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)" > >>>> --- > >>>> -2.17.1 > >>>> - > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch > >>>> deleted file mode 100644 > >>>> index d48cad7586..0000000000 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch > >>>> +++ /dev/null > >>>> @@ -1,227 +0,0 @@ > >>>> -From e950ea68dab006944af194c9910b8f2341d1437d Mon Sep 17 00:00:00 2001 > >>>> -From: Christian Heimes <christ...@python.org> > >>>> -Date: Thu, 7 Sep 2017 20:23:52 -0700 > >>>> -Subject: [PATCH] bpo-29136: Add TLS 1.3 cipher suites and OP_NO_TLSv1_3 > >>>> - (GH-1363) (#3444) > >>>> - > >>>> -* bpo-29136: Add TLS 1.3 support > >>>> - > >>>> -TLS 1.3 introduces a new, distinct set of cipher suites. The TLS 1.3 > >>>> -cipher suites don't overlap with cipher suites from TLS 1.2 and earlier. > >>>> -Since Python sets its own set of permitted ciphers, TLS 1.3 handshake > >>>> -will fail as soon as OpenSSL 1.1.1 is released. Let's enable the common > >>>> -AES-GCM and ChaCha20 suites. > >>>> - > >>>> -Additionally the flag OP_NO_TLSv1_3 is added. It defaults to 0 (no op) > >>>> with > >>>> -OpenSSL prior to 1.1.1. This allows applications to opt-out from TLS 1.3 > >>>> -now. > >>>> - > >>>> -Signed-off-by: Christian Heimes <christ...@python.org>. > >>>> -(cherry picked from commit cb5b68abdeb1b1d56c581d5b4d647018703d61e3) > >>>> - > >>>> -Upstream-Status: Backport > >>>> -[https://github.com/python/cpython/commit/cb5b68abdeb1b1d56c581d5b4d647018703d61e3] > >>>> - > >>>> -Signed-off-by: Anuj Mittal <anuj.mit...@intel.com> > >>>> ---- > >>>> - Doc/library/ssl.rst | 21 ++++++++++++++ > >>>> - Lib/ssl.py | 7 +++++ > >>>> - Lib/test/test_ssl.py | 29 ++++++++++++++++++- > >>>> - .../2017-09-04-16-39-49.bpo-29136.vSn1oR.rst | 1 + > >>>> - Modules/_ssl.c | 13 +++++++++ > >>>> - 5 files changed, 70 insertions(+), 1 deletion(-) > >>>> - create mode 100644 > >>>> Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst > >>>> - > >>>> -diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst > >>>> -index 14f2d68217..29c5e94cf6 100644 > >>>> ---- a/Doc/library/ssl.rst > >>>> -+++ b/Doc/library/ssl.rst > >>>> -@@ -285,6 +285,11 @@ purposes. > >>>> - > >>>> - 3DES was dropped from the default cipher string. > >>>> - > >>>> -+ .. versionchanged:: 3.7 > >>>> -+ > >>>> -+ TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, > >>>> TLS_AES_256_GCM_SHA384, > >>>> -+ and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher > >>>> string. > >>>> -+ > >>>> - > >>>> - Random generation > >>>> - ^^^^^^^^^^^^^^^^^ > >>>> -@@ -719,6 +724,16 @@ Constants > >>>> - > >>>> - .. versionadded:: 3.4 > >>>> - > >>>> -+.. data:: OP_NO_TLSv1_3 > >>>> -+ > >>>> -+ Prevents a TLSv1.3 connection. This option is only applicable in > >>>> conjunction > >>>> -+ with :const:`PROTOCOL_TLS`. It prevents the peers from choosing > >>>> TLSv1.3 as > >>>> -+ the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or > >>>> later. > >>>> -+ When Python has been compiled against an older version of OpenSSL, > >>>> the > >>>> -+ flag defaults to *0*. > >>>> -+ > >>>> -+ .. versionadded:: 3.7 > >>>> -+ > >>>> - .. data:: OP_CIPHER_SERVER_PREFERENCE > >>>> - > >>>> - Use the server's cipher ordering preference, rather than the > >>>> client's. > >>>> -@@ -783,6 +798,12 @@ Constants > >>>> - > >>>> - .. versionadded:: 3.3 > >>>> - > >>>> -+.. data:: HAS_TLSv1_3 > >>>> -+ > >>>> -+ Whether the OpenSSL library has built-in support for the TLS 1.3 > >>>> protocol. > >>>> -+ > >>>> -+ .. versionadded:: 3.7 > >>>> -+ > >>>> - .. data:: CHANNEL_BINDING_TYPES > >>>> - > >>>> - List of supported TLS channel binding types. Strings in this list > >>>> -diff --git a/Lib/ssl.py b/Lib/ssl.py > >>>> -index 4d302a78fa..f233e72e1f 100644 > >>>> ---- a/Lib/ssl.py > >>>> -+++ b/Lib/ssl.py > >>>> -@@ -122,6 +122,7 @@ _import_symbols('OP_') > >>>> - _import_symbols('ALERT_DESCRIPTION_') > >>>> - _import_symbols('SSL_ERROR_') > >>>> - _import_symbols('VERIFY_') > >>>> -+from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_TLSv1_3 > >>>> - > >>>> - from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN > >>>> - > >>>> -@@ -162,6 +163,7 @@ else: > >>>> - # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL') > >>>> - # Enable a better set of ciphers by default > >>>> - # This list has been explicitly chosen to: > >>>> -+# * TLS 1.3 ChaCha20 and AES-GCM cipher suites > >>>> - # * Prefer cipher suites that offer perfect forward secrecy > >>>> (DHE/ECDHE) > >>>> - # * Prefer ECDHE over DHE for better performance > >>>> - # * Prefer AEAD over CBC for better performance and security > >>>> -@@ -173,6 +175,8 @@ else: > >>>> - # * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs > >>>> - # for security reasons > >>>> - _DEFAULT_CIPHERS = ( > >>>> -+ 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:' > >>>> -+ 'TLS13-AES-128-GCM-SHA256:' > >>>> - > >>>> 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' > >>>> - 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' > >>>> - '!aNULL:!eNULL:!MD5:!3DES' > >>>> -@@ -180,6 +184,7 @@ _DEFAULT_CIPHERS = ( > >>>> - > >>>> - # Restricted and more secure ciphers for the server side > >>>> - # This list has been explicitly chosen to: > >>>> -+# * TLS 1.3 ChaCha20 and AES-GCM cipher suites > >>>> - # * Prefer cipher suites that offer perfect forward secrecy > >>>> (DHE/ECDHE) > >>>> - # * Prefer ECDHE over DHE for better performance > >>>> - # * Prefer AEAD over CBC for better performance and security > >>>> -@@ -190,6 +195,8 @@ _DEFAULT_CIPHERS = ( > >>>> - # * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, > >>>> RC4, and > >>>> - # 3DES for security reasons > >>>> - _RESTRICTED_SERVER_CIPHERS = ( > >>>> -+ 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:' > >>>> -+ 'TLS13-AES-128-GCM-SHA256:' > >>>> - > >>>> 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:' > >>>> - 'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:' > >>>> - '!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES' > >>>> -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py > >>>> -index f91af7bd05..1acc12ec2d 100644 > >>>> ---- a/Lib/test/test_ssl.py > >>>> -+++ b/Lib/test/test_ssl.py > >>>> -@@ -150,6 +150,13 @@ class BasicSocketTests(unittest.TestCase): > >>>> - ssl.OP_NO_COMPRESSION > >>>> - self.assertIn(ssl.HAS_SNI, {True, False}) > >>>> - self.assertIn(ssl.HAS_ECDH, {True, False}) > >>>> -+ ssl.OP_NO_SSLv2 > >>>> -+ ssl.OP_NO_SSLv3 > >>>> -+ ssl.OP_NO_TLSv1 > >>>> -+ ssl.OP_NO_TLSv1_3 > >>>> -+ if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1): > >>>> -+ ssl.OP_NO_TLSv1_1 > >>>> -+ ssl.OP_NO_TLSv1_2 > >>>> - > >>>> - def test_str_for_enums(self): > >>>> - # Make sure that the PROTOCOL_* constants have enum-like string > >>>> -@@ -3028,12 +3035,33 @@ else: > >>>> - self.assertEqual(s.version(), 'TLSv1') > >>>> - self.assertIs(s.version(), None) > >>>> - > >>>> -+ @unittest.skipUnless(ssl.HAS_TLSv1_3, > >>>> -+ "test requires TLSv1.3 enabled OpenSSL") > >>>> -+ def test_tls1_3(self): > >>>> -+ context = ssl.SSLContext(ssl.PROTOCOL_TLS) > >>>> -+ context.load_cert_chain(CERTFILE) > >>>> -+ # disable all but TLS 1.3 > >>>> -+ context.options |= ( > >>>> -+ ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2 > >>>> -+ ) > >>>> -+ with ThreadedEchoServer(context=context) as server: > >>>> -+ with context.wrap_socket(socket.socket()) as s: > >>>> -+ s.connect((HOST, server.port)) > >>>> -+ self.assertIn(s.cipher()[0], [ > >>>> -+ 'TLS13-AES-256-GCM-SHA384', > >>>> -+ 'TLS13-CHACHA20-POLY1305-SHA256', > >>>> -+ 'TLS13-AES-128-GCM-SHA256', > >>>> -+ ]) > >>>> -+ > >>>> - @unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled > >>>> OpenSSL") > >>>> - def test_default_ecdh_curve(self): > >>>> - # Issue #21015: elliptic curve-based Diffie Hellman key > >>>> exchange > >>>> - # should be enabled by default on SSL contexts. > >>>> - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) > >>>> - context.load_cert_chain(CERTFILE) > >>>> -+ # TLSv1.3 defaults to PFS key agreement and no longer has > >>>> KEA in > >>>> -+ # cipher name. > >>>> -+ context.options |= ssl.OP_NO_TLSv1_3 > >>>> - # Prior to OpenSSL 1.0.0, ECDH ciphers have to be enabled > >>>> - # explicitly using the 'ECCdraft' cipher alias. Otherwise, > >>>> - # our default cipher list should prefer ECDH-based ciphers > >>>> -@@ -3394,7 +3422,6 @@ else: > >>>> - s.sendfile(file) > >>>> - self.assertEqual(s.recv(1024), TEST_DATA) > >>>> - > >>>> -- > >>>> - def test_main(verbose=False): > >>>> - if support.verbose: > >>>> - import warnings > >>>> -diff --git > >>>> a/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst > >>>> b/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst > >>>> -new file mode 100644 > >>>> -index 0000000000..e76997ef83 > >>>> ---- /dev/null > >>>> -+++ b/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst > >>>> -@@ -0,0 +1 @@ > >>>> -+Add TLS 1.3 cipher suites and OP_NO_TLSv1_3. > >>>> -diff --git a/Modules/_ssl.c b/Modules/_ssl.c > >>>> -index 0d5c121d2c..c71d89607c 100644 > >>>> ---- a/Modules/_ssl.c > >>>> -+++ b/Modules/_ssl.c > >>>> -@@ -4842,6 +4842,11 @@ PyInit__ssl(void) > >>>> - #if HAVE_TLSv1_2 > >>>> - PyModule_AddIntConstant(m, "OP_NO_TLSv1_1", SSL_OP_NO_TLSv1_1); > >>>> - PyModule_AddIntConstant(m, "OP_NO_TLSv1_2", SSL_OP_NO_TLSv1_2); > >>>> -+#endif > >>>> -+#ifdef SSL_OP_NO_TLSv1_3 > >>>> -+ PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", SSL_OP_NO_TLSv1_3); > >>>> -+#else > >>>> -+ PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", 0); > >>>> - #endif > >>>> - PyModule_AddIntConstant(m, "OP_CIPHER_SERVER_PREFERENCE", > >>>> - SSL_OP_CIPHER_SERVER_PREFERENCE); > >>>> -@@ -4890,6 +4895,14 @@ PyInit__ssl(void) > >>>> - Py_INCREF(r); > >>>> - PyModule_AddObject(m, "HAS_ALPN", r); > >>>> - > >>>> -+#if defined(TLS1_3_VERSION) && !defined(OPENSSL_NO_TLS1_3) > >>>> -+ r = Py_True; > >>>> -+#else > >>>> -+ r = Py_False; > >>>> -+#endif > >>>> -+ Py_INCREF(r); > >>>> -+ PyModule_AddObject(m, "HAS_TLSv1_3", r); > >>>> -+ > >>>> - /* Mappings for error codes */ > >>>> - err_codes_to_names = PyDict_New(); > >>>> - err_names_to_codes = PyDict_New(); > >>>> --- > >>>> -2.17.1 > >>>> - > >>>> diff --git > >>>> a/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch > >>>> > >>>> b/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch > >>>> deleted file mode 100644 > >>>> index 56d591d1b5..0000000000 > >>>> --- > >>>> a/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch > >>>> +++ /dev/null > >>>> @@ -1,173 +0,0 @@ > >>>> -From 170a614904febd14ff6cfd7a75c9bccc114b3948 Mon Sep 17 00:00:00 2001 > >>>> -From: Christian Heimes <christ...@python.org> > >>>> -Date: Tue, 14 Aug 2018 16:56:32 +0200 > >>>> -Subject: [PATCH] bpo-32947: Fixes for TLS 1.3 and OpenSSL 1.1.1 > >>>> (GH-8761) > >>>> - > >>>> -Backport of TLS 1.3 related fixes from 3.7. > >>>> - > >>>> -Misc fixes and workarounds for compatibility with OpenSSL 1.1.1 from git > >>>> -master and TLS 1.3 support. With OpenSSL 1.1.1, Python negotiates TLS > >>>> 1.3 by > >>>> -default. Some test cases only apply to TLS 1.2. > >>>> - > >>>> -OpenSSL 1.1.1 has added a new option OP_ENABLE_MIDDLEBOX_COMPAT for TLS > >>>> -1.3. The feature is enabled by default for maximum compatibility with > >>>> -broken middle boxes. Users should be able to disable the hack and > >>>> CPython's test suite needs > >>>> -it to verify default options > >>>> - > >>>> -Signed-off-by: Christian Heimes <christ...@python.org> > >>>> - > >>>> -Upstream-Status: Backport > >>>> -[https://github.com/python/cpython/commit/2a4ee8aa01d61b6a9c8e9c65c211e61bdb471826] > >>>> - > >>>> -Signed-off-by: Anuj Mittal <anuj.mit...@intel.com> > >>>> ---- > >>>> - Doc/library/ssl.rst | 9 ++++++ > >>>> - Lib/test/test_asyncio/test_events.py | 6 +++- > >>>> - Lib/test/test_ssl.py | 29 +++++++++++++++---- > >>>> - .../2018-08-14-08-57-01.bpo-32947.mqStVW.rst | 2 ++ > >>>> - Modules/_ssl.c | 4 +++ > >>>> - 5 files changed, 44 insertions(+), 6 deletions(-) > >>>> - create mode 100644 > >>>> Misc/NEWS.d/next/Library/2018-08-14-08-57-01.bpo-32947.mqStVW.rst > >>>> - > >>>> -diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst > >>>> -index 29c5e94cf6..f63a3deec5 100644 > >>>> ---- a/Doc/library/ssl.rst > >>>> -+++ b/Doc/library/ssl.rst > >>>> -@@ -757,6 +757,15 @@ Constants > >>>> - > >>>> - .. versionadded:: 3.3 > >>>> - > >>>> -+.. data:: OP_ENABLE_MIDDLEBOX_COMPAT > >>>> -+ > >>>> -+ Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake > >>>> to make > >>>> -+ a TLS 1.3 connection look more like a TLS 1.2 connection. > >>>> -+ > >>>> -+ This option is only available with OpenSSL 1.1.1 and later. > >>>> -+ > >>>> -+ .. versionadded:: 3.6.7 > >>>> -+ > >>>> - .. data:: OP_NO_COMPRESSION > >>>> - > >>>> - Disable compression on the SSL channel. This is useful if the > >>>> application > >>>> -diff --git a/Lib/test/test_asyncio/test_events.py > >>>> b/Lib/test/test_asyncio/test_events.py > >>>> -index 492a84a231..6f208474b9 100644 > >>>> ---- a/Lib/test/test_asyncio/test_events.py > >>>> -+++ b/Lib/test/test_asyncio/test_events.py > >>>> -@@ -1169,7 +1169,11 @@ class EventLoopTestsMixin: > >>>> - self.loop.run_until_complete(f_c) > >>>> - > >>>> - # close connection > >>>> -- proto.transport.close() > >>>> -+ # transport may be None with TLS 1.3, because connection is > >>>> -+ # interrupted, server is unable to send session tickets, and > >>>> -+ # transport is closed. > >>>> -+ if proto.transport is not None: > >>>> -+ proto.transport.close() > >>>> - server.close() > >>>> - > >>>> - def test_legacy_create_server_ssl_match_failed(self): > >>>> -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py > >>>> -index 1acc12ec2d..a2e1d32a62 100644 > >>>> ---- a/Lib/test/test_ssl.py > >>>> -+++ b/Lib/test/test_ssl.py > >>>> -@@ -78,6 +78,7 @@ OP_NO_COMPRESSION = getattr(ssl, "OP_NO_COMPRESSION", > >>>> 0) > >>>> - OP_SINGLE_DH_USE = getattr(ssl, "OP_SINGLE_DH_USE", 0) > >>>> - OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0) > >>>> - OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, > >>>> "OP_CIPHER_SERVER_PREFERENCE", 0) > >>>> -+OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, > >>>> "OP_ENABLE_MIDDLEBOX_COMPAT", 0) > >>>> - > >>>> - > >>>> - def handle_error(prefix): > >>>> -@@ -155,8 +156,8 @@ class BasicSocketTests(unittest.TestCase): > >>>> - ssl.OP_NO_TLSv1 > >>>> - ssl.OP_NO_TLSv1_3 > >>>> - if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1): > >>>> -- ssl.OP_NO_TLSv1_1 > >>>> -- ssl.OP_NO_TLSv1_2 > >>>> -+ ssl.OP_NO_TLSv1_1 > >>>> -+ ssl.OP_NO_TLSv1_2 > >>>> - > >>>> - def test_str_for_enums(self): > >>>> - # Make sure that the PROTOCOL_* constants have enum-like string > >>>> -@@ -854,7 +855,8 @@ class ContextTests(unittest.TestCase): > >>>> - default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3) > >>>> - # SSLContext also enables these by default > >>>> - default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | > >>>> -- OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE) > >>>> -+ OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE | > >>>> -+ OP_ENABLE_MIDDLEBOX_COMPAT) > >>>> - self.assertEqual(default, ctx.options) > >>>> - ctx.options |= ssl.OP_NO_TLSv1 > >>>> - self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options) > >>>> -@@ -1860,11 +1862,26 @@ else: > >>>> - self.sock, server_side=True) > >>>> - > >>>> self.server.selected_npn_protocols.append(self.sslconn.selected_npn_protocol()) > >>>> - > >>>> self.server.selected_alpn_protocols.append(self.sslconn.selected_alpn_protocol()) > >>>> -- except (ssl.SSLError, ConnectionResetError) as e: > >>>> -+ except (ConnectionResetError, BrokenPipeError) as e: > >>>> - # We treat ConnectionResetError as though it were > >>>> an > >>>> - # SSLError - OpenSSL on Ubuntu abruptly closes the > >>>> - # connection when asked to use an unsupported > >>>> protocol. > >>>> - # > >>>> -+ # BrokenPipeError is raised in TLS 1.3 mode, when > >>>> OpenSSL > >>>> -+ # tries to send session tickets after handshake. > >>>> -+ -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core