Eine neue Version des plattformübergreifenden, leistungsstarken POP3/IMAP4-Servers Dovecot 2.3.21 wurde veröffentlicht. Dieser unterstützt die Protokolle POP3 und IMAP4rev1 mit verbreiteten Erweiterungen wie SORT, THREAD und IDLE sowie Authentifizierungs- und Verschlüsselungsmechanismen (SASL, TLS, SCRAM). Dovecot bleibt vollständig kompatibel mit klassischen mbox und Maildir, indem externe Indizes zur Leistungssteigerung verwendet werden. Zur Erweiterung der Funktionalität können Plugins eingesetzt werden (z.B. werden Quoten und ACLs über Plugins implementiert). Der Code des Projekts wird unter den Lizenzen LGPL und MIT bereitgestellt.
Wesentliche Änderungen:
- lib-oauth2: Die Überprüfung von JWT-Token ohne das Feld „typ“ wurde zugelassen. Das Feld „typ“ wird von einigen Schlüssel-Emittern eingespart, insbesondere von Kubernetes. Das Fehlen von „typ“ ist nun zulässig, jedoch muss, wenn es vorhanden ist, der Wert „jwt“ sein.
- auth: Die „Auth“-Antwort von passdb und userdb kann den Wert „event_=value“ enthalten, der dem jeweiligen Ereignis des Systemanmeldens und des Mailbenutzers hinzugefügt wird.
- lib-master: Setzt den Prozessheader in verschiedenen Phasen der Initialisierung, um zu erläutern, was der Prozess erwartet.
- lib-storage: Das Intervall mail_temp_scan_interval wird jetzt um 0…30% basierend auf dem Hash des Benutzernamens erhöht, um die Wahrscheinlichkeit von Lastspitzen zu verringern.
- lib-storage: Der Scan der Temporärdatei wurde vom Moment der Öffnung des Postfachs auf den Moment seiner Schließung verschoben, um die von den Benutzern empfundene Verzögerung zu reduzieren.
- stats: Wenn in der Metrik Felder angegeben sind, werden alle diese Felder als Zähler für Prometheus im Expositionsformat exportiert.
- «*-login»: Prozesse könnten bei unsachgemäßem Abbruch der SSL-Verbindung abstürzen. — acl: Beim Laden des Plugins wurden die Flags \\HasChildren und \\HasNoChildren für Postfächer mit einem Namen, der ‘*’ und ‘%’ enthält, falsch berechnet.
- auth: Beim fehlgeschlagenen Verbindungsversuch zur PostgreSQL-Datenbank kam es zu einem Fehler während des Starts.
- auth: Bei der Anmeldung mit falschen Passwörtern (z. B. mit unbekanntem Schema) wurde in passdb anstelle eines „internen Fehlers“ der Fehler „Passwort stimmt nicht überein“ ausgegeben.
- auth: Die Mechanismen XOAUTH2 und OAUTHBEARER gaben bei allen Fehlern keine protokollspezifische Fehlermeldung aus. Dies erschwerte insbesondere die Erkennung von OIDC.
- dbox: Wenn der Header last_temp_file_scan nicht gesetzt war (insbesondere nach einer dsync-Migration), wurde beim nächsten Öffnen des Postfachs immer ein Scan der temporären Dateien gestartet. Dies konnte nach Migrationen zu einem Anstieg der Last führen. Dieses Problem wurde behoben, indem das atime-Verzeichnis des Postfachs verwendet wurde, wenn der Header nicht vorhanden war, wodurch der Scan-Zeitpunkt normalerweise in die Zukunft verschoben wurde.
- dict-redis: Bei der Rücksetzung von Transaktionen trat ein Fehler auf.
- dsync: Beim Löschen eines Postfachs am Remote-Ende, wenn die Hierarchie-Trennzeichen nicht übereinstimmten, entstand eine Endlosschleife, die zu einem Speicherausgang führte.
- dsync: Inkrementelles dsync wurde nicht für Ordnernamen ausgeführt, die mit '%' endeten, wenn nicht der Wert BROKENCHAR gesetzt war. Ordnernamen mit '%' an anderen Stellen führten ebenfalls dazu, dass bei jedem inkrementellen dsync eine unnötige Umbenennung des Ordners in einen temporären Namen und zurück erfolgte. Regression v2.3.19.
- imap-hibernate: Wenn beim Entsperren des IMAP-Clients ein Timeout mit der Meldung „(version received)“ aufgetreten ist, konnte das Entsperren später erfolgreich abgeschlossen werden und die normale Funktion fortgesetzt werden. Dies führte zu Verwirrung, da imap-hibernate bereits registriert hatte, dass der Client getrennt war. Dies lässt sich vermeiden, indem das Verbindungsende durch das Timeout für die Beendigung der Hibernation erzwungen wird.
- imapc: Absturz beim Verschwinden eines über das virtuelle Plugin angezeigten Ordners aus dem Speicher.
- imapc: Antworten EXPUNGE, EXISTS oder FETCH mit Server einem zuvor ausgewählten Postfach konnten so behandelt werden, als gehörten sie zu einem neuen Postfach, das gerade ausgewählt wurde. Dies konnte zu Warnmeldungen führen.
- lib-http: Der HTTP-Server Dovecot (doveadm, stats/openmetrics) konnte HTTP-Clients vor dem vollständigen Senden der Antwort trennen. Dies geschah nur auf stark belasteten Servern, bei denen die Kernel-Socket-Puffer stark überlastet waren.
- lib-http: Möglicher Absturz des http-Servers bei vorzeitiger Trennung des Clients behoben. Regression in 2.3.18.
- lib-index: Eine Beschädigung der Indexdatei könnte zu einem unerwarteten Absturz geführt haben. Behebung: Panic: Datei mail-transaction-log-view.c: Zeile 165 (mail_transaction_log_view_set): Assertion fehlgeschlagen: (min_file_seq <= max_file_seq).
- lib-index: Das Löschen einer bestehenden Cache-Datei von über 1 GB könnte zu einem Absturz geführt haben. Nach dem Löschen werden nun Cache-Dateien, die immer noch über 1 GB groß sind, entfernt. Behebung: Panic: Datei mail-index-util.c: Zeile 10 (mail_index_uint32_to_offset): Assertion fehlgeschlagen: (offset < 0x40000000).
- lib-lua: Der HTTP-Client konnte keine DNS-Namen in den E-Mail-Prozessen auflösen, da erwartet wurde, dass der 'dns-client'-Socket im aktuellen Verzeichnis ist.
- lib-oauth2: Dovecot sendete client_id und client_secret als POST-Parameter an den Introspektionsserver. Bei der Grundauthentifizierung sind diese jedoch optional.
- lib-oauth2: Die Validierung des JWT 'aud' wurde nicht durchgeführt, wenn 'aud' im Token fehlte, aber in Dovecot konfiguriert war.
- lib-oauth2: Zu strenge Überprüfung des JWT-Schlüsseltyps.
- lib-oauth2: Die Zielgruppe (audience) des JWT-Tokens wurde nicht mit der client_id abgeglichen, wie es die Spezifikation verlangt.
- lib-ssl-iostream: Die Verwendung des Parameters ssl_require_crl=yes konnte zu Fehlern bei der CRL-Überprüfung für ausgehende SSL/TLS-Verbindungen führen, obwohl angenommen wurde, dass er nur die CRL-Überprüfung für Clients beeinflusst. SSL-Zertifikate. v2.3.17 Regression.
- lib-sql: Der MySQL-Treiber hatte ein Speicherleck bei fehlgeschlagenen Verbindungen.
- lib-storage: Verschiedene Fehlerbehebungen bei unzureichendem Speicherplatz.
- master: Die Konfiguration von idle_kill für den Dienst funktionierte auf stark ausgelasteten Servern nicht korrekt. Es war sehr unwahrscheinlich, dass ein Prozess lange genug anhielt, um beendet zu werden. Zudem benötigte der idle_kill-Code bei einer hohen Anzahl von Prozessen (z. B. imap) eine erhebliche Menge an CPU-Ressourcen im Hauptprozess. Nun wird jeder idle_kill-Zeitraum die geringste Anzahl an inaktiven Prozessen überwachen und dann diese Anzahl beenden.
- mdbox: Die Überprüfung temporärer Dateien wurde für immer leere Verzeichnisse durchgeführt.
- mdbox: Bei der Aufzeichnung von E-Mails wurde der Aufruf von fdatasync() im falschen übergeordneten Verzeichnis ausgeführt. Außerdem kam es zu einem Absturz anstelle der Protokollierung eines Fehlers bei einem Ausfall.
- notify_status: Das Plugin beendet unerwartet die Ausführung bei fehlgeschlagener Benutzerinitialisierung. — pop3: Das Senden eines Kommandos mit dem Zeichen ‘:’ führte zum Fehler „assert-crash“. Regression in Version 2.3.18.
- stats: Die Panik, die beim Zugriff auf einen nicht existierenden Ereignis-Exporter beim dynamischen Hinzufügen einer neuen Metrik mit dem Befehl „doveadm stats add“ auftrat, wurde behoben. Jetzt wird ein korrektes Fehlerfeedback angezeigt.
- stats: Wenn der Prozess viele Ereignisse exportiert hat und dann beendet wurde, könnten einige der letzten Ereignisse verloren gegangen sein.
- stats: Bei bestimmten Konfigurationen der histogram group_by wurden ungültige Prometheus-Label-Namen erzeugt. Prometheus hat diese Labels abgelehnt.
- welcome: Das Plugin wurde in bestimmten Situationen nicht ausgeführt, wenn das INBOX erstellt, aber nicht geöffnet wurde, zum Beispiel wenn GETMETADATA vor dem Öffnen des INBOX verwendet wurde.
Quelle: opennet.ru
