Fix empty finalize URL when resuming a saved DNS-manual order

The decision to resume a pending order is keyed on Le_Vlist, but the
decision to keep Le_OrderFinalize/Le_LinkOrder was keyed on the webroot
being exactly "dns". Any other webroot with a saved Le_Vlist skipped
newOrder and then finalized against an empty URL.

Key both on Le_Vlist, and always clear Le_LinkCert, which is per-run
state that is never read back from the saved domain conf.

Fixes #7177
This commit is contained in:
neil 2026-08-05 19:53:52 +08:00
parent b4925052dd
commit 5e6c263211

11
acme.sh
View file

@ -4949,11 +4949,18 @@ issue() {
if [ -z "$_ACME_IS_RENEW" ]; then
_initpath "$_main_domain" "$_key_length"
mkdir -p "$DOMAIN_PATH"
elif ! _hasfield "$_web_roots" "$W_DNS"; then
elif [ -z "$Le_Vlist" ]; then
# Whether the saved order is resumed is decided by Le_Vlist below, so key
# this on Le_Vlist too. With no pending order to resume a new one is
# created, and a stale order link from the previous issuance must not be
# reused. https://github.com/acmesh-official/acme.sh/issues/3635
Le_OrderFinalize=""
Le_LinkOrder=""
Le_LinkCert=""
fi
# Per-run state only: it is set after finalize and never read back from the
# saved domain conf. Carrying it over would make a run that gives up while
# the order is still 'processing' download the previous certificate again.
Le_LinkCert=""
if _hasfield "$_web_roots" "$W_DNS" && [ -z "$FORCE_DNS_MANUAL" ]; then
_err "$_DNS_MANUAL_ERROR"