• src/build/openssl.propsdocs/v322_new.md src/sbbs3/mail_dkim.c mailsrvr

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat Jun 27 23:34:37 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8a5ea6d7fc6d3c83af3672b9
    Added Files:
    src/build/openssl.props
    Modified Files:
    docs/v322_new.md src/sbbs3/mail_dkim.c mailsrvr.vcxproj
    Log Message:
    mailsrvr: enable DKIM signing on the Win32 build (issue #215)

    The outbound DKIM signer added in 32ea273f6 (acting-27-fees) is
    OpenSSL-only (cryptlib cannot emit a raw PKCS#1 signature) and previously compiled to no-op stubs on Windows, so Win32 mail went out unsigned.

    Add src/build/openssl.props, imported by mailsrvr.vcxproj (both Win32
    configs), sourcing libcrypto from a vcpkg classic-mode install
    (vcpkg install openssl:x86-windows), defining DKIM_OPENSSL, and linking libcrypto dynamically. The sheet is self-gating: with no vcpkg OpenSSL
    present it adds nothing and mail_dkim.c falls back to stubs, mirroring how
    the *nix build gates DKIM on libcrypto. Dynamic linkage lets the mail
    server share the single libcrypto-3.dll that an OpenSSL-enabled
    mosquitto.dll will also ship, instead of duplicating crypto via static
    linking or vendoring a bundle into 3rdp.

    Load the RSA private key via an in-memory BIO (BIO_new_mem_buf + PEM_read_bio_PrivateKey) instead of handing a FILE* to
    PEM_read_PrivateKey: on Windows the OpenSSL DLL has its own C runtime, so
    a FILE* hand-off fatally aborts ("OPENSSL_Uplink: no OPENSSL_Applink").
    A memory BIO avoids the CRT boundary and is portable.

    Update docs/v322_new.md to note DKIM is supported on Windows builds too.

    Live-validated: Gmail reports dkim=pass (d=synchro.net s=sbbs) and
    dmarc=pass on DKIM alignment from vert.synchro.net (Win32).

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net