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