v1.21.2 - Security Fixes, Date Groups & Attachment Rename #1677
rathlinus
announced in
Announcements
Replies: 1 comment 3 replies
|
I suddenly get "You can't change the security settings for this mail server here. Your server may not allow it." when trying to change my password. This worked just yesterday. I run Stalwart 1.1.0. Could this be related to the changes in this release? |
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
1.21.2 (2026-11-13)
1.21.2 has the fixes from a security review of sign-in, multi-account actions, plugin installs, themes and the deploy files. Admins should read Breaking Changes before updating: a shared store needs a password, the repository's compose file publishes port 3000 on 127.0.0.1 only, and single sign-on with several sign-in servers checks each provider's issuer. The release can also group the message list under date headers such as Today, Yesterday and Last week, lets you rename an attachment before you send it or save it, and gives tags any colour. Shared accounts can be put in any order in the sidebar, the desktop app can keep more than 2 GB of attachments offline, and repeating tasks show on every day they are due in the calendar. Admins can pick the tags new users start with, name mail accounts that get into the admin dashboard like a Stalwart admin, and keep the account directory to the organisation's own domains.
Thank you for your donations:
One-time
Monthly
Breaking Changes
REDIS_URLorREDIS_URL_FILE) without a password and doesn't start serving until it has one: every page answers 503 with the reason and the setting to change. Set a password on the store, orSHARED_STORE_ALLOW_NO_PASSWORD=trueif only your replicas can reach it (GHSA-wv93-3w8m-44vc)VALKEY_PASSWORDand the webmail withoutSESSION_SECRET, with a message in the pod log. Only the Bulwark pods may connect to the store (a NetworkPolicy), and no pod mounts a service account token (GHSA-wv93-3w8m-44vc)docker-compose.ymlpublishes port 3000 on 127.0.0.1 only, for a reverse proxy on the same machine; point nginx atproxy_pass http://127.0.0.1:3000. Write"3000:3000"to reach it from other machinesoauth.issuerUrlon the server'sjmapServersentry, orOAUTH_ISSUER_URL(admin settingoauthIssuerUrl) for the configured server. Until then SSO through that server stops and the login page says the provider isn't set up correctly. An install with one sign-in server keeps working and logs once which issuer it found"adminAccess": trueinJMAP_SERVERS. Until then, its admins sign in with the admin password (GHSA-w9cm-24r9-3mq6)Security
allowCustomJmapEndpoint), or removing a server from the server list, signs its users out at their next renewal (GHSA-xfhq-ghjr-5mvf)SETTINGS_DATA_DIR, by defaultdata/settings), where it is the file<sha256 of "name:server URL">.enc(GHSA-4w85-7mp8-f37h)$importedand never shows a brand logo, a booking card or a verified invitation (GHSA-prh8-7whf-3x6r)links:checkpermission, shown to the user and marked as needing care.onToastShowandonToastDismissneedui:notifications. External Link Warning 2.0.0 keeps working when an admin installed it; installed by a user, it stops checking links until a release that declareslinks:check. A plugin's remote avatars load only from hosts it declared, and only when it may reach the network (GHSA-8w24-2h45-hr5f)image()andsrc()are removed, an unquoted address is taken out, and a sheet with an unterminated string, comment or block, or a print style with an escaped<, is refused whole. Installing a skin says what it does first (GHSA-8w24-2h45-hr5f)@sentry/clifrom the lockfile and run its step in a build stage of its own, and use base images pinned by digest. Every workflow action is pinned to a commit, release jobs start from a read-only token and build without a restored cache, Lite source maps upload from a job pull requests never start, and CI checks thekinddownload against its published checksumChanges
Content-Type: application/json) and answer 415 otherwise. The app's own pages already send JSON; a script of your own that posts to these routes needs the headerSESSION_SECRET, a sign-in to a typed server keeps no refresh token and lasts until its access token expiresnpm ciasSENTRYCLI_SKIP_DOWNLOAD=1 npm ci: the source map tool has no binary there. The Dockerfiles and setup.sh set it alreadyFeatures
defaults.emailKeywordsin policy.json. An empty list gives new users no tags. Without a default, new users still get the seven colour tags, and accounts that already have tags keep them ([Feature]: Default tags in the admin policy #1612, thanks @DerFolder)search.clear()ends a search the plugin started, and top-bar actions can show as pressed toggles (feat(plugins): let a plugin end its own search withsearch.clear()and draw top-bar actions as pressed toggles #1619, thanks @HOLOEYE-JZ)tasks.listtakescalendarIdsto read only the calendars a plugin names instead of every calendar of every account (feat(plugins): let tasks.list read only the calendars a plugin names #1625, thanks @HOLOEYE-JZ)Fixes
setup.shwrites.env.localso the app reads every value as typed: a client secret with$or#, a company name with#and a theme colour no longer come out cut or changed. A second run reads the file it wrote instead of stopping right after the start, keeps the branding values, and leaves nodocker-compose.yml.bakbehind. A value with a single quote, a line break or a trailing backslash is refused with a messageREDIS_URL; the store gets its password from a file instead of its command lineThis discussion was created from the release v1.21.2 - Security Fixes, Date Groups & Attachment Rename.
All reactions