PhoenixDKIM

A security-focused DKIM signing and verification milter.


Removed Features

PhoenixDKIM 3.0 narrows the scope of the upstream trusteddomainproject/OpenDKIM tree to its DKIM core, retiring subsystems and build paths whose external dependencies are no longer maintained, or whose use cases have been overtaken by better-fitting tools elsewhere in the modern mail stack.

The original code remains available in the upstream repository for anyone who needs it. This document records each removal with the reasoning behind the call, so that future contributors can understand the shape of the project as it stands today. The scope decisions originate in SCOPE.md; this is the user-facing version.


Crypto

GnuTLS

A complete second crypto backend, selectable in the autotools build via --with-gnutls. Every signing, verifying, and hashing operation in libopendkim had a parallel GnuTLS implementation kept in lockstep with the OpenSSL path.

Reasoning:

See the crypto policy guide for the interaction with hardened crypto policies on RHEL-family distros.

RSA-SHA1 signing

rsa-sha1 has been removed from the signing-algorithm table, and an RSA-SHA1 signature is never treated as valid on verification: per RFC 8301 it can never be reported dkim=pass and is instead reported dkim=neutral — a permanently-failed signature, treated as unsigned. The On-WeakAlgorithm setting selects only what the milter tells the MTA to do with such a message, not whether the signature is trusted.

Reasoning:


Database / data-set backends

BerkeleyDB (bdb: / libdb)

The binary key-table backend (bdb: URI prefix in KeyTable / SigningTable etc.).

Reasoning:

QUERY_CACHE (internal DNS-result cache)

A libopendkim-internal cache layer in front of dkim-keys.c's TXT-record lookups. Signed key data was stored in a local BerkeleyDB hash file so that repeated verifications wouldn't re-query DNS.

Reasoning:

The public APIs dkim_flush_cache and dkim_getcachestats, and the DKIM_LIBFLAGS_CACHE flag, are removed from dkim.h alongside the feature.

OpenDBX (dsn: SQL backend)

A SQL abstraction layer fronting MySQL/MariaDB/PostgreSQL/SQLite through a single dsn: URI scheme.

Reasoning:

OpenLDAP (ldap: / ldaps: / ldapi:)

LDAP directory lookup for key tables and signing tables, including the LDAPSoftStart and LDAPDisableCache configuration options.

Reasoning:


DKIM-adjacent subsystems

VBR (Vouch By Reference)

RFC 5518. Allowed a sending domain to assert that a third-party "voucher" endorses its mail. Implemented as the libvbr/ library plus daemon wiring.

Reasoning:

ATPS (Authorized Third-Party Signatures)

RFC 6541 (Experimental). A mechanism for a domain to delegate signing authority to a named third party.

Reasoning:

RBL (Realtime Blacklist lookups)

librbl/ and the associated daemon glue, which consulted DNSBLs as part of message disposition.

Reasoning:

Reputation subsystems (reputation/, reprrd/)

Two collaborative-reputation systems: one rrdtool-backed, one feeding an aggregation backend with per-sender data.

Reasoning:

Stats subsystem

Per-message statistics emitted via SQL to an aggregation server.

Reasoning:


FFR (Future Feature Release) flags

The upstream tree used _FFR_* preprocessor guards to ship code for features that were under development or that the maintainers wanted available as opt-in build-time experiments. As this fork has narrowed its scope to the DKIM core, those experiments either tied into subsystems that are no longer present (SQL, LDAP, stats, ATPS, VBR, diffheaders), or addressed concerns that belong in another layer (rate limiting), or were small parser/identity tweaks that did not graduate to defaults. In each case the guarded code has been removed along with the surrounding subsystem rather than kept as conditional code without a way to turn it on.

Removed FFRs include _FFR_RESIGN, _FFR_IDENTITY_HEADER, _FFR_SENDER_MACRO, _FFR_ATPS, _FFR_VBR, _FFR_STATS, _FFR_STATSEXT, _FFR_DB_HANDLE_POOLS, _FFR_LDAP_CACHING, _FFR_POSTGRES_RECONNECT_HACK, _FFR_RATE_LIMIT, _FFR_SOCKETDB, _FFR_DEFAULT_SENDER, _FFR_DIFFHEADERS.

diffheaders / tre

A header-diffing diagnostic helper using the tre regex library to show which header bytes a signer touched.

Reasoning:

Other FFR flags

The remaining FFR removals are recorded in their individual removal commits — git log --grep=_FFR_ lists them.


Build system

Autotools (autoconf + automake + libtool)

Reasoning:

libar/ (async DNS resolver)

The internal asynchronous DNS resolver.

Reasoning:


Configuration keywords no longer accepted

Because the subsystems above are gone, the configuration keywords that drove them are no longer recognised. They were previously enumerated in the configuration man page's deprecated-options section; they are recorded here instead, since PhoenixDKIM is a standalone product rather than a drop-in OpenDKIM replacement. If any of these were carried over from an opendkim.conf, remove them — their presence may stop the filter from starting.

ADSP and legacy policy

AddAllSignatureResults, ADSPAction, ADSPNoSuchDomain, BogusPolicy, DisableADSP, LocalADSP, NoDiscardableMailTo, On-PolicyError, SendADSPReports, UnprotectedPolicy — ADSP (RFC 5617) and its associated policy handling.

Removed subsystems


What this fork keeps

For balance, the components that remain: