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

Reply via email to