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
MakefileandTARGETS, remove references tonow.oandalloc.a - smtp-tls: does not apply, please wait for a new upstream patch
- smtpd-spp:
conflict in
Makefile, remove references tonow.oandalloc.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 theqmailruser. 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
.mdsuffix. (#36)
Reduce marginal cost of development
- Define
CODEOWNERSwith 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
NULLinstead of casting 0 to a pointer type. (#152, #161) auto-str: make most output human-readable. (#144)- Add
ids.a, a library containingauto_user*.oandauto_group*.o. (#182) Makefile: remove stale references toauto-uid. (#219)TARGETS: remove unneededauto_uid*.oandauto_gid*.oentries. (#154)Makefile: callhead(but nottail, for portability) in the POSIX style. (#105, #205)- Use
ssize_tinsubstdioto match return types ofread()andwrite(). (#84) - Replace
error_*variables with#defines to theirerrnoequivalents. (#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.hand 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
registerstorage class declaration. (#202) - Add
noreturnattribute to a couple of functions. (#211) - Return
intfrom allmain()functions. (#145) - Add back accidentally removed typecast in
gen_allocdefs.h. (#137) - Clean up
substdiointerface declarations. (#271) - TravisCI: remove. (#207, #216)
- CirrusCI: remove. (#253)
- GitHub: extend build matrix (
gccwith 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-onlyargument toinstpackage,instchown, andinstcheck. (#61, #248) instchown: operate on file descriptors to run more efficiently (also resolving spurious CodeQL "TOCTOU" warnings). (#266, #263)- De-symlink
.gitignoreto mollify Git 2.32.0. (#217, #218) - Symlink autobuild configs into
autobuilds/. (#148) - Add
.gitattributesto 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)