De nieuwe versie van de multi-platform high-performance POP3/IMAP4-server Dovecot 2.3.21 is uitgebracht, die de protocollen POP3 en IMAP4rev1 ondersteunt met populaire uitbreidingen zoals SORT, THREAD en IDLE, evenals authenticatie- en encryptiemechanismen (SASL, TLS, SCRAM). Dovecot behoudt volledige compatibiliteit met klassieke mbox en Maildir, waarbij externe indexen worden gebruikt om de prestatie te verbeteren. Voor het uitbreiden van de functionaliteit kunnen plugins worden gebruikt (bijvoorbeeld, quota en ACL worden gerealiseerd via plugins). De projectcode wordt verspreid onder de LGPL- en MIT-licenties.
Belangrijkste wijzigingen:
- lib-oauth2: Controle van JWT-tokens zonder het veld 'typ' is toegestaan. Het veld 'typ' wordt door sommige sleutelaanbieders niet gebruikt om ruimte te besparen, bijvoorbeeld door kubernetes. Nu is het ontbreken van 'typ' toegestaan, maar als het aanwezig is, moet het nog steeds 'jwt' zijn.
- auth: Het 'Auth'-antwoord van passdb en userdb kan de waarde 'event_=value' bevatten, die aan het inlogsysteem en het e-mailgebruikersysteem wordt toegevoegd.
- lib-master: Stelt de procesheader in op verschillende fasen van initialisatie om aan te geven wat het proces verwacht.
- lib-storage: Het tijdsinterval mail_temp_scan_interval wordt nu met 0ā¦30% verhoogd, afhankelijk van de gebruikersnaamhash, om de kans op belastingpieken te verminderen.
- lib-storage: Het scannen van het tijdelijke bestand is verplaatst van het moment van openen van de mailbox naar het moment van sluiten, om de vertraging die door gebruikers wordt ervaren te verkleinen.
- stats: Als er velden worden vermeld in de metriek, worden al deze velden als tellers geƫxporteerd voor prometheus in het exposition-formaat.
- '*-login': Processen konden crashen bij een onvoorzichtige beĆ«indiging van de SSL-verbinding. ā acl: Bij het laden van de plugin werden de vlaggen \HasChildren en \HasNoChildren onjuist berekend voor mailboxen met '*' en '%' in hun naam.
- auth: Er was een crash bij een mislukte verbinding met de PostgreSQL-databaseserver tijdens de opstart.
- auth: Bij inloggen met onjuiste wachtwoorden (bijvoorbeeld met een onbekende schema) werd in passdb in plaats van 'interne fout' de foutmelding 'wachtwoord komt niet overeen' gegeven.
- auth: De mechanismen XOAUTH2 en OAUTHBEARER gaven geen protocol-specifieke foutmelding bij fouten. Dit hinderde vooral de detectie van OIDC.
- dbox: Als de last_temp_file_scan header niet was ingesteld (vooral na een dsync-migratie), werd bij de volgende opening van de mailbox altijd een scan van tijdelijke bestanden gestart. Dit kon leiden tot een piek in de belasting na migraties. Dit is opgelost door de atime van de mailboxmap te gebruiken wanneer de header ontbreekt, wat normaal de scan tijd naar de toekomst verschuift.
- dict-redis: Tijdens het terugdraaien van transacties trad er een fout op.
- dsync: Bij het verwijderen van een mailbox aan de andere kant ontstond er een oneindige lus als de hiƫrarchie scheidingssymbolen niet overeenkwamen, wat leidde tot geheugenuitputting.
- dsync: Incrementele dsync werd niet uitgevoerd voor mappen met namen die eindigen op ā%ā als de BROKENCHAR waarde niet was ingesteld. Ook mappen met ā%ā op andere plaatsen leidden ertoe dat er bij elke incrementele dsync onnodig een tijdelijke hernoeming van de map plaatsvond. Terugval v2.3.19.
- imap-hibernate: Als de IMAP-client werd ontgrendeld en er een timeout was met het bericht ā(version received)ā, kon de ontgrendeling later succesvol zijn en de normale werking voortzetten. Dit leidde tot verwarring, omdat imap-hibernate al had geregistreerd dat de client was losgekoppeld. Dit kan worden voorkomen door de verbinding op te laten breken bij een time-out tijdens de hibernate.
- imapc: Crash bij het verdwijnen van een map die via een virtuele plugin werd weergegeven.
- imapc: Antwoorden EXPUNGE, EXISTS of FETCH met de server voor een eerder geselecteerde mailbox konden zo worden behandeld alsof ze behoorden tot de nieuwe mailbox die momenteel was geselecteerd. Dit kon leiden tot waarschuwingsmeldingen.
- lib-http: De HTTP-server van Dovecot (doveadm, stats/openmetrics) kon HTTP-clients afsluiten voordat het antwoord volledig was verzonden. Dit gebeurde alleen op drukke servers waar de buffers van de sockets ernstig vol waren.
- lib-http: Mogelijke crash opgelost van de http-server bij vroegtijdig afsluiten door de client. Terugval in 2.3.18.
- lib-index: Beschadiging van het indexbestand kon leiden tot een crash. Oplossing: Panic: file mail-transaction-log-view.c: line 165 (mail_transaction_log_view_set): assertion failed: (min_file_seq <= max_file_seq).
- lib-index: Het wissen van bestaande cachebestanden groter dan 1 GB kan leiden tot een fout. Nu worden na het wissen cachebestanden die nog steeds groter zijn dan 1 GB verwijderd. Oplossing: Panic: file mail-index-util.c: line 10 (mail_index_uint32_to_offset): assertion failed: (offset < 0x40000000).
- lib-lua: De HTTP-client kon DNS-namen niet identificeren in mailprocessen, omdat hij verwachtte dat de socket 'dns-client' zich in de huidige map bevond.
- lib-oauth2: Dovecot verzond client_id en client_secret als POST-parameters naar de introspectieserver. Bij Basisauthenticatie is hun gebruik echter optioneel.
- lib-oauth2: Validatie van JWT 'aud' werd niet uitgevoerd als 'aud' niet in de token stond, maar wel in Dovecot was ingesteld.
- lib-oauth2: Te strikte controle van het JWT-sleuteldtype.
- lib-oauth2: Het publiek van de JWT-token werd niet gecontroleerd op overeenstemming met client_id, zoals de specificatie vereist.
- lib-ssl-iostream: Het gebruik van de parameter ssl_require_crl=yes kan hebben geleid tot fouten bij het controleren van CRL voor uitgaande SSL/TLS-verbindingen, hoewel werd aangenomen dat dit alleen invloed had op de controle van CRL voor clients. SSL-certificaten. v2.3.17 regressie.
- lib-sql: De MySQL-driver veroorzaakte een geheugenlek bij een mislukte verbinding.
- lib-storage: Diverse oplossingen voor het tekort aan schijfruimte.
- master: De configuratie van idle_kill werkte niet goed op drukke servers. Het was zeer onwaarschijnlijk dat een proces lang genoeg inactief was om te worden beƫindigd. Bovendien gebruikte de code voor het verwerken van idle_kill bij een groot aantal processen (zoals imap) voldoende CPU op het hoofdproces. Nu zal elk idle_kill-tijdinterval het minste aantal inactieve processen volgen en dat aantal vervolgens beƫindigen.
- mdbox: Tijdelijke bestanden werden gecontroleerd voor altijd lege mappen.
- mdbox: Bij het schrijven van e-mails werd de fdatasync()-aanroep in de verkeerde bovenliggende map uitgevoerd. Bij een fout trad er ook een crash op in plaats van het loggen van een fout.
- notify_status: De plugin crashte bij een mislukte gebruikerinitialisatie. ā pop3: Het verzenden van een commando met het teken ā:ā leidde tot een falen āassert-crashā. Regressie in release 2.3.18.
- stats: De paniek bij toegang tot een niet-bestaande gebeurtenisexporteur bij het dynamisch toevoegen van een nieuwe metriek met het commando 'doveadm stats add' is opgelost. Nu wordt een correcte foutmelding gegeven.
- stats: Als het proces veel gebeurtenissen heeft geƫxporteerd en vervolgens is beƫindigd, kunnen sommige van de laatst geregistreerde gebeurtenissen verloren zijn gegaan.
- stats: Onjuiste namen voor Prometheus-labels werden aangemaakt onder bepaalde configuraties van histogram group_by. Prometheus wees deze labels af.
- welcome: De plugin werd niet uitgevoerd in bepaalde situaties waarin de INBOX werd aangemaakt, maar niet werd geopend, bijvoorbeeld als GETMETADATA werd gebruikt voor het openen van de INBOX.
Bron: opennet.ru
