• exec/letsyncrypt.js exec/load/acmev2.js

    From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Tuesday, September 15, 2026 23:42:50
    https://gitlab.synchro.net/main/sbbs/-/commit/ceb2e8178087c8c5d603073e
    Modified Files:
    exec/letsyncrypt.js exec/load/acmev2.js
    Log Message:
    letsyncrypt: name the failing domain, stop destroying the certificate

    A failed authorization was silently discarded. authorize_order() caught everything poll_authorization() threw but re-raised only the timeout
    string, so a domain that failed http-01 validation simply fell out of
    the loop. The run carried on to finalize_order(), Let's Encrypt
    answered orderNotReady, and the sysop saw

    finalize_order returned 403, not 200

    with nothing to say which of a dozen names was at fault. Collect the
    failures instead, log one line each, and throw naming every identifier
    that failed. poll_authorization() now names the identifier and quotes
    the server's own explanation through a new challenge_error() helper:

    Authorization failed for example.com (http-01): 192.0.2.1: Fetching
    http://example.com/.well-known/acme-challenge/...: Timeout during
    connect (likely firewall problem)

    A timeout still ends the run rather than waiting out every remaining identifier.

    The keyset is now built in ssl.cert.new and renamed into place. It was
    being created directly over ssl.cert, which had to be deleted first, so anything that went wrong in between (cryptlib declining to write the
    keyset, a full disk) destroyed the working certificate and the only
    copy of its private key, leaving TLS to fail at the next recycle with
    nothing to roll back to. rename() does not replace an existing file on Windows, so the old certificate is moved aside rather than deleted, and
    put back if the second rename fails.

    at_least_a_third() no longer lets an unreadable ssl.cert escape as an
    uncaught exception. It now means "renew", which is the one thing that
    can repair the situation; a truncated keyset used to wedge every later
    run of the script.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)