Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-certbot-dns-cloudflare for
openSUSE:Factory checked in at 2026-09-08 17:07:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-certbot-dns-cloudflare (Old)
and /work/SRC/openSUSE:Factory/.python-certbot-dns-cloudflare.new.1265
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certbot-dns-cloudflare"
Tue Sep 8 17:07:56 2026 rev:55 rq:1376374 version:5.8.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-certbot-dns-cloudflare/python-certbot-dns-cloudflare.changes
2026-07-23 23:18:01.224478839 +0200
+++
/work/SRC/openSUSE:Factory/.python-certbot-dns-cloudflare.new.1265/python-certbot-dns-cloudflare.changes
2026-09-08 17:08:03.707932622 +0200
@@ -1,0 +2,6 @@
+Tue Sep 8 13:08:15 UTC 2026 - Markéta Machová <[email protected]>
+
+- update to version 5.8.0
+ * sync with the main certbot package
+
+-------------------------------------------------------------------
Old:
----
certbot_dns_cloudflare-5.7.0.tar.gz
New:
----
certbot_dns_cloudflare-5.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-certbot-dns-cloudflare.spec ++++++
--- /var/tmp/diff_new_pack.lJBst5/_old 2026-09-08 17:08:04.689973792 +0200
+++ /var/tmp/diff_new_pack.lJBst5/_new 2026-09-08 17:08:04.691973876 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-certbot-dns-cloudflare
-Version: 5.7.0
+Version: 5.8.0
Release: 0
Summary: Cloudflare Authenticator plugin for Certbot
License: Apache-2.0
++++++ certbot_dns_cloudflare-5.7.0.tar.gz ->
certbot_dns_cloudflare-5.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/certbot_dns_cloudflare-5.7.0/PKG-INFO
new/certbot_dns_cloudflare-5.8.0/PKG-INFO
--- old/certbot_dns_cloudflare-5.7.0/PKG-INFO 2026-07-07 20:28:32.851318600
+0200
+++ new/certbot_dns_cloudflare-5.8.0/PKG-INFO 2026-09-01 19:52:25.677600400
+0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: certbot-dns-cloudflare
-Version: 5.7.0
+Version: 5.8.0
Summary: Cloudflare DNS Authenticator plugin for Certbot
Author: Certbot Project
License-Expression: Apache-2.0
@@ -26,8 +26,8 @@
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Requires-Dist: cloudflare>=4.0
-Requires-Dist: acme>=5.7.0
-Requires-Dist: certbot>=5.7.0
+Requires-Dist: acme>=5.8.0
+Requires-Dist: certbot>=5.8.0
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_cloudflare-5.7.0/setup.py
new/certbot_dns_cloudflare-5.8.0/setup.py
--- old/certbot_dns_cloudflare-5.7.0/setup.py 2026-07-07 20:28:27.000000000
+0200
+++ new/certbot_dns_cloudflare-5.8.0/setup.py 2026-09-01 19:52:19.717894600
+0200
@@ -2,7 +2,7 @@
from setuptools import setup
-version = '5.7.0'
+version = '5.8.0'
install_requires = [
'cloudflare>=4.0',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare/_internal/dns_cloudflare.py
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare/_internal/dns_cloudflare.py
---
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare/_internal/dns_cloudflare.py
2026-07-07 20:28:26.000000000 +0200
+++
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare/_internal/dns_cloudflare.py
2026-09-01 19:52:18.807868200 +0200
@@ -25,6 +25,10 @@
ACCOUNT_URL = 'https://dash.cloudflare.com/?to=/:account/profile/api-tokens'
+# Cloudflare API error codes (https://developers.cloudflare.com/api/)
+ERR_RECORD_EXISTS = 81057 # "Record already exists."
+ERR_IDENTICAL_RECORD_EXISTS = 81058 # "A record with identical settings
already exists."
+
class Authenticator(dns_common.DNSAuthenticator):
"""DNS Authenticator for Cloudflare
@@ -120,6 +124,10 @@
"""
Add a TXT record using the supplied information.
+ If a TXT record with the same name and content already exists (e.g.
from a
+ previous failed attempt or a reused authorization), the existing
record is
+ left in place and this method returns successfully.
+
:param str domain: The domain to use to look up the Cloudflare zone.
:param str record_name: The record name (typically beginning with
'_acme-challenge.').
:param str record_content: The record content (typically the challenge
validation).
@@ -141,6 +149,24 @@
self.cf.dns.records.create(zone_id=zone_id, **data)
except cloudflare.APIStatusError as e:
code = _cf_error_code(e)
+
+ # Errors 81057 ("Record already exists") and 81058 ("A record with
+ # identical settings already exists") mean an identical TXT record
+ # (same name and content) is already present. This can happen when:
+ # - a previous certbot run terminated uncleanly after creating the
+ # record but before cleanup, and the ACME server replays the same
+ # pending authorization (leftover record, same validation token);
+ # - the same challenge record is requested twice in one run, e.g.
+ # for an apex + wildcard certificate where both validations map
+ # to the same TXT name and content;
+ # - a concurrent certbot invocation created the record first.
+ # In all cases the desired record exists, so treat it as success.
+ # Matches the codes tolerated by lexicon's cloudflare provider.
+ if code in (ERR_RECORD_EXISTS, ERR_IDENTICAL_RECORD_EXISTS):
+ logger.debug('TXT record already exists (error %s); '
+ 'treating as success.', code)
+ return
+
hint = None
if code == 1009:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare/_internal/tests/dns_cloudflare_test.py
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare/_internal/tests/dns_cloudflare_test.py
---
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare/_internal/tests/dns_cloudflare_test.py
2026-07-07 20:28:26.000000000 +0200
+++
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare/_internal/tests/dns_cloudflare_test.py
2026-09-01 19:52:18.808189600 +0200
@@ -161,6 +161,7 @@
def test_add_txt_record(self):
self.cf.zones.list.return_value = [_mock_zone(self.zone_id)]
+ self.cf.dns.records.list.return_value = []
self.cloudflare_client.add_txt_record(DOMAIN, self.record_name,
self.record_content,
self.record_ttl)
@@ -169,8 +170,28 @@
zone_id=self.zone_id, type='TXT', name=self.record_name,
content=self.record_content, ttl=self.record_ttl)
+ def test_add_txt_record_already_exists(self):
+ # An identical record already existing (leftover from an uncleanly
+ # terminated run, apex + wildcard mapping to the same TXT name and
+ # content, or a concurrent invocation that created it first) surfaces
+ # as Cloudflare errors 81057/81058 on create. Both must be treated as
+ # success, matching the codes tolerated by lexicon's cloudflare
+ # provider.
+ from certbot_dns_cloudflare._internal.dns_cloudflare import
ERR_IDENTICAL_RECORD_EXISTS
+ from certbot_dns_cloudflare._internal.dns_cloudflare import
ERR_RECORD_EXISTS
+
+ for error_code in (ERR_RECORD_EXISTS, ERR_IDENTICAL_RECORD_EXISTS):
+ self.cf.zones.list.return_value = [_mock_zone(self.zone_id)]
+ self.cf.dns.records.list.return_value = []
+ self.cf.dns.records.create.side_effect =
_make_api_error(error_code)
+
+ # Should not raise — treat duplicate as success
+ self.cloudflare_client.add_txt_record(DOMAIN, self.record_name,
self.record_content,
+ self.record_ttl)
+
def test_add_txt_record_error(self):
self.cf.zones.list.return_value = [_mock_zone(self.zone_id)]
+ self.cf.dns.records.list.return_value = []
self.cf.dns.records.create.side_effect = _make_api_error(1009)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare.egg-info/PKG-INFO
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare.egg-info/PKG-INFO
---
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare.egg-info/PKG-INFO
2026-07-07 20:28:32.000000000 +0200
+++
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare.egg-info/PKG-INFO
2026-09-01 19:52:25.668827800 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: certbot-dns-cloudflare
-Version: 5.7.0
+Version: 5.8.0
Summary: Cloudflare DNS Authenticator plugin for Certbot
Author: Certbot Project
License-Expression: Apache-2.0
@@ -26,8 +26,8 @@
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Requires-Dist: cloudflare>=4.0
-Requires-Dist: acme>=5.7.0
-Requires-Dist: certbot>=5.7.0
+Requires-Dist: acme>=5.8.0
+Requires-Dist: certbot>=5.8.0
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_cloudflare-5.7.0/src/certbot_dns_cloudflare.egg-info/requires.txt
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare.egg-info/requires.txt
---
old/certbot_dns_cloudflare-5.7.0/src/certbot_dns_cloudflare.egg-info/requires.txt
2026-07-07 20:28:32.000000000 +0200
+++
new/certbot_dns_cloudflare-5.8.0/src/certbot_dns_cloudflare.egg-info/requires.txt
2026-09-01 19:52:25.669391000 +0200
@@ -1,6 +1,6 @@
cloudflare>=4.0
-acme>=5.7.0
-certbot>=5.7.0
+acme>=5.8.0
+certbot>=5.8.0
[docs]
Sphinx>=1.0