From 6114144bd2e447fb2bfd01b36df4845c918282f0 Mon Sep 17 00:00:00 2001 From: ohemorange Date: Tue, 28 Apr 2026 12:28:31 -0700 Subject: [PATCH] Merge pull request #10630 from certbot/lexicon-repin Repin dependencies to pull in updated dns-lexicon, which contains the fix for OVH challenge deletion bug --- .../acme/_internal/tests/crypto_util_test.py | 6 ++ acme/src/acme/crypto_util.py | 5 +- newsfragments/10492.fixed | 1 + tools/requirements.txt | 89 ++++++++++--------- 4 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 newsfragments/10492.fixed diff --git a/acme/src/acme/_internal/tests/crypto_util_test.py b/acme/src/acme/_internal/tests/crypto_util_test.py index 577c26ec5..ff96497c5 100644 --- a/acme/src/acme/_internal/tests/crypto_util_test.py +++ b/acme/src/acme/_internal/tests/crypto_util_test.py @@ -36,6 +36,12 @@ class MiscTests(unittest.TestCase): # default is PEM encoding Encoding.PEM assert isinstance(dumped, bytes) + def test_dump_cryptography_chain_wrong_encoding(self): + from acme.crypto_util import dump_cryptography_chain + + with pytest.raises(ValueError): + dump_cryptography_chain(mock.Mock(), serialization.Encoding.SMIME) + class CryptographyCertOrReqSANTest(unittest.TestCase): """Test for acme.crypto_util._cryptography_cert_or_req_san.""" diff --git a/acme/src/acme/crypto_util.py b/acme/src/acme/crypto_util.py index 587e52430..a58badda9 100644 --- a/acme/src/acme/crypto_util.py +++ b/acme/src/acme/crypto_util.py @@ -6,7 +6,6 @@ import logging from types import ModuleType import typing from typing import Any -from typing import Literal from typing import Optional from typing import Union import warnings @@ -307,7 +306,7 @@ def make_self_signed_cert(private_key: types.CertificateIssuerPrivateKeyTypes, def dump_cryptography_chain( chain: list[x509.Certificate], - encoding: Literal[Encoding.PEM, Encoding.DER] = Encoding.PEM, + encoding: Encoding = Encoding.PEM, ) -> bytes: """Dump certificate chain into a bundle. @@ -321,6 +320,8 @@ def dump_cryptography_chain( """ # XXX: returns empty string when no chain is available, which # shuts up RenewableCert, but might not be the best solution... + if encoding not in (Encoding.PEM, Encoding.DER): + raise ValueError("Encoding must be PEM or DER") def _dump_cert(cert: x509.Certificate) -> bytes: return cert.public_bytes(encoding) diff --git a/newsfragments/10492.fixed b/newsfragments/10492.fixed new file mode 100644 index 000000000..a77c99a46 --- /dev/null +++ b/newsfragments/10492.fixed @@ -0,0 +1 @@ +The certbot-dns-ovh snap and docker image now properly delete any created TXT records after the challenge is completed by requiring dns-lexicon 3.25.1 which contains the fix. diff --git a/tools/requirements.txt b/tools/requirements.txt index d0966b7f7..59984f848 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -17,23 +17,23 @@ babel==2.18.0 ; python_version >= "3.10" and python_version < "4.0" backports-tarfile==1.2.0 ; python_version >= "3.10" and python_version < "3.12" bcrypt==5.0.0 ; python_version >= "3.10" and python_version < "4.0" beautifulsoup4==4.14.3 ; python_version >= "3.10" and python_version < "4.0" -boto3==1.42.81 ; python_version >= "3.10" and python_version < "4.0" -botocore==1.42.81 ; python_version >= "3.10" and python_version < "4.0" -build==1.4.2 ; python_version >= "3.10" and python_version < "4.0" +boto3==1.42.97 ; python_version >= "3.10" and python_version < "4.0" +botocore==1.42.97 ; python_version >= "3.10" and python_version < "4.0" +build==1.4.4 ; python_version >= "3.10" and python_version < "4.0" cachecontrol==0.14.4 ; python_version >= "3.10" and python_version < "4.0" -cachetools==7.0.5 ; python_version >= "3.10" and python_version < "4.0" -certifi==2026.2.25 ; python_version >= "3.10" and python_version < "4.0" +cachetools==7.0.6 ; python_version >= "3.10" and python_version < "4.0" +certifi==2026.4.22 ; python_version >= "3.10" and python_version < "4.0" cffi==2.0.0 ; python_version >= "3.10" and python_version < "4.0" charset-normalizer==3.4.7 ; python_version >= "3.10" and python_version < "4.0" cleo==2.1.0 ; python_version >= "3.10" and python_version < "4.0" -click==8.3.1 ; python_version >= "3.10" and python_version < "4.0" +click==8.3.3 ; python_version >= "3.10" and python_version < "4.0" cloudflare==2.19.4 ; python_version >= "3.10" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" configargparse==1.7.5 ; python_version >= "3.10" and python_version < "4.0" configobj==5.0.9 ; python_version >= "3.10" and python_version < "4.0" coverage==7.13.5 ; python_version >= "3.10" and python_version < "4.0" crashtest==0.4.1 ; python_version >= "3.10" and python_version < "4.0" -cryptography==46.0.6 ; python_version >= "3.10" and python_version < "4.0" +cryptography==47.0.0 ; python_version >= "3.10" and python_version < "4.0" cython==0.29.37 ; python_version >= "3.10" and python_version <= "3.12" cython==3.2.4 ; python_version >= "3.13" and python_version < "4.0" decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0" @@ -41,29 +41,29 @@ deprecated==1.3.1 ; python_version >= "3.10" and python_version < "4.0" dill==0.4.1 ; python_version >= "3.10" and python_version < "4.0" distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0" distro==1.9.0 ; python_version >= "3.10" and python_version < "4.0" -dns-lexicon==3.23.2 ; python_version >= "3.10" and python_version < "4.0" +dns-lexicon==3.25.1 ; python_version >= "3.10" and python_version < "4.0" dnspython==2.8.0 ; python_version >= "3.10" and python_version < "4.0" docutils==0.21.2 ; python_version == "3.10" docutils==0.22.4 ; python_version >= "3.11" and python_version < "4.0" -dulwich==1.1.0 ; python_version >= "3.10" and python_version < "4.0" +dulwich==1.2.0 ; python_version >= "3.10" and python_version < "4.0" exceptiongroup==1.3.1 ; python_version == "3.10" execnet==2.1.2 ; python_version >= "3.10" and python_version < "4.0" executing==2.2.1 ; python_version >= "3.10" and python_version < "4.0" -fabric==3.2.2 ; python_version >= "3.10" and python_version < "4.0" +fabric==3.2.3 ; python_version >= "3.10" and python_version < "4.0" fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0" -filelock==3.25.2 ; python_version >= "3.10" and python_version < "4.0" +filelock==3.29.0 ; python_version >= "3.10" and python_version < "4.0" findpython==0.7.1 ; python_version >= "3.10" and python_version < "4.0" -google-api-core==2.30.1 ; python_version >= "3.10" and python_version < "4.0" -google-api-python-client==2.193.0 ; python_version >= "3.10" and python_version < "4.0" +google-api-core==2.30.3 ; python_version >= "3.10" and python_version < "4.0" +google-api-python-client==2.194.0 ; python_version >= "3.10" and python_version < "4.0" google-auth-httplib2==0.3.1 ; python_version >= "3.10" and python_version < "4.0" -google-auth==2.49.1 ; python_version >= "3.10" and python_version < "4.0" -googleapis-common-protos==1.73.1 ; python_version >= "3.10" and python_version < "4.0" +google-auth==2.49.2 ; python_version >= "3.10" and python_version < "4.0" +googleapis-common-protos==1.74.0 ; python_version >= "3.10" and python_version < "4.0" h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0" httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0" httplib2==0.31.2 ; python_version >= "3.10" and python_version < "4.0" httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0" id==1.6.1 ; python_version >= "3.10" and python_version < "4.0" -idna==3.11 ; python_version >= "3.10" and python_version < "4.0" +idna==3.13 ; python_version >= "3.10" and python_version < "4.0" imagesize==1.5.0 ; python_version >= "3.13" and python_version < "4.0" imagesize==2.0.0 ; python_version >= "3.10" and python_version <= "3.12" importlib-metadata==9.0.0 ; python_version >= "3.10" and python_version < "3.12" @@ -73,8 +73,7 @@ invoke==2.2.1 ; python_version >= "3.10" and python_version < "4.0" ipdb==0.13.13 ; python_version >= "3.10" and python_version < "4.0" ipython-pygments-lexers==1.1.1 ; python_version >= "3.11" and python_version < "4.0" ipython==8.39.0 ; python_version == "3.10" -ipython==9.10.1 ; python_version == "3.11" -ipython==9.12.0 ; python_version >= "3.12" and python_version < "4.0" +ipython==9.13.0 ; python_version >= "3.11" and python_version < "4.0" isodate==0.7.2 ; python_version >= "3.10" and python_version < "4.0" isort==5.13.2 ; python_version >= "3.10" and python_version < "4.0" jaraco-classes==3.4.0 ; python_version >= "3.10" and python_version < "4.0" @@ -93,30 +92,31 @@ markupsafe==3.0.3 ; python_version >= "3.10" and python_version < "4.0" matplotlib-inline==0.2.1 ; python_version >= "3.10" and python_version < "4.0" mccabe==0.7.0 ; python_version >= "3.10" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0" -more-itertools==11.0.0 ; python_version >= "3.10" and python_version < "4.0" +more-itertools==11.0.2 ; python_version >= "3.10" and python_version < "4.0" msgpack==1.1.2 ; python_version >= "3.10" and python_version < "4.0" msrest==0.7.1 ; python_version >= "3.10" and python_version < "4.0" mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0" mypy==1.9.0 ; python_version >= "3.10" and python_version < "4.0" -nh3==0.3.4 ; python_version >= "3.10" and python_version < "4.0" +nh3==0.3.5 ; python_version >= "3.10" and python_version < "4.0" oauthlib==3.3.1 ; python_version >= "3.10" and python_version < "4.0" -packaging==26.0 ; python_version >= "3.10" and python_version < "4.0" +packaging==26.2 ; python_version >= "3.10" and python_version < "4.0" paramiko==4.0.0 ; python_version >= "3.10" and python_version < "4.0" parsedatetime==2.6 ; python_version >= "3.10" and python_version < "4.0" parso==0.8.6 ; python_version >= "3.10" and python_version < "4.0" -pbs-installer==2026.3.25 ; python_version >= "3.10" and python_version < "4.0" +pbs-installer==2026.4.7 ; python_version >= "3.10" and python_version < "4.0" pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform != "win32" and sys_platform != "emscripten" -pip==26.0.1 ; python_version >= "3.10" and python_version < "4.0" +pip==26.1 ; python_version >= "3.10" and python_version < "4.0" pkginfo==1.12.1.2 ; python_version >= "3.10" and python_version < "4.0" -platformdirs==4.9.4 ; python_version >= "3.10" and python_version < "4.0" +platformdirs==4.9.6 ; python_version >= "3.10" and python_version < "4.0" pluggy==1.6.0 ; python_version >= "3.10" and python_version < "4.0" ply==3.11 ; python_version >= "3.10" and python_version < "4.0" poetry-core==2.3.2 ; python_version >= "3.10" and python_version < "4.0" poetry-plugin-export==1.10.0 ; python_version >= "3.10" and python_version < "4.0" -poetry==2.3.3 ; python_version >= "3.10" and python_version < "4.0" +poetry==2.3.4 ; python_version >= "3.10" and python_version < "4.0" prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0" proto-plus==1.27.2 ; python_version >= "3.10" and python_version < "4.0" -protobuf==6.33.6 ; python_version >= "3.10" and python_version < "4.0" +protobuf==7.34.1 ; python_version >= "3.10" and python_version < "4.0" +psutil==7.2.2 ; python_version >= "3.11" and python_version < "4.0" ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform != "win32" and sys_platform != "emscripten" pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0" pyasn1-modules==0.4.2 ; python_version >= "3.10" and python_version < "4.0" @@ -125,7 +125,7 @@ pycparser==3.0 ; python_version >= "3.10" and python_version < "4.0" and impleme pygments==2.20.0 ; python_version >= "3.10" and python_version < "4.0" pylint==3.3.3 ; python_version >= "3.10" and python_version < "4.0" pynacl==1.6.2 ; python_version >= "3.10" and python_version < "4.0" -pyopenssl==26.0.0 ; python_version >= "3.10" and python_version < "4.0" +pyopenssl==26.1.0 ; python_version >= "3.10" and python_version < "4.0" pyotp==2.9.0 ; python_version >= "3.10" and python_version < "4.0" pyparsing==3.3.2 ; python_version >= "3.10" and python_version < "4.0" pyproject-api==1.10.0 ; python_version >= "3.10" and python_version < "4.0" @@ -133,25 +133,26 @@ pyproject-hooks==1.2.0 ; python_version >= "3.10" and python_version < "4.0" pyrfc3339==2.1.0 ; python_version >= "3.10" and python_version < "4.0" pytest-cov==7.1.0 ; python_version >= "3.10" and python_version < "4.0" pytest-xdist==3.8.0 ; python_version >= "3.10" and python_version < "4.0" -pytest==9.0.2 ; python_version >= "3.10" and python_version < "4.0" +pytest==9.0.3 ; python_version >= "3.10" and python_version < "4.0" python-augeas==1.2.0 ; python_version >= "3.10" and python_version < "4.0" python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" python-digitalocean==1.17.0 ; python_version >= "3.10" and python_version < "4.0" -python-discovery==1.2.1 ; python_version >= "3.10" and python_version < "4.0" +python-discovery==1.2.2 ; python_version >= "3.10" and python_version < "4.0" pywin32-ctypes==0.2.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" pywin32==311 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" pyyaml==6.0.3 ; python_version >= "3.10" and python_version < "4.0" -rapidfuzz==3.14.3 ; python_version >= "3.10" and python_version < "4.0" +rapidfuzz==3.14.5 ; python_version >= "3.10" and python_version < "4.0" readme-renderer==44.0 ; python_version >= "3.10" and python_version < "4.0" requests-file==3.0.1 ; python_version >= "3.10" and python_version < "4.0" requests-oauthlib==2.0.0 ; python_version >= "3.10" and python_version < "4.0" requests-toolbelt==1.0.0 ; python_version >= "3.10" and python_version < "4.0" +requests-unixsocket==0.4.1 ; python_version >= "3.10" and python_version < "4.0" requests==2.33.1 ; python_version >= "3.10" and python_version < "4.0" rfc3986==2.0.0 ; python_version >= "3.10" and python_version < "4.0" -rich==14.3.3 ; python_version >= "3.10" and python_version < "4.0" +rich==15.0.0 ; python_version >= "3.10" and python_version < "4.0" roman-numerals==4.1.0 ; python_version >= "3.11" and python_version < "4.0" -ruff==0.15.8 ; python_version >= "3.10" and python_version < "4.0" -s3transfer==0.16.0 ; python_version >= "3.10" and python_version < "4.0" +ruff==0.15.12 ; python_version >= "3.10" and python_version < "4.0" +s3transfer==0.16.1 ; python_version >= "3.10" and python_version < "4.0" secretstorage==3.5.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" semantic-version==2.10.0 ; python_version >= "3.10" and python_version < "4.0" setuptools-rust==1.12.1 ; python_version >= "3.10" and python_version < "4.0" @@ -177,24 +178,24 @@ tomli-w==1.2.0 ; python_version >= "3.10" and python_version < "4.0" tomli==2.4.1 ; python_version == "3.10" tomlkit==0.14.0 ; python_version >= "3.10" and python_version < "4.0" towncrier==25.8.0 ; python_version >= "3.10" and python_version < "4.0" -tox==4.52.0 ; python_version >= "3.10" and python_version < "4.0" +tox==4.53.0 ; python_version >= "3.10" and python_version < "4.0" traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0" -trove-classifiers==2026.1.14.14 ; python_version >= "3.10" and python_version < "4.0" +trove-classifiers==2026.4.28.13 ; python_version >= "3.10" and python_version < "4.0" twine==6.2.0 ; python_version >= "3.10" and python_version < "4.0" -types-httplib2==0.31.2.20260402 ; python_version >= "3.10" and python_version < "4.0" +types-httplib2==0.31.2.20260408 ; python_version >= "3.10" and python_version < "4.0" types-pyrfc3339==2.0.1.20250825 ; python_version >= "3.10" and python_version < "4.0" -types-python-dateutil==2.9.0.20260402 ; python_version >= "3.10" and python_version < "4.0" -types-pywin32==311.0.0.20260402 ; python_version >= "3.10" and python_version < "4.0" -types-requests==2.33.0.20260402 ; python_version >= "3.10" and python_version < "4.0" -types-setuptools==82.0.0.20260402 ; python_version >= "3.10" and python_version < "4.0" +types-python-dateutil==2.9.0.20260408 ; python_version >= "3.10" and python_version < "4.0" +types-pywin32==311.0.0.20260408 ; python_version >= "3.10" and python_version < "4.0" +types-requests==2.33.0.20260408 ; python_version >= "3.10" and python_version < "4.0" +types-setuptools==82.0.0.20260408 ; python_version >= "3.10" and python_version < "4.0" typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0" uritemplate==4.2.0 ; python_version >= "3.10" and python_version < "4.0" urllib3==2.6.3 ; python_version >= "3.10" and python_version < "4.0" -uv==0.11.3 ; python_version >= "3.10" and python_version < "4.0" -virtualenv==21.2.0 ; python_version >= "3.10" and python_version < "4.0" +uv==0.11.8 ; python_version >= "3.10" and python_version < "4.0" +virtualenv==21.3.0 ; python_version >= "3.10" and python_version < "4.0" wcwidth==0.6.0 ; python_version >= "3.10" and python_version < "4.0" -wheel==0.46.3 ; python_version >= "3.10" and python_version < "4.0" +wheel==0.47.0 ; python_version >= "3.10" and python_version < "4.0" wrapt==2.1.2 ; python_version >= "3.10" and python_version < "4.0" xattr==1.3.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "darwin" -zipp==3.23.0 ; python_version >= "3.10" and python_version < "3.12" +zipp==3.23.1 ; python_version >= "3.10" and python_version < "3.12" zstandard==0.25.0 ; python_version >= "3.10" and python_version < "4.0"