Byla uvolněna nová verze vícerozměrného vysoce výkonného POP3/IMAP4 serveru Dovecot 2.3.21, která podporuje protokoly POP3 a IMAP4rev1 s populárními rozšířeními, jako jsou SORT, THREAD a IDLE, a mechanismy autentizace a šifrování (SASL, TLS, SCRAM). Dovecot zachovává plnou kompatibilitu s klasickými mbox a Maildir, používá externí indexy pro zvýšení výkonnosti. Pro rozšíření funkčnosti mohou být použity pluginy (například prostřednictvím pluginů jsou implementovány kvóty a ACL). Kód projektu je distribuován pod licencemi LGPL a MIT.
Hlavní změny:
- lib-oauth2: Ověření JWT tokenů nyní umožňuje chybějící pole 'typ'. Někteří emitenti klíčů, jako je kubernetes, toto pole nepoužívají, aby ušetřili místo. Nyní je absence 'typ' povolena, ale pokud je přítomno, mělo by být stále 'jwt'.
- auth: Odpověď 'Auth' z passdb a userdb může obsahovat hodnotu 'event_=value', která bude přidána k události přihlášení do systému a události poštovního uživatele příslušně.
- lib-master: Nastavuje hlavičku procesu v různých fázích inicializace, aby objasnila, co proces očekává.
- lib-storage: Interval mail_temp_scan_interval se nyní zvyšuje o 0…30 % v závislosti na haši uživatelského jména, aby se snížila pravděpodobnost výkyvů zatížení.
- lib-storage: Skenování dočasného souboru bylo přesunuto z okamžiku otevření poštovní schránky na okamžik jejího uzavření, aby se snížila latence vnímaná uživateli.
- stats: Pokud jsou v metrice uvedena pole, jsou všechna tato pole exportována jako počítadla pro prometheus ve formátu exposition.
- "*-login": Procesy mohly havarovat při nešetrném přerušení SSL spojení. — acl: Při načítání pluginu byly příznaky \\HasChildren a \\HasNoChildren nesprávně vypočítávány pro poštovní schránky obsahující v názvu '*' a '%'.
- auth: Při neúspěšném připojení k databázi PostgreSQL během spouštění došlo k selhání.
- auth: Při přihlašování s nesprávnými hesly (například s neznámou schémou) byla v passdb namísto 'vnitřní chyby' vrácena chyba 'nesouhlas hesla'.
- auth: Mechanismy XOAUTH2 a OAUTHBEARER nevydávaly chybové hlášení specifické pro protokol při jakýchkoli chybách. To zejména ztěžovalo odhalení OIDC.
- dbox: Pokud nebyl nastaven záhlaví last_temp_file_scan (zejména po migraci dsync), při každém dalším otevření poštovní schránky se vždy spustilo skenování dočasných souborů. To mohlo způsobit přetížení po migraci. Opraveno použitím atime adresáře poštovní schránky při absenci záhlaví, což obvykle posouvá čas skenování do budoucnosti.
- dict-redis: Při vracení transakcí došlo k chybě.
- dsync: Při odstraňování poštovní schránky na vzdáleném konci, kdy se úrovňové oddělovače hierarchie neshodovaly, vznikl nekonečný cyklus vedoucí k vyčerpání paměti.
- dsync: Inkrementální dsync se neprováděl pro názvy složek končící na ‘%’, pokud nebyla nastavena hodnota BROKENCHAR. Také názvy složek s ‘%’ na jiných místech vedly k tomu, že při každém inkrementálním dsync došlo k zbytečnému přejmenování složky na dočasný název a zpět. Regrese v 2.3.19.
- imap-hibernate: Pokud při odemykání IMAP klienta došlo k časovému timeoutu se zprávou „(version received)“, odemykání mohlo později úspěšně skončit a pokračovat v normální činnosti. To vedlo k záměně, protože imap-hibernate již zaznamenal, že se klient odpojil. Toho lze předejít tak, že se připojení ukončí při timeoutu konce hibernace.
- imapc: Pád při zmizení složky z úložiště zobrazené prostřednictvím virtuálního pluginu.
- imapc: Odpovědi EXPUNGE, EXISTS nebo FETCH z serveru pro dříve vybranou poštovní schránku mohly být zpracovány tak, jako by patřily nově právě vybrané poštovní schránce. To mohlo vést k varování.
- lib-http: HTTP server Dovecot (doveadm, stats/openmetrics) mohl odpojovat HTTP klienty před úplným odesláním odpovědi. K tomu docházelo pouze na zatížených serverech, kde byly jádrové socketové buffery těžce přetíženy.
- lib-http: Opraven možný pád http serveru v případě předčasného odpojení klienta. Regrese v 2.3.18.
- lib-index: Poškození indexového souboru mohlo vést k neočekávanému ukončení. Odstraněno: Panic: file mail-transaction-log-view.c: line 165 (mail_transaction_log_view_set): assertion failed: (min_file_seq <= max_file_seq).
- lib-index: Vymazání existujícího cache souboru většího než 1 GB mohlo vést k selhání. Nyní po vymazání jsou odstraněny cache soubory, jejichž velikost stále překračuje 1 GB. Opraveno: Panic: file mail-index-util.c: line 10 (mail_index_uint32_to_offset): assertion failed: (offset < 0x40000000).
- lib-lua: HTTP klient nebyl schopen určit DNS názvy v poštovních procesech, protože očekával, že socket ‚dns-client‘ bude umístěn v aktuálním adresáři.
- lib-oauth2: Dovecot posílal client_id a client_secret jako POST parametry na server introspekce. Nicméně, při Basic auth je jejich použití volitelné.
- lib-oauth2: Validace JWT ‚aud‘ nebyla prováděna, pokud ‚aud‘ chyběl v tokenu, ale byla nastavena v Dovecot.
- lib-oauth2: Příliš přísná kontrola typu JWT klíče.
- lib-oauth2: Publikum JWT tokenu nebylo kontrolováno na soulad s client_id, jak požaduje specifikace.
- lib-ssl-iostream: Použití parametru ssl_require_crl=yes mohlo způsobit selhání CRL kontroly pro odchozí SSL/TLS spojení, ačkoliv se předpokládalo, že ovlivňuje CRL kontrolu pouze pro klienty. SSL certifikátů. v2.3.17 regress.
- lib-sql: MySQL ovladač umožnil únik paměti při neúspěšném spojení.
- lib-storage: Různé opravy při nedostatku místa na disku.
- master: Nastavení idle_kill služby nefungovalo správně na vytížených serverech. Bylo velmi nepravděpodobné, že by jakýkoliv proces byl nečinný dostatečně dlouho, aby byl zabit. Navíc, při velkém počtu procesů (např. imap) kód zpracování idle_kill spotřebovával poměrně hodně CPU na hlavním procesu. Nyní každý časový interval idle_kill bude sledovat nejmenší počet nečinných procesů a následně zabije toto množství.
- mdbox: Kontrola dočasných souborů byla prováděna pro vždy prázdné adresáře.
- mdbox: Při zápisu e-mailů byl volán fdatasync() ve špatném nadřazeném adresáři. Také při selhání došlo k pádu místo zápisu chyby do protokolu.
- notify_status: Plugin se havarijně ukončuje při neúspěšné inicializaci uživatele. — pop3: Odeslání příkazu se symbolem ‘:’ vedlo k selhání ‚assert-crash‘. Regresní chyba ve verzi 2.3.18.
- stats: Opraveno panika, která nastala při přístupu k neexistujícímu exporteru událostí při dynamickém přidání nové metriky pomocí příkazu ‚doveadm stats add‘. Nyní se vrací správná chyba.
- stats: Pokud proces exportoval mnoho událostí a poté se ukončil, některé z posledních událostí mohly být ztraceny.
- stats: Nesprávná jména štítků Prometheus byla vytvořena při určitých konfiguracích histogram group_by. Prometheus tyto štítky odmítl.
- welcome: Plugin se nevykonával v některých situacích, když byl vytvořen INBOX, ale nebyl otevřen, například pokud byl před otevřením INBOX použit GETMETADATA.
Zdroj: opennet.ru
