6 May 2024
What's notqmail?
It's software for running an email server. For more information, see About, Install, and Help.
What's not new?
As usual, this release is intended as a safe, easy update path from a previous notqmail, netqmail, or qmail. Your local patches should mostly continue to apply.
To the best of our knowledge, qmail, netqmail, and therefore notqmail have never been vulnerable to "SMTP Smuggling"
(#251).
Your instance of notqmail may nonetheless be vulnerable if you've applied any patches or chained any programs (such as
fixcrio
)
that cause line endings to be changed in transit.
Other forks of qmail may be vulnerable if they have have modified its handling of line endings in qmail-smtpd
and/or qmail-remote
.
What's new?
Regressions fixed
Patch adjustments
See also patches.
- big-todo:
conflict in
qmail-qstat.sh
, skip that section; conflict inhier.c
, add the two lines insidehier_queue()
- dns-oversize: merged, no longer needed (#201)
- qmail-queue-custom-error: merged, no longer needed (#195)
- smtp-auth:
conflicts in
Makefile
andTARGETS
, remove references tonow.o
andalloc.a
- smtp-tls: does not apply, please wait for a new upstream patch
- smtpd-spp:
conflict in
Makefile
, remove references tonow.o
andalloc.a
All other changes, organized by project goal:
Preserve qmail's hard-earned security properties
qmail-local
: close race window when creating file intmp/
. (#119)
Add interfaces to make extensions possible
qmail-queue
: extend interface so a custom rejection message can be communicated to the caller. Based on Flavio Curti'sqmail-queue-custom-error-v2.netqmail-1.05.patch
. (#195)
Provide sensible defaults
qmail-remote
: stop rewritingRCPT TO:
domains when they are aCNAME
(RFC 5321 5.1). (#121)qmail-remote
: handle DNS packets up to max EDNS response size. Based on Christopher K. Davis'sqmail-103.patch
. (#201)qmail-remote
: honor all group memberships of theqmailr
user. This lets admins more precisely define read permissions on TLS or DKIM key material. (#153)qmail-smtpd
: allow[]
to appear inReceived:
lines. (#170)- docs: append
.md
suffix. (#36)
Reduce marginal cost of development
- Define
CODEOWNERS
with our default reviewers. (#192) - Remove
maildirwatch
. (#93) - Remove
qsmhook
. (#87) - Remove
elq
,pinq
, andqail
. (#99) - Ensure local headers are self-contained by including them before system headers. (#183)
- Say
NULL
instead of casting 0 to a pointer type. (#152, #161) auto-str
: make most output human-readable. (#144)- Add
ids.a
, a library containingauto_user*.o
andauto_group*.o
. (#182) Makefile
: remove stale references toauto-uid
. (#219)TARGETS
: remove unneededauto_uid*.o
andauto_gid*.o
entries. (#154)Makefile
: callhead
(but nottail
, for portability) in the POSIX style. (#105, #205)- Use
ssize_t
insubstdio
to match return types ofread()
andwrite()
. (#84) - Replace
error_*
variables with#define
s to theirerrno
equivalents. (#171) qmail-qstat
: remove unneeded dependencies, simplify logic, add compatibility with big-todo queues. (#234)qmail-qmtpd
,qmail-qmqpd
: validate that netstring length is a number. (#241)qmail-remote
: avoid sending CRCRLF if input contains CRLF. (#18)- Make
now()
an inline function. (#158, #169) qmail-remote
: fix warnings aboutget()
being used with wrong pointer signedness. (#162)- clean up
hier.h
and spawn functions. (#155) - Improve platform checks for
select()
. (#163) qmail-send
: useutimes()
instead ofutime()
. (#164)predate
: use better version of callingtime()
. (#150)- Add missing system headers for
close()
,chdir()
,getpid()
, other undeclared functions. (#237, #146) - Add prototypes for
scan.h
,fmt.h
. (#129, #126) - Use default
strdup()
instead of open coding it. (#130) - Remove functions that only reimplement standard C functions. (#103)
- Remove the custom allocator. (#124)
- Fix several classes of compiler warning. (#184, #185, #186, #187, #188, #200, #271, #273)
- Fix CodeQL cpp/integer-multiplication-cast-to-long. (#193)
- Add tests for
qmail-send:job_*()
andprioq_*()
functions. (#224, #179, #254) - Remove
register
storage class declaration. (#202) - Add
noreturn
attribute to a couple of functions. (#211) - Return
int
from allmain()
functions. (#145) - Add back accidentally removed typecast in
gen_allocdefs.h
. (#137) - Clean up
substdio
interface declarations. (#271) - TravisCI: remove. (#207, #216)
- CirrusCI: remove. (#253)
- GitHub: extend build matrix (
gcc
with and withoututmpx(5)
) withclang
, with and without-DDEPRECATED_FUNCTIONS_REMOVED
, with and withoutnroff/mandoc
, with and without compiler warnings turned up. (#181) - GitHub: enable CodeQL analysis. (#176, #253)
- FreeBSD: update. (#125, #216, #235, #253, #274)
- macOS: add, update. (#181, #253)
- OpenBSD: add, update. (#242), #253, #274)
- Solaris: add, fix, update. (#206, #231, #242, #253)
- Ubuntu: update. (#231, #240, #253)
- NetBSD: add, update. (#253, (#274)
- Alpine: add, including many hardware architectures. (#253)
- Fedora: add. (#269)
Make packaging easier
- Add optional
queue-only
argument toinstpackage
,instchown
, andinstcheck
. (#61, #248) instchown
: operate on file descriptors to run more efficiently (also resolving spurious CodeQL "TOCTOU" warnings). (#266, #263)- De-symlink
.gitignore
to mollify Git 2.32.0. (#217, #218) - Symlink autobuild configs into
autobuilds/
. (#148) - Add
.gitattributes
to keep unneeded files out of release tarballs. (#180)
What's going away?
Compiler warnings
Removing causes of compiler warnings advances the notqmail project goals of preserving qmail's hard-earned security properties and gradually reducing the marginal cost of developing notqmail. In this release, the list of changes addressing sources of warnings includes #162, #184, #185, #186, #187, #188, #193, #200, #271, and #273.
Meanwhile, compilers are gradually promoting more warnings to errors.
We're doing our best to stay ahead of this, constrained by the project non-goal of
breaking your patches more than necessary.
You may occasionally find it necessary to add -Wno-error=something-or-other
to conf-cc
.
If you do, please let us know.
Functions
We've marked the following functions deprecated, and intend to remove them in an upcoming release.
To find out whether you're depending on any of these, add -DDEPRECATED_FUNCTIONS_REMOVED
to conf-cc
and see whether your build breaks.
If it does, please let us know.
alloc_re()
: callrealloc()
directly instead. (#151, #159)log2()
: callqslog2()
instead. (#187)substdio_bget()
: callsubstdio_get()
instead. (#140, #199)
Programs
We believe the following programs are no longer worth the maintenance cost, and intend to remove them in an upcoming release. If you're depending on any of these, please let us know.
qmail-pop3d
: use another Maildir-supporting POP3 server such as Dovecot or Courier IMAP.qmail-qmtpd
: use another QMTP server such as mailfront. (#142)