Commit 1753ec4
committed
Release 6.2.14 - 21 defect fixes, and settings you can actually find
Version bump to 6.2.14 (build 16) plus the README release notes. This release
fixes the two issues the community reported, 21 defects found by an adversarial
audit of the server, and the reason one of those issues was filed at all: a
setting nobody could find. No database change (schema version 6005).
Community reports:
- #19 Backup would not start. The Control Panel called Save() on the backup
settings, which that COM interface does not define, so both "Save settings"
and "Start backup now" failed at runtime. The settings were already being
persisted by the property assignments; only the start was blocked. Every
other late-bound COM call in the Control Panel was audited at the same time.
- #16 "Setting for days to keep logs" already existed but was filed on the
"API & monitoring" page, so it could not be found. See the discoverability
work below.
Mail loss, corruption and crashes:
- A failed message-file copy dereferenced a null handle in local delivery,
forwarding, Sieve redirect and mirroring, killing the delivery task and
leaving the message locked in the queue on every subsequent restart.
- IMAP APPEND answered OK [APPENDUID] even when the message was never written
to disk, silently losing Sent Items copies, drafts and migration uploads.
- Every string SQL parameter on MS SQL and SQL CE was bound from a temporary
that had already been destroyed - undefined behaviour on the default
backend, on every query carrying a string.
- A failed BeginTransaction leaked its pooled connection; once the pool was
exhausted every SMTP, IMAP and POP3 operation blocked until restart.
- A failed IMAP folder insert was reported as success, caching a folder with
id 0 so messages filed into it had no database row.
- IMAP CLOSE expunged without notifying other sessions, desyncing their
sequence numbers.
- A POP3 session refused the mailbox lock still released it on disconnect,
handing away the owning session's lock.
- POP3 RETR/TOP ignored the result of opening the message file, dropping the
connection with no response and writing a minidump.
- The message cache size accounting had its decrease branches inverted, so the
size cap never applied as intended; Clear() now resets the accumulator too.
Security:
- DKIM test mode (t=y) converted a failed signature into Pass, which satisfied
DMARC alignment - forged mail from a domain that left the flag in its key
record was accepted. A failure in test mode is now Neutral (RFC 6376 3.6.1).
- IMAP AUTHENTICATE PLAIN passwords and XOAUTH2/OAUTHBEARER tokens were
written verbatim to the IMAP log; POP3 and SMTP already masked them.
- Only the first TXT record at a DKIM selector was inspected, so a sender
rotating its key had roughly half its mail fail verification.
- Recipient batches after the first reused mutated delivery state, losing
MTA-STS enforcement and MX failover and potentially carrying a STARTTLS
downgrade between hosts.
- The REST API bounds total request-read time and logs a rejected credential.
- ES256 OAuth2 tokens are rejected with a clear message instead of a phantom
signature failure: raw JWS R||S signatures were fed to a DER verifier, so
the branch could never succeed. RS256/HS256 are unaffected.
Protocol correctness:
- IMAP RENAME compared against a hard-coded "." so a non-default hierarchy
delimiter let a folder become its own parent and vanish from LIST.
- SELECT/EXAMINE report a sequence number in [UNSEEN], not a UID (RFC 3501).
- Expunged and moved messages are removed from the session's \Recent set.
- BODY.PEEK no longer cancels a \Seen update requested by another item in the
same FETCH.
- POP3 answers -ERR, not the invalid +ERR, when the mailbox cannot be opened.
- Reverse-DNS lookups for the Received header run on a dedicated thread pool,
so slow lookups cannot delay message acknowledgements (completes 6.2.13).
- Domain size used the wrong column on MS SQL, SQL CE and PostgreSQL; the
account cache is cleared on server stop; TCP_NODELAY is set on every
connection; an SNI failure reports the SNI error rather than a stale code.
Finding settings:
- Ctrl+K now searches all 227 settings by label and INI key, not just page
names, and opens the page that owns the match. The index is generated from
the page definitions by build/generate-settings-index.ps1 and a test fails
if it falls behind, so a setting cannot become unsearchable.
- Settings moved to where they are used: log level, line length, per-service
files and JSON logging to Logging; SpamAssassin/ClamAV timeouts to their own
scanner tabs; indexer cadence to Performance > Indexing; retry cadence,
queue jitter and the per-destination outbound throttle to Delivery of
e-mail, where the retry interval they modify is shown.
- "Advanced hardening" is now "Advanced INI settings" under Maintenance: only
four of its cards were security-related, and its warning subtitle discouraged
admins from opening the page the rest of the settings were hiding on.
- Signposts added for settings that correctly stay put: ManageSieve and OAuth2
from Protocols, MTA-STS publishing from the MTA-STS card, SRS/BATV from
Delivery, and the message-store consistency scan from Diagnostics.
- Multiple smart hosts (host1|host2, with failover) are documented at last, in
the manual and on the relayer field itself.
Deferred to 6.2.15: the remaining audit findings that need new navigation pages
(OAuth2 and administrative access under Security, client autoconfig and DNS
resolver under Network, a 2FA entry point), the IMAP sequence-set "*" rewrite,
and three genuine gaps - no temp-folder cleanup, no backup scheduling in the
GUI, and the consistency-check result never being surfaced.
Verified at 6.2.14:
- Server, tools and Control Panel build clean (server /WX, tools -warnaserror).
- Full regression suite against the rebuilt service: 1026 of 1026 passing.
- ControlPanel.Tests 24 of 24 passing, including the search-index drift test
(verified to fail when the index is stale).
- Binary and COM report 6.2.14 / 6.2.14-B16.1 parent 9a71b35 commit 1753ec4
52 files changed
Lines changed: 1429 additions & 143 deletions
File tree
- build
- hmailserver
- installation
- source
- Server
- Common
- AntiSpam/DKIM
- Application
- BO
- Cache
- Persistence
- SQL
- Util
- IMAP
- POP3
- SMTP
- Tools
- ControlPanel.Core
- ControlPanel.Tests/Services
- ControlPanel
- Services
- Views
- DBSetupQuick
- DBSetup
- DBUpdater
- DataDirectorySynchronizer
- ImportTool
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
86 | 144 | | |
87 | 145 | | |
88 | 146 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
| 6 | + | |
| 7 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
427 | 427 | | |
428 | 428 | | |
429 | 429 | | |
430 | | - | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
431 | 436 | | |
432 | 437 | | |
433 | 438 | | |
| |||
452 | 457 | | |
453 | 458 | | |
454 | 459 | | |
455 | | - | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
456 | 466 | | |
457 | 467 | | |
458 | 468 | | |
| |||
717 | 727 | | |
718 | 728 | | |
719 | 729 | | |
720 | | - | |
721 | | - | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
722 | 735 | | |
723 | | - | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
724 | 753 | | |
725 | | - | |
| 754 | + | |
726 | 755 | | |
727 | 756 | | |
728 | 757 | | |
| |||
Lines changed: 23 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| 77 | + | |
77 | 78 | | |
78 | 79 | | |
79 | 80 | | |
| |||
154 | 155 | | |
155 | 156 | | |
156 | 157 | | |
157 | | - | |
| 158 | + | |
158 | 159 | | |
159 | 160 | | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
160 | 169 | | |
161 | 170 | | |
162 | 171 | | |
| |||
241 | 250 | | |
242 | 251 | | |
243 | 252 | | |
| 253 | + | |
| 254 | + | |
244 | 255 | | |
245 | 256 | | |
246 | 257 | | |
| |||
666 | 677 | | |
667 | 678 | | |
668 | 679 | | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
669 | 691 | | |
670 | 692 | | |
671 | 693 | | |
| |||
0 commit comments