Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-certbot-dns-ovh for
openSUSE:Factory checked in at 2025-06-23 15:00:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-ovh (Old)
and /work/SRC/openSUSE:Factory/.python-certbot-dns-ovh.new.7067 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot-dns-ovh"
Mon Jun 23 15:00:38 2025 rev:3 rq:1287408 version:4.1.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-certbot-dns-ovh/python-certbot-dns-ovh.changes
2025-04-22 17:30:03.623560857 +0200
+++
/work/SRC/openSUSE:Factory/.python-certbot-dns-ovh.new.7067/python-certbot-dns-ovh.changes
2025-06-23 15:00:41.674351659 +0200
@@ -1,0 +2,7 @@
+Fri Jun 13 14:51:51 UTC 2025 - Markéta Machová <[email protected]>
+
+- update to version 4.1.1
+ * Switched to src-layout from flat-layout to accommodate PEP 517 pip
+ editable installs
+
+-------------------------------------------------------------------
Old:
----
certbot_dns_ovh-4.0.0.tar.gz
New:
----
certbot_dns_ovh-4.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-certbot-dns-ovh.spec ++++++
--- /var/tmp/diff_new_pack.PRCq14/_old 2025-06-23 15:00:42.270376575 +0200
+++ /var/tmp/diff_new_pack.PRCq14/_new 2025-06-23 15:00:42.270376575 +0200
@@ -17,7 +17,7 @@
Name: python-certbot-dns-ovh
-Version: 4.0.0
+Version: 4.1.1
Release: 0
Summary: OVH DNS Authenticator plugin for Certbot
License: Apache-2.0
++++++ certbot_dns_ovh-4.0.0.tar.gz -> certbot_dns_ovh-4.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/certbot_dns_ovh-4.0.0/MANIFEST.in
new/certbot_dns_ovh-4.1.1/MANIFEST.in
--- old/certbot_dns_ovh-4.0.0/MANIFEST.in 2025-04-08 00:03:33.000000000
+0200
+++ new/certbot_dns_ovh-4.1.1/MANIFEST.in 2025-06-12 20:08:34.000000000
+0200
@@ -1,6 +1,6 @@
include LICENSE.txt
include README.rst
recursive-include docs *
-include certbot_dns_ovh/py.typed
+include src/certbot_dns_ovh/py.typed
global-exclude __pycache__
global-exclude *.py[cod]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/certbot_dns_ovh-4.0.0/PKG-INFO
new/certbot_dns_ovh-4.1.1/PKG-INFO
--- old/certbot_dns_ovh-4.0.0/PKG-INFO 2025-04-08 00:03:40.236482600 +0200
+++ new/certbot_dns_ovh-4.1.1/PKG-INFO 2025-06-12 20:08:42.812792800 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: certbot-dns-ovh
-Version: 4.0.0
+Version: 4.1.1
Summary: OVH DNS Authenticator plugin for Certbot
Home-page: https://github.com/certbot/certbot
Author: Certbot Project
@@ -24,11 +24,11 @@
Classifier: Topic :: System :: Networking
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: Utilities
-Requires-Python: >=3.9
+Requires-Python: >=3.9.2
License-File: LICENSE.txt
Requires-Dist: dns-lexicon>=3.15.1
-Requires-Dist: acme>=4.0.0
-Requires-Dist: certbot>=4.0.0
+Requires-Dist: acme>=4.1.1
+Requires-Dist: certbot>=4.1.1
Provides-Extra: docs
Requires-Dist: Sphinx>=1.0; extra == "docs"
Requires-Dist: sphinx_rtd_theme; extra == "docs"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/__init__.py
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/__init__.py
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/__init__.py 2025-04-08
00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/__init__.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,110 +0,0 @@
-"""
-The `~certbot_dns_ovh.dns_ovh` plugin automates the process of
-completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and
-subsequently removing, TXT records using the OVH API.
-
-.. note::
- The plugin is not installed by default. It can be installed by heading to
- `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_,
choosing your system and
- selecting the Wildcard tab.
-
-Named Arguments
----------------
-
-=================================== ==========================================
-``--dns-ovh-credentials`` OVH credentials_ INI file.
- (Required)
-``--dns-ovh-propagation-seconds`` The number of seconds to wait for DNS
- to propagate before asking the ACME
- server to verify the DNS record.
- (Default: 30)
-=================================== ==========================================
-
-
-Credentials
------------
-
-Use of this plugin requires a configuration file containing OVH API
-credentials for an account with the following access rules (allowing all
domains):
-
-* ``GET /domain/zone/*``
-* ``PUT /domain/zone/*``
-* ``POST /domain/zone/*``
-* ``DELETE /domain/zone/*``
-
-Alternatively, to allow a single domain only, the following access rules apply:
-
-* ``GET /domain/zone/``
-* ``GET /domain/zone/<REQUIRED_DOMAIN>/*``
-* ``PUT /domain/zone/<REQUIRED_DOMAIN>/*``
-* ``POST /domain/zone/<REQUIRED_DOMAIN>/*``
-* ``DELETE /domain/zone/<REQUIRED_DOMAIN>/*``
-
-These credentials can be obtained at the following links:
-
-* `OVH Europe <https://eu.api.ovh.com/createToken/>`_ (endpoint: ``ovh-eu``)
-* `OVH North America <https://ca.api.ovh.com/createToken/>`_ (endpoint:
- ``ovh-ca``)
-
-.. code-block:: ini
- :name: credentials.ini
- :caption: Example credentials file:
-
- # OVH API credentials used by Certbot
- dns_ovh_endpoint = ovh-eu
- dns_ovh_application_key = MDAwMDAwMDAwMDAw
- dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
- dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
-
-The path to this file can be provided interactively or using the
-``--dns-ovh-credentials`` command-line argument. Certbot records the path
-to this file for use during renewal, but does not store the file's contents.
-
-.. caution::
- You should protect these API credentials as you would the password to your
- OVH account. Users who can read this file can use these credentials
- to issue arbitrary API calls on your behalf. Users who can cause Certbot to
- run using these credentials can complete a ``dns-01`` challenge to acquire
- new certificates or revoke existing certificates for associated domains,
- even if those domains aren't being managed by this server.
-
-Certbot will emit a warning if it detects that the credentials file can be
-accessed by other users on your system. The warning reads "Unsafe permissions
-on credentials configuration file", followed by the path to the credentials
-file. This warning will be emitted each time Certbot uses the credentials file,
-including for renewal, and cannot be silenced except by addressing the issue
-(e.g., by using a command like ``chmod 600`` to restrict access to the file).
-
-
-Examples
---------
-
-.. code-block:: bash
- :caption: To acquire a certificate for ``example.com``
-
- certbot certonly \\
- --dns-ovh \\
- --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
- -d example.com
-
-.. code-block:: bash
- :caption: To acquire a single certificate for both ``example.com`` and
- ``www.example.com``
-
- certbot certonly \\
- --dns-ovh \\
- --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
- -d example.com \\
- -d www.example.com
-
-.. code-block:: bash
- :caption: To acquire a certificate for ``example.com``, waiting 60 seconds
- for DNS propagation
-
- certbot certonly \\
- --dns-ovh \\
- --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
- --dns-ovh-propagation-seconds 60 \\
- -d example.com
-
-"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/__init__.py
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/__init__.py
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/__init__.py
2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/__init__.py
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"""Internal implementation of `~certbot_dns_ovh.dns_ovh` plugin."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/dns_ovh.py
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/dns_ovh.py
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/dns_ovh.py
2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/dns_ovh.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,70 +0,0 @@
-"""DNS Authenticator for OVH DNS."""
-import logging
-from typing import Any
-from typing import Callable
-from typing import Optional
-
-from requests import HTTPError
-
-from certbot import errors
-from certbot.plugins import dns_common_lexicon
-
-logger = logging.getLogger(__name__)
-
-TOKEN_URL = 'https://eu.api.ovh.com/createToken/ or
https://ca.api.ovh.com/createToken/'
-
-
-class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator):
- """DNS Authenticator for OVH
-
- This Authenticator uses the OVH API to fulfill a dns-01 challenge.
- """
-
- description = 'Obtain certificates using a DNS TXT record (if you are
using OVH for DNS).'
-
- def __init__(self, *args: Any, **kwargs: Any) -> None:
- super().__init__(*args, **kwargs)
- self._add_provider_option('endpoint',
- 'OVH API endpoint (ovh-eu or ovh-ca)',
- 'auth_entrypoint')
- self._add_provider_option('application-key',
- f'Application key for OVH API, obtained from
{TOKEN_URL}',
- 'auth_application_key')
- self._add_provider_option('application-secret',
- f'Application secret for OVH API, obtained
from {TOKEN_URL}',
- 'auth_application_secret')
- self._add_provider_option('consumer-key',
- f'Consumer key for OVH API, obtained from
{TOKEN_URL}',
- 'auth_consumer_key')
-
- @classmethod
- def add_parser_arguments(cls, add: Callable[..., None],
- default_propagation_seconds: int = 120) -> None:
- super().add_parser_arguments(add, default_propagation_seconds)
- add('credentials', help='OVH credentials INI file.')
-
- def more_info(self) -> str:
- return 'This plugin configures a DNS TXT record to respond to a dns-01
challenge using ' + \
- 'the OVH API.'
-
- @property
- def _provider_name(self) -> str:
- return 'ovh'
-
- def _handle_http_error(self, e: HTTPError, domain_name: str) ->
errors.PluginError:
- hint = None
- if str(e).startswith('400 Client Error:'):
- hint = 'Is your Application Secret value correct?'
- if str(e).startswith('403 Client Error:'):
- hint = 'Are your Application Key and Consumer Key values correct?'
-
- hint_disp = f' ({hint})' if hint else ''
-
- return errors.PluginError(f'Error determining zone identifier for
{domain_name}: '
- f'{e}.{hint_disp}')
-
- def _handle_general_error(self, e: Exception, domain_name: str) ->
Optional[errors.PluginError]:
- if domain_name in str(e) and str(e).endswith('not found'):
- return None
-
- return super()._handle_general_error(e, domain_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/tests/__init__.py
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/tests/__init__.py
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/tests/__init__.py
2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/tests/__init__.py
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"""certbot-dns-ovh tests"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,47 +0,0 @@
-"""Tests for certbot_dns_ovh._internal.dns_ovh."""
-from unittest import mock
-import sys
-
-import pytest
-from requests import Response
-from requests.exceptions import HTTPError
-
-from certbot.compat import os
-from certbot.plugins import dns_test_common
-from certbot.plugins import dns_test_common_lexicon
-from certbot.tests import util as test_util
-
-ENDPOINT = 'ovh-eu'
-APPLICATION_KEY = 'foo'
-APPLICATION_SECRET = 'bar'
-CONSUMER_KEY = 'spam'
-
-
-class AuthenticatorTest(test_util.TempDirTestCase,
-
dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest):
-
- DOMAIN_NOT_FOUND = Exception('Domain example.com not found')
- LOGIN_ERROR = HTTPError('403 Client Error: Forbidden for url:
https://eu.api.ovh.com/1.0/...', response=Response())
-
- def setUp(self):
- super().setUp()
-
- from certbot_dns_ovh._internal.dns_ovh import Authenticator
-
- path = os.path.join(self.tempdir, 'file.ini')
- credentials = {
- "ovh_endpoint": ENDPOINT,
- "ovh_application_key": APPLICATION_KEY,
- "ovh_application_secret": APPLICATION_SECRET,
- "ovh_consumer_key": CONSUMER_KEY,
- }
- dns_test_common.write(credentials, path)
-
- self.config = mock.MagicMock(ovh_credentials=path,
- ovh_propagation_seconds=0) # don't wait
during tests
-
- self.auth = Authenticator(self.config, 'ovh')
-
-
-if __name__ == "__main__":
- sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/PKG-INFO
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/PKG-INFO
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/PKG-INFO 2025-04-08
00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/PKG-INFO 1970-01-01
01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-Metadata-Version: 2.4
-Name: certbot-dns-ovh
-Version: 4.0.0
-Summary: OVH DNS Authenticator plugin for Certbot
-Home-page: https://github.com/certbot/certbot
-Author: Certbot Project
-Author-email: [email protected]
-License: Apache License 2.0
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Plugins
-Classifier: Intended Audience :: System Administrators
-Classifier: License :: OSI Approved :: Apache Software License
-Classifier: Operating System :: POSIX :: Linux
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Topic :: Internet :: WWW/HTTP
-Classifier: Topic :: Security
-Classifier: Topic :: System :: Installation/Setup
-Classifier: Topic :: System :: Networking
-Classifier: Topic :: System :: Systems Administration
-Classifier: Topic :: Utilities
-Requires-Python: >=3.9
-License-File: LICENSE.txt
-Requires-Dist: dns-lexicon>=3.15.1
-Requires-Dist: acme>=4.0.0
-Requires-Dist: certbot>=4.0.0
-Provides-Extra: docs
-Requires-Dist: Sphinx>=1.0; extra == "docs"
-Requires-Dist: sphinx_rtd_theme; extra == "docs"
-Provides-Extra: test
-Requires-Dist: pytest; extra == "test"
-Dynamic: author
-Dynamic: author-email
-Dynamic: classifier
-Dynamic: home-page
-Dynamic: license
-Dynamic: license-file
-Dynamic: provides-extra
-Dynamic: requires-dist
-Dynamic: requires-python
-Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/SOURCES.txt
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/SOURCES.txt
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/SOURCES.txt
2025-04-08 00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/SOURCES.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-LICENSE.txt
-MANIFEST.in
-README.rst
-setup.py
-certbot_dns_ovh/__init__.py
-certbot_dns_ovh/py.typed
-certbot_dns_ovh.egg-info/PKG-INFO
-certbot_dns_ovh.egg-info/SOURCES.txt
-certbot_dns_ovh.egg-info/dependency_links.txt
-certbot_dns_ovh.egg-info/entry_points.txt
-certbot_dns_ovh.egg-info/requires.txt
-certbot_dns_ovh.egg-info/top_level.txt
-certbot_dns_ovh/_internal/__init__.py
-certbot_dns_ovh/_internal/dns_ovh.py
-certbot_dns_ovh/_internal/tests/__init__.py
-certbot_dns_ovh/_internal/tests/dns_ovh_test.py
-docs/.gitignore
-docs/Makefile
-docs/api.rst
-docs/conf.py
-docs/index.rst
-docs/make.bat
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/dependency_links.txt
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/dependency_links.txt
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/dependency_links.txt
2025-04-08 00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/dependency_links.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/entry_points.txt
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/entry_points.txt
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/entry_points.txt
2025-04-08 00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/entry_points.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-[certbot.plugins]
-dns-ovh = certbot_dns_ovh._internal.dns_ovh:Authenticator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/requires.txt
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/requires.txt
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/requires.txt
2025-04-08 00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/requires.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-dns-lexicon>=3.15.1
-acme>=4.0.0
-certbot>=4.0.0
-
-[docs]
-Sphinx>=1.0
-sphinx_rtd_theme
-
-[test]
-pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/top_level.txt
new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/top_level.txt
--- old/certbot_dns_ovh-4.0.0/certbot_dns_ovh.egg-info/top_level.txt
2025-04-08 00:03:40.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/certbot_dns_ovh.egg-info/top_level.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-certbot_dns_ovh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/certbot_dns_ovh-4.0.0/setup.py
new/certbot_dns_ovh-4.1.1/setup.py
--- old/certbot_dns_ovh-4.0.0/setup.py 2025-04-08 00:03:33.000000000 +0200
+++ new/certbot_dns_ovh-4.1.1/setup.py 2025-06-12 20:08:35.000000000 +0200
@@ -4,7 +4,7 @@
from setuptools import find_packages
from setuptools import setup
-version = '4.0.0'
+version = '4.1.1'
install_requires = [
'dns-lexicon>=3.15.1',
@@ -38,7 +38,7 @@
author="Certbot Project",
author_email='[email protected]',
license='Apache License 2.0',
- python_requires='>=3.9',
+ python_requires='>=3.9.2',
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Plugins',
@@ -60,7 +60,8 @@
'Topic :: Utilities',
],
- packages=find_packages(),
+ packages=find_packages(where='src'),
+ package_dir={'': 'src'},
include_package_data=True,
install_requires=install_requires,
extras_require={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/__init__.py
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/__init__.py
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/__init__.py 1970-01-01
01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/__init__.py 2025-06-12
20:08:34.000000000 +0200
@@ -0,0 +1,110 @@
+"""
+The `~certbot_dns_ovh.dns_ovh` plugin automates the process of
+completing a ``dns-01`` challenge (`~acme.challenges.DNS01`) by creating, and
+subsequently removing, TXT records using the OVH API.
+
+.. note::
+ The plugin is not installed by default. It can be installed by heading to
+ `certbot.eff.org <https://certbot.eff.org/instructions#wildcard>`_,
choosing your system and
+ selecting the Wildcard tab.
+
+Named Arguments
+---------------
+
+=================================== ==========================================
+``--dns-ovh-credentials`` OVH credentials_ INI file.
+ (Required)
+``--dns-ovh-propagation-seconds`` The number of seconds to wait for DNS
+ to propagate before asking the ACME
+ server to verify the DNS record.
+ (Default: 30)
+=================================== ==========================================
+
+
+Credentials
+-----------
+
+Use of this plugin requires a configuration file containing OVH API
+credentials for an account with the following access rules (allowing all
domains):
+
+* ``GET /domain/zone/*``
+* ``PUT /domain/zone/*``
+* ``POST /domain/zone/*``
+* ``DELETE /domain/zone/*``
+
+Alternatively, to allow a single domain only, the following access rules apply:
+
+* ``GET /domain/zone/``
+* ``GET /domain/zone/<REQUIRED_DOMAIN>/*``
+* ``PUT /domain/zone/<REQUIRED_DOMAIN>/*``
+* ``POST /domain/zone/<REQUIRED_DOMAIN>/*``
+* ``DELETE /domain/zone/<REQUIRED_DOMAIN>/*``
+
+These credentials can be obtained at the following links:
+
+* `OVH Europe <https://eu.api.ovh.com/createToken/>`_ (endpoint: ``ovh-eu``)
+* `OVH North America <https://ca.api.ovh.com/createToken/>`_ (endpoint:
+ ``ovh-ca``)
+
+.. code-block:: ini
+ :name: credentials.ini
+ :caption: Example credentials file:
+
+ # OVH API credentials used by Certbot
+ dns_ovh_endpoint = ovh-eu
+ dns_ovh_application_key = MDAwMDAwMDAwMDAw
+ dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
+ dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
+
+The path to this file can be provided interactively or using the
+``--dns-ovh-credentials`` command-line argument. Certbot records the path
+to this file for use during renewal, but does not store the file's contents.
+
+.. caution::
+ You should protect these API credentials as you would the password to your
+ OVH account. Users who can read this file can use these credentials
+ to issue arbitrary API calls on your behalf. Users who can cause Certbot to
+ run using these credentials can complete a ``dns-01`` challenge to acquire
+ new certificates or revoke existing certificates for associated domains,
+ even if those domains aren't being managed by this server.
+
+Certbot will emit a warning if it detects that the credentials file can be
+accessed by other users on your system. The warning reads "Unsafe permissions
+on credentials configuration file", followed by the path to the credentials
+file. This warning will be emitted each time Certbot uses the credentials file,
+including for renewal, and cannot be silenced except by addressing the issue
+(e.g., by using a command like ``chmod 600`` to restrict access to the file).
+
+
+Examples
+--------
+
+.. code-block:: bash
+ :caption: To acquire a certificate for ``example.com``
+
+ certbot certonly \\
+ --dns-ovh \\
+ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
+ -d example.com
+
+.. code-block:: bash
+ :caption: To acquire a single certificate for both ``example.com`` and
+ ``www.example.com``
+
+ certbot certonly \\
+ --dns-ovh \\
+ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
+ -d example.com \\
+ -d www.example.com
+
+.. code-block:: bash
+ :caption: To acquire a certificate for ``example.com``, waiting 60 seconds
+ for DNS propagation
+
+ certbot certonly \\
+ --dns-ovh \\
+ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \\
+ --dns-ovh-propagation-seconds 60 \\
+ -d example.com
+
+"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/__init__.py
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/__init__.py
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/__init__.py
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/__init__.py
2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1 @@
+"""Internal implementation of `~certbot_dns_ovh.dns_ovh` plugin."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/dns_ovh.py
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/dns_ovh.py
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/dns_ovh.py
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/dns_ovh.py
2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1,70 @@
+"""DNS Authenticator for OVH DNS."""
+import logging
+from typing import Any
+from typing import Callable
+from typing import Optional
+
+from requests import HTTPError
+
+from certbot import errors
+from certbot.plugins import dns_common_lexicon
+
+logger = logging.getLogger(__name__)
+
+TOKEN_URL = 'https://eu.api.ovh.com/createToken/ or
https://ca.api.ovh.com/createToken/'
+
+
+class Authenticator(dns_common_lexicon.LexiconDNSAuthenticator):
+ """DNS Authenticator for OVH
+
+ This Authenticator uses the OVH API to fulfill a dns-01 challenge.
+ """
+
+ description = 'Obtain certificates using a DNS TXT record (if you are
using OVH for DNS).'
+
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
+ super().__init__(*args, **kwargs)
+ self._add_provider_option('endpoint',
+ 'OVH API endpoint (ovh-eu or ovh-ca)',
+ 'auth_entrypoint')
+ self._add_provider_option('application-key',
+ f'Application key for OVH API, obtained from
{TOKEN_URL}',
+ 'auth_application_key')
+ self._add_provider_option('application-secret',
+ f'Application secret for OVH API, obtained
from {TOKEN_URL}',
+ 'auth_application_secret')
+ self._add_provider_option('consumer-key',
+ f'Consumer key for OVH API, obtained from
{TOKEN_URL}',
+ 'auth_consumer_key')
+
+ @classmethod
+ def add_parser_arguments(cls, add: Callable[..., None],
+ default_propagation_seconds: int = 120) -> None:
+ super().add_parser_arguments(add, default_propagation_seconds)
+ add('credentials', help='OVH credentials INI file.')
+
+ def more_info(self) -> str:
+ return 'This plugin configures a DNS TXT record to respond to a dns-01
challenge using ' + \
+ 'the OVH API.'
+
+ @property
+ def _provider_name(self) -> str:
+ return 'ovh'
+
+ def _handle_http_error(self, e: HTTPError, domain_name: str) ->
errors.PluginError:
+ hint = None
+ if str(e).startswith('400 Client Error:'):
+ hint = 'Is your Application Secret value correct?'
+ if str(e).startswith('403 Client Error:'):
+ hint = 'Are your Application Key and Consumer Key values correct?'
+
+ hint_disp = f' ({hint})' if hint else ''
+
+ return errors.PluginError(f'Error determining zone identifier for
{domain_name}: '
+ f'{e}.{hint_disp}')
+
+ def _handle_general_error(self, e: Exception, domain_name: str) ->
Optional[errors.PluginError]:
+ if domain_name in str(e) and str(e).endswith('not found'):
+ return None
+
+ return super()._handle_general_error(e, domain_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/tests/__init__.py
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/tests/__init__.py
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/tests/__init__.py
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/tests/__init__.py
2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1 @@
+"""certbot-dns-ovh tests"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
---
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
1970-01-01 01:00:00.000000000 +0100
+++
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
2025-06-12 20:08:34.000000000 +0200
@@ -0,0 +1,47 @@
+"""Tests for certbot_dns_ovh._internal.dns_ovh."""
+from unittest import mock
+import sys
+
+import pytest
+from requests import Response
+from requests.exceptions import HTTPError
+
+from certbot.compat import os
+from certbot.plugins import dns_test_common
+from certbot.plugins import dns_test_common_lexicon
+from certbot.tests import util as test_util
+
+ENDPOINT = 'ovh-eu'
+APPLICATION_KEY = 'foo'
+APPLICATION_SECRET = 'bar'
+CONSUMER_KEY = 'spam'
+
+
+class AuthenticatorTest(test_util.TempDirTestCase,
+
dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest):
+
+ DOMAIN_NOT_FOUND = Exception('Domain example.com not found')
+ LOGIN_ERROR = HTTPError('403 Client Error: Forbidden for url:
https://eu.api.ovh.com/1.0/...', response=Response())
+
+ def setUp(self):
+ super().setUp()
+
+ from certbot_dns_ovh._internal.dns_ovh import Authenticator
+
+ path = os.path.join(self.tempdir, 'file.ini')
+ credentials = {
+ "ovh_endpoint": ENDPOINT,
+ "ovh_application_key": APPLICATION_KEY,
+ "ovh_application_secret": APPLICATION_SECRET,
+ "ovh_consumer_key": CONSUMER_KEY,
+ }
+ dns_test_common.write(credentials, path)
+
+ self.config = mock.MagicMock(ovh_credentials=path,
+ ovh_propagation_seconds=0) # don't wait
during tests
+
+ self.auth = Authenticator(self.config, 'ovh')
+
+
+if __name__ == "__main__":
+ sys.exit(pytest.main(sys.argv[1:] + [__file__])) # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/PKG-INFO
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/PKG-INFO
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/PKG-INFO
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/PKG-INFO
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1,46 @@
+Metadata-Version: 2.4
+Name: certbot-dns-ovh
+Version: 4.1.1
+Summary: OVH DNS Authenticator plugin for Certbot
+Home-page: https://github.com/certbot/certbot
+Author: Certbot Project
+Author-email: [email protected]
+License: Apache License 2.0
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Intended Audience :: System Administrators
+Classifier: License :: OSI Approved :: Apache Software License
+Classifier: Operating System :: POSIX :: Linux
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Topic :: Internet :: WWW/HTTP
+Classifier: Topic :: Security
+Classifier: Topic :: System :: Installation/Setup
+Classifier: Topic :: System :: Networking
+Classifier: Topic :: System :: Systems Administration
+Classifier: Topic :: Utilities
+Requires-Python: >=3.9.2
+License-File: LICENSE.txt
+Requires-Dist: dns-lexicon>=3.15.1
+Requires-Dist: acme>=4.1.1
+Requires-Dist: certbot>=4.1.1
+Provides-Extra: docs
+Requires-Dist: Sphinx>=1.0; extra == "docs"
+Requires-Dist: sphinx_rtd_theme; extra == "docs"
+Provides-Extra: test
+Requires-Dist: pytest; extra == "test"
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: provides-extra
+Dynamic: requires-dist
+Dynamic: requires-python
+Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/SOURCES.txt
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/SOURCES.txt
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/SOURCES.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/SOURCES.txt
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1,22 @@
+LICENSE.txt
+MANIFEST.in
+README.rst
+setup.py
+docs/.gitignore
+docs/Makefile
+docs/api.rst
+docs/conf.py
+docs/index.rst
+docs/make.bat
+src/certbot_dns_ovh/__init__.py
+src/certbot_dns_ovh/py.typed
+src/certbot_dns_ovh.egg-info/PKG-INFO
+src/certbot_dns_ovh.egg-info/SOURCES.txt
+src/certbot_dns_ovh.egg-info/dependency_links.txt
+src/certbot_dns_ovh.egg-info/entry_points.txt
+src/certbot_dns_ovh.egg-info/requires.txt
+src/certbot_dns_ovh.egg-info/top_level.txt
+src/certbot_dns_ovh/_internal/__init__.py
+src/certbot_dns_ovh/_internal/dns_ovh.py
+src/certbot_dns_ovh/_internal/tests/__init__.py
+src/certbot_dns_ovh/_internal/tests/dns_ovh_test.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/dependency_links.txt
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/dependency_links.txt
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/dependency_links.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/dependency_links.txt
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1 @@
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/entry_points.txt
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/entry_points.txt
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/entry_points.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/entry_points.txt
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1,2 @@
+[certbot.plugins]
+dns-ovh = certbot_dns_ovh._internal.dns_ovh:Authenticator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/requires.txt
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/requires.txt
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/requires.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/requires.txt
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1,10 @@
+dns-lexicon>=3.15.1
+acme>=4.1.1
+certbot>=4.1.1
+
+[docs]
+Sphinx>=1.0
+sphinx_rtd_theme
+
+[test]
+pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/top_level.txt
new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/top_level.txt
--- old/certbot_dns_ovh-4.0.0/src/certbot_dns_ovh.egg-info/top_level.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/certbot_dns_ovh-4.1.1/src/certbot_dns_ovh.egg-info/top_level.txt
2025-06-12 20:08:42.000000000 +0200
@@ -0,0 +1 @@
+certbot_dns_ovh