Новая версія POP3 і IMAP4 сервера Dovecot 2.3.21

Апублікавана новая версія шматплатформавага высокапрадукцыйнага POP3/IMAP4-сервера Dovecot 2.3.21, які падтрымлівае пратаколы POP3 і IMAP4rev1 з папулярнымі пашырэннямі, такімі як SORT, THREAD і IDLE, і механізмамі аўтэнтыфікацыі і шыфраванні (SASL, TLS, SCRAM). Dovecot захоўвае поўную сумяшчальнасць з класічнымі mbox і Maildir, ужываючы вонкавыя індэксы для павышэння прадукцыйнасці. Для пашырэння функцыянальнасці могуць выкарыстоўвацца плагіны (напрыклад, праз плагіны рэалізаваны квоты і ACL). Код праекту распаўсюджваецца пад ліцэнзіямі LGPL і MIT.

Асноўныя змены:

  • lib-oauth2: Дазволена праверка JWT-токенаў з адсутным полем «typ». Поле "typ" не выкарыстоўваецца некаторымі эмітэнтамі ключоў для эканоміі месца, у прыватнасці, kubernetes. Зараз адсутнасць "typ" дапушчаецца, але калі яно прысутнічае, тое ўсё роўна павінна быць "jwt".
  • auth: Адказ "Auth" ад passdb і userdb можа змяшчаць значэнне "event_ =value», якая будзе дададзеная да падзеі ўваходу ў сістэму і падзеі паштовага карыстальніка адпаведна.
  • lib-master: Усталёўвае загаловак працэсу на розных этапах ініцыялізацыі, каб патлумачыць, чаго чакае працэс.
  • lib-storage: Інтэрвал mail_temp_scan_interval зараз павялічваецца на 0…30% у залежнасці ад хэша імя карыстача, каб паменшыць верагоднасць скокаў нагрузкі.
  • lib-storage: Сканіраванне часовага файла перанесена з моманту адкрыцця паштовай скрыні на момант яго закрыцця, каб паменшыць затрымку, якая адчуваецца карыстальнікамі.
  • stats: Калі ў метрыцы пазначаны палі, то ўсе гэтыя палі экспартуюцца ў выглядзе лічыльнікаў для prometheus у фармаце exposition.
  • "*-login": Працэсы маглі аварыйна завяршацца пры неакуратным парыве SSL-злучэнні. — acl: Пры загрузцы плагіна сцягі \\HasChildren і \\HasNoChildren некарэктна вылічаліся для паштовых скрынь, якія змяшчаюць у сваім імені '*' і '%'.
  • auth: Узнікаў збой пры няўдалым падлучэнні да СКБД PostgreSQL падчас запуску.
  • auth: Пры ўваходзе ў сістэму з няслушнымі паролямі (напрыклад, з невядомай схемай) у passdb замест "унутранай памылкі" выдавалася памылка "password mismatch".
  • auth: Механізмы XOAUTH2 і OAUTHBEARER не выдавалі паведамленне аб памылцы, спецыфічнае для пратаколу, пры любых памылках. Асабліва гэта замінала выяўленню OIDC.
  • dbox: Калі загаловак last_temp_file_scan не быў усталяваны (асабліва пасля dsync-міграцыі), то пры наступным адкрыцці паштовай скрыні заўсёды запускалася сканаванне часавых файлаў. Гэта магло выклікаць усплёск нагрузкі пасля міграцый. Выпраўлена выкарыстаннем atime каталога паштовай скрыні пры адсутнасці загалоўка, што звычайна зрушвае час сканавання ў будучыню.
  • dict-redis: Пры адкаце транзакцый адбываўся збой.
  • dsync: Пры выдаленні паштовай скрыні на выдаленым канцы, калі падзельнікі ўзроўняў іерархіі не супадалі, узнікаў бясконцы цыкл, які прыводзіць да выйсця з памяці.
  • dsync: Інкрыментны dsync не выконваўся для імёнаў тэчак, якія сканчаюцца на '%', калі не было ўсталявана значэнне BROKENCHAR. Таксама імёны тэчак з '%' у іншых месцах прыводзілі да таго, што пры кожным инкрементальном dsync адбывалася непатрэбнае перайменаванне тэчкі ў часавае імя і зваротна. Рэгрэсія v2.3.19.
  • imap-hibernate: Калі пры разблакіроўцы IMAP-кліента адбываўся тайм-аўт з паведамленнем "(version received)", то пазней разблакіроўка магла паспяхова завяршыцца і працягнуць нармальную працу. Гэта прыводзіла да блытаніны, паколькі imap-hibernate ужо фіксаваў, што кліент адключыўся. Пазбегнуць гэтага можна, прымусіўшы злучэнне завяршацца па таймаўце завяршэння гібернацыі.
  • imapc: Падзенне пры знікненні са сховішча тэчкі, якая адлюстроўваецца праз віртуальную ўбудову.
  • imapc: Адказы EXPUNGE, EXISTS або FETCH з сервера для раней абранай паштовай скрыні маглі апрацоўвацца так, як быццам яны належаць новай паштовай скрыні, абранаму ў дадзены момант. Гэта магло прывесці да з'яўлення папярэджанняў.
  • lib-http: HTTP-сервер Dovecot (doveadm, stats/openmetrics) мог адключаць HTTP-кліентаў да поўнай адпраўкі адказу. Гэта адбывалася толькі на загружаных серверах, дзе буферы сокетаў ядра былі моцна перапоўнены.
  • lib-http: Выпраўлена магчымае падзенне http-сервера ў выпадку ранняга адключэння кліента. Рэгрэсія ў 2.3.18.
  • lib-index: Пашкоджанне індэкснага файла магло прывесці да аварыйнага завяршэння працы. Ухілена: Panic: file mail-transaction-log-view.c: line 165 (mail_transaction_log_view_set): assertion failed: (min_file_seq <= max_file_seq).
  • lib-index: Ачыстка існуючага кэш-файла памерам больш за 1 ГБ магла прывесці да збою. Цяпер пасля ачысткі кэш-файлы, памер якіх усё яшчэ перавышае 1 ГБ, выдаляюцца. Ухілена: Panic: file mail-index-util.c: line 10 (mail_index_uint32_to_offset): assertion failed: (offset < 0x40000000).
  • lib-lua: HTTP-кліент не мог вызначыць DNS-імёны ў паштовых працэсах, паколькі чакаў, што сокет "dns-client" будзе знаходзіцца ў бягучым каталогу.
  • lib-oauth2: Dovecot адпраўляў client_id і client_secret у якасці POST-параметраў на сервер интроспекции. Аднак, пры Basic auth іх выкарыстанне апцыянальна.
  • lib-oauth2: Валідацыя JWT "aud" не выконвалася, калі "aud" адсутнічаў у токене, але быў настроены ў Dovecot.
  • lib-oauth2: Занадта строгая праверка тыпу ключа JWT.
  • lib-oauth2: Аўдыторыя JWT-токена не правяралася на адпаведнасць client_id, як таго патрабуе спецыфікацыя.
  • lib-ssl-iostream: Выкарыстанне параметра ssl_require_crl=yes магло прыводзіць да збояў праверкі CRL для выходных SSL/TLS-злучэнняў, хоць меркавалася, што ён уплывае на праверку CRL толькі для кліенцкіх SSL-сертыфікатаў. v2.3.17 рэгрэсія.
  • lib-sql: Драйвер MySQL дапушчаў уцечку памяці пры няўдалым падлучэнні.
  • lib-storage: Розныя выпраўленні пры недахопе месца на дыску.
  • master: Настройка idle_kill сэрвісу не працавала належным чынам на загружаных серверах. Было вельмі малаверагодна, што які-небудзь працэс прастойваў дастаткова доўга, каб стаць забітым. Акрамя таго, пры вялікай колькасці працэсаў (напрыклад, imap) код апрацоўкі idle_kill выкарыстоўваў дастаткова шмат CPU на галоўным працэсе. Цяпер кожны інтэрвал часу idle_kill будзе адсочваць найменшую колькасць прастойваюць працэсаў і затым забіваць гэтую колькасць.
  • mdbox: Праверка часавых файлаў выконвалася для заўсёды пустых каталогаў.
  • mdbox: Пры запісе лістоў выклік fdatasync() выконваўся ў няправільным бацькоўскім каталогу. Таксама пры збоі адбывалася падзенне замест запісу памылкі ў часопіс.
  • notify_status: Убудова аварыйна завяршае працу пры няўдалай ініцыялізацыі карыстача. - pop3: Адпраўка каманды з сімвалам ':' прыводзіла да збою "assert-crash". Рэгрэсія ў выпуску 2.3.18.
  • stats: Ухіленая паніка, якая ўзнікла пры звароце да неіснуючага экспарцёра падзей пры дынамічным даданні новай метрыкі з дапамогай каманды «doveadm stats add». Цяпер выдаецца карэктная памылка.
  • stats: Калі працэс экспартаваў шмат падзеяў, а затым завяршаўся, некаторыя з апошніх падзеяў маглі быць страчаныя.
  • stats: Некарэктныя імёны пазнак Prometheus ствараліся пры пэўных канфігурацыях histogram group_by. Prometheus адпрэчваў гэтыя пазнакі.
  • welcome: Убудова не выконвалася ў некаторых сітуацыях, калі INBOX ствараўся, але пры гэтым не адчыняўся, напрыклад, калі перад адкрыццём INBOX выкарыстоўваўся GETMETADATA.

Крыніца: opennet.ru

Дадаць каментар