Repository navigation
A patch release of the 2.4 stable line. Upgrade promptly if clients send mail through the Submission login: in 2.4.3, after AUTH, every command got the previous command's reply, so no conforming client could send (#2271, see Fixed). If you list ihave in sieve_extensions, see Security. It also completes the JMAP submission-side objects (EmailSubmission, Identity, VacationResponse, SieveScript) and brings Sieve include parity.
Before you upgrade
These change what an existing configuration or rollout does. Read them first.
general.xclient.trusted_netsdefaults to empty (#2286). It used to be127.0.0.1/32, 10.0.0.0/8. A ConfigMap rendered by the chart writes the list your values give; if your values never set it, the new default applies and no proxy's forwarded client address is trusted. Set the proxies' networks if you use XCLIENT. A warning at load names every listener withxclient_protocol: truewhile the list is empty. XCLIENT is now advertised in EHLO/LHLO only to a peer inside the list.- Global before/after Sieve scripts are checked at load (#2300).
sieve_global_before/sieve_global_afterandimapsieve_global_before/imapsieve_global_afterare now held tosieve_extensionsplus the newsieve_global_extensions. Before, they were not checked at all. One that uses an extension in neither list is logged (global script uses a forbidden extension, skipping) and left out. Add what such scripts need tosieve_global_extensions. ihaveanswers from the whitelist (#2297). A user's script that relied onrequire "ihave"to use an extensionsieve_extensionsdoes not list now has that block skipped, or is refused at upload if it uses the extension outside anihaveblock.- Config schema 10 → 17. Upgrade the chart and the image together; a binary newer than its ConfigMap names the defaulted settings in a warning at start.
- Pull the new image onto the backend nodes before
helm upgrade, and keep room for one more backend pod, as for 2.4.3. See DEPLOYMENT, "Upgrading the backend StatefulSet".
Security
require "ihave"bypassed thesieve_extensionswhitelist (#2297). Withihaveinsieve_extensions, a user's script could use every extension of the build,vnd.yarilo.pipeandvnd.yarilo.executeincluded (their programs still limited to the configured directories), at delivery, in imapsieve and through ManageSieve and JMAP uploads. Only installations that had addedihavetosieve_extensionswere exposed; the default list does not include it. Fixed:ihaveanswers from the whitelist, a block under a refused extension never runs, andrequire "ihave"opens nothing else.
New
- JMAP submission objects (#713).
EmailSubmission(/get,/set,/query,/changes) andIdentityover the Submission relay (#2273); records kept forjmap_submission_ttl_seconds(default 86400). The identities are the login address and the new userdb fieldidentity_aliases(space- or comma-separated, one more column ofuser_query); without it a JMAP client has only the login address to send as.VacationResponseas the managed Sieve script, so ManageSieve and JMAP see one vacation (#2285).SieveScript(RFC 9661) over the ManageSieve store, withSieveScript/validate(#2269). Creation ids resolve across the calls of a request, andcreatedIdsis returned (#2275). - Submission relay as a master (#2272).
submission_relay_master_userlogs in to the relay as a master with the user as authzid, so the relay judges the real sender;submission_relay_userexpands%u; the chart takes the relay password from a Secret (password_secret_ref).submission_relay_ssl_canames a PEM file the relay's certificate is verified against (empty: the system roots). - Sieve.
include :globalreadssieve_global, and the chart mountssieve.sieve_global_scriptsthere (#2283).sieve_global_extensionsnames extensions only the administrator's scripts may use (#2290). LMTP takes ORCPT without DSN and lmtp-login passes it on, forsieve_vacation_use_original_recipient(#2280). - ManageSieve quotas (#2268, #2269).
sieve_max_num_scripts,sieve_max_storage, HAVESPACE and the RFC 5804 quota response codes.
Fixed
- Submission login (#2271). After AUTH, the backend's EHLO reply reached the client as the reply to its next command, and every later command got the previous one's reply. The preamble now carries the HELO domain only, drops CR/LF/TAB from every field, and the login refuses a backend reply that does not end in 250.
- Sieve include (#2282).
includedid not run at delivery or in imapsieve; it now runs the user's own scripts in both. - Sieve vacation (#2277). Replies only to mail addressed to the user, honours
:addresses,:mime, the default subject,In-Reply-To/References, and the period bounds, and skips list, auto-submitted and system mail. Nine new keys, all undersieve::sieve_vacation_min_period/_max_period/_default_period: seconds, defaults 86400 / 5184000 / 604800, 0 = no bound.sieve_vacation_default_subject/_default_subject_template: default"". A reply without:subjectgets "Auto: ", or the template with%{subject}; a message with no subject gets the default subject ("Automated reply" when empty).sieve_vacation_check_recipient(defaulttrue): reply only to mail naming the user, or:addresses, in To/Cc/Bcc/Resent-*.sieve_vacation_use_original_recipient(defaultfalse): the LMTP ORCPT counts as the user's address. Only a relay that sends ORCPT without DSN gives one; Postfix does not.sieve_vacation_send_from_recipient(defaultfalse): the reply's envelope sender is the recipient instead of<>.sieve_vacation_to_header_ignore_envelope(defaultfalse): the reply's To is the first address in Sender/Resent-From/From, not the one that matches the envelope sender.
- Helm: imapsieve scripts in the co-located backend (#2292).
sieve.imapsieve_scriptsreached no container in the default topology; they are now mounted in the imap container of the backend StatefulSet. - Director flush hook (#2293). A hook descendant that escaped the process group could be reported as a plain timeout; the escape is now read on the monotonic clock.
- JMAP (#2270).
existingIdis read from the call's starting index.