Perform DNS-01 authorizations sequentially to avoid race conditions in some DNS providers

This commit is contained in:
Maurus Decimus
2026-05-19 19:25:17 +02:00
parent 08b02c9e91
commit 897d3c282c
2 changed files with 16 additions and 65 deletions

View File

@@ -7,65 +7,7 @@ All notable changes to this project will be documented in this file. This projec
If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If you are upgrading from v0.15.x and below, please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions.
## Added
- Added 58 new DNS provider integrations:
- Akamai Edge DNS
- Alibaba Cloud DNS
- ArvanCloud
- AutoDNS
- AWS Lightsail
- Azure DNS
- Baidu Cloud DNS
- BlueCat Address Manager
- ClouDNS
- Constellix
- cPanel
- DDNSS.de
- DNS Made Easy
- Domeneshop
- DreamHost
- DuckDNS
- Dynu
- EasyDNS
- Exoscale
- FreeMyIP
- Gandi v5
- Gcore
- GleSYS
- GoDaddy
- Hetzner DNS
- hosting.de
- Hostinger
- Huawei Cloud DNS
- Hurricane Electric
- IBM Cloud (SoftLayer)
- Infoblox NIOS
- Infomaniak
- INWX
- IONOS
- IPv64
- Joker
- Linode
- LuaDNS
- Mythic Beasts
- Name.com
- Namecheap
- NameSilo
- netcup
- Netlify
- Nifcloud
- NS1
- Oracle Cloud DNS
- Plesk
- SafeDNS
- Scaleway
- Tencent Cloud DNSPod
- TransIP
- UltraDNS
- Vercel
- Volcano Engine
- Vultr
- Websupport
- Yandex Cloud DNS
- Added 58 new DNS provider integrations (see [dns-update](https://github.com/stalwartlabs/dns-update/blob/main/CHANGELOG.md#dns-update-040) crate for details).
- DNS updater: Log DNS record types and values.
- Sieve: Allow User Sieve scripts to access `orcpt`.
- MTA: Log when messages are rejected or discarded by the spam classifier.
@@ -82,7 +24,9 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If
- Skip `v=spf1 a -all` records for apex domains.
- RFC2136 TSIG: regression related to multiplexer.
- Rout53: Chunk `TXT` records when they exceed 255 characters.
- ACME: Update `defaultCertificateId` when renewing a certificate that is currently set as default.
- ACME:
- Update `defaultCertificateId` when renewing a certificate that is currently set as default.
- Perform `DNS-01` authorizations sequentially to avoid race conditions in some DNS providers.
- Allow internal TLDs in e-mail addresses.
- Websocket: Perform case insensitive matching during upgrade.
- LDAP: Synchronize accounts when expanding mailing list recipients.

View File

@@ -104,11 +104,18 @@ impl AcmeRequestBuilder {
loop {
match order.status {
OrderStatus::Pending => {
let auth_futures = order
.authorizations
.iter()
.map(|url| self.authorize(server, url, dns_parameters.as_ref()));
try_join_all(auth_futures).await?;
if matches!(self.challenge, ChallengeType::Dns01) {
for url in &order.authorizations {
self.authorize(server, url, dns_parameters.as_ref())
.await?;
}
} else {
let auth_futures = order
.authorizations
.iter()
.map(|url| self.authorize(server, url, dns_parameters.as_ref()));
try_join_all(auth_futures).await?;
}
trc::event!(
Acme(AcmeEvent::AuthCompleted),
Url = self.directory.new_order.to_string(),