È stata pubblicata una nuova versione del server POP3/IMAP4 multipiattaforma ad alte prestazioni Dovecot 2.3.21, che supporta i protocolli POP3 e IMAP4rev1 con estensioni popolari come SORT, THREAD e IDLE, e meccanismi di autenticazione e crittografia (SASL, TLS, SCRAM). Dovecot mantiene la piena compatibilità con mbox e Maildir classici, utilizzando indici esterni per migliorare le prestazioni. Possono essere utilizzati plugin (ad esempio, tramite plugin sono implementate le quote e ACL) per estendere la funzionalità. Il codice del progetto è distribuito sotto le licenze LGPL e MIT.
Variazioni principali:
- lib-oauth2: È ora consentita la verifica dei token JWT senza il campo 'typ'. Alcuni emittenti di chiavi non utilizzano il campo 'typ' per risparmiare spazio, in particolare kubernetes. Ora l'assenza di 'typ' è consentita, ma se è presente, deve comunque essere 'jwt'.
- auth: La risposta 'Auth' da passdb e userdb può contenere il valore 'event_=value', che sarà aggiunto all'evento di accesso e all'evento dell'utente email rispettivamente.
- lib-master: Imposta l'intestazione del processo in vari stadi di inizializzazione per chiarire cosa si aspetta il processo.
- lib-storage: L'intervallo mail_temp_scan_interval ora aumenta dal 0 al 30% a seconda dell'hash del nome utente, per ridurre la probabilità di picchi di carico.
- lib-storage: La scansione del file temporaneo è stata spostata dal momento dell'apertura della casella di posta al momento della sua chiusura, per ridurre il ritardo percepito dagli utenti.
- stats: Se i campi sono specificati nella metrica, tutti questi campi vengono esportati come contatori per prometheus nel formato exposition.
- "*-login": I processi potrebbero terminare anormalmente a causa di una disconnessione SSL inadeguata. — acl: Al caricamento di un plugin, i flag \\HasChildren e \\HasNoChildren erano calcolati in modo errato per le caselle di posta che contenevano nel loro nome '*' e '%'.
- auth: Si verificava un errore durante il tentativo di connessione al database PostgreSQL durante l'avvio.
- auth: Durante il login con password errate (ad esempio, con uno schema sconosciuto) in passdb veniva restituito un errore 'password mismatch' invece di un 'errore interno'.
- auth: I meccanismi XOAUTH2 e OAUTHBEARER non generavano un messaggio di errore specifico per il protocollo in caso di errori. Questo ha reso particolarmente difficile l'individuazione di OIDC.
- dbox: Se l'intestazione last_temp_file_scan non era stata impostata (soprattutto dopo la migrazione dsync), alla successiva apertura della casella di posta veniva sempre avviata la scansione dei file temporanei. Questo poteva causare picchi di carico dopo le migrazioni. Risolto utilizzando l'atime della cartella della casella di posta in assenza dell'intestazione, il che solitamente sposta nel futuro il momento della scansione.
- dict-redis: Durante il rollback delle transazioni si è verificato un errore.
- dsync: Alla cancellazione della casella di posta all'estremo remoto, quando i separatori dei livelli gerarchici non corrispondevano, si creava un ciclo infinito che portava a un esaurimento della memoria.
- dsync: Il dsync incrementale non veniva eseguito per i nomi delle cartelle che terminavano con ‘%’, a meno che non fosse stato impostato il valore BROKENCHAR. Inoltre, i nomi delle cartelle contenenti ‘%’ in altre posizioni causavano una rinomina non necessaria della cartella in un nome temporaneo durante ogni dsync incrementale, per poi ripristinarla. Questa è una regressione v2.3.19.
- imap-hibernate: Se si verificava un timeout durante lo sblocco del client IMAP con il messaggio «(version received)», successivamente lo sblocco poteva terminare con successo e continuare a funzionare normalmente. Ciò portava a confusione, poiché imap-hibernate aveva già registrato la disconnessione del client. Questo può essere evitato facendo terminare la connessione al timeout di fine ibernazione.
- imapc: Crash quando scompariva la cartella mostrata tramite un plugin virtuale.
- imapc: Le risposte EXPUNGE, EXISTS o FETCH da server una casella di posta precedentemente selezionata potevano essere elaborate come se appartenessero ad una nuova casella di posta attualmente selezionata. Questo poteva portare all'emergere di avvisi.
- lib-http: Il server HTTP di Dovecot (doveadm, stats/openmetrics) poteva disconnettere i clienti HTTP prima della completa invio della risposta. Questo si verificava solo su server sovraccarichi, dove i buffer dei socket del kernel erano molto saturi.
- lib-http: Risolto un possibile crash del server http in caso di disconnessione prematura del cliente. Regressione in 2.3.18.
- lib-index: La corruzione del file di indice poteva portare a un arresto anomalo. Risolto: Panic: file mail-transaction-log-view.c: line 165 (mail_transaction_log_view_set): assertion failed: (min_file_seq <= max_file_seq).
- lib-index: La pulizia di un file di cache esistente di oltre 1 GB potrebbe aver causato un errore. Ora, dopo la pulizia, i file di cache che superano ancora 1 GB vengono rimossi. Risolto: Panic: file mail-index-util.c: line 10 (mail_index_uint32_to_offset): assertion failed: (offset < 0x40000000).
- lib-lua: Il client HTTP non poteva determinare i nomi DNS nei processi di posta, poiché si aspettava che il socket 'dns-client' fosse nella directory corrente.
- lib-oauth2: Dovecot inviava client_id e client_secret come parametri POST al server di introspezione. Tuttavia, con l'autenticazione di tipo Basic, il loro utilizzo è facoltativo.
- lib-oauth2: La validazione dell'JWT 'aud' non veniva eseguita se 'aud' era assente nel token ma era configurato in Dovecot.
- lib-oauth2: Controllo del tipo di chiave JWT troppo rigoroso.
- lib-oauth2: L'audience del token JWT non veniva verificata contro il client_id, come richiesto dalla specifica.
- lib-ssl-iostream: L'uso del parametro ssl_require_crl=yes poteva portare a errori nella verifica CRL per le connessioni SSL/TLS in uscita, sebbene si ritenesse che influisse sulla verifica CRL solo per i client. dei certificati SSL. v2.3.17 regressione.
- lib-sql: Il driver MySQL consentiva perdite di memoria durante un tentativo di connessione fallito.
- lib-storage: Vari fix in caso di spazio su disco insufficiente.
- master: La configurazione del servizio idle_kill non funzionava correttamente su server sotto carico. Era molto improbabile che un processo rimanesse inattivo a lungo per essere terminato. Inoltre, con un gran numero di processi (ad esempio, imap), il codice di gestione di idle_kill utilizzava una quantità significativa di CPU nel processo principale. Ora ogni intervallo di tempo di idle_kill controllerà il numero minimo di processi inattivi e quindi ucciderà quel numero.
- mdbox: La verifica dei file temporanei veniva eseguita per directory sempre vuote.
- mdbox: Durante la scrittura delle email, la chiamata a fdatasync() era eseguita nella directory genitore sbagliata. Inoltre, in caso di errore, si verificava un crash invece di registrare un errore nel log.
- notify_status: Il plugin chiudeva in modo anomalo in caso di fallimento dell'inizializzazione dell'utente. — pop3: L'invio di un comando con il simbolo ':' causava un errore di 'assert-crash'. Regressione nella versione 2.3.18.
- stats: Risolta la pazzia che si verificava accedendo a un esportatore di eventi inesistente durante l'aggiunta dinamica di una nuova metrica con il comando 'doveadm stats add'. Ora viene restituito un errore corretto.
- stats: Se il processo ha esportato molti eventi e poi si è arrestato, alcuni degli ultimi eventi potrebbero essere stati persi.
- stats: Nomi di etichette Prometheus non validi venivano creati in determinate configurazioni di histogram group_by. Prometheus rifiutava queste etichette.
- welcome: Il plugin non veniva eseguito in alcune situazioni in cui INBOX veniva creato ma non aperto, ad esempio, se prima di aprire INBOX veniva utilizzato GETMETADATA.
Fonte: opennet.ru
