تم نشر إصدار جديد من خادم POP3/IMAP4 متعدد المنصات عالي الأداء Dovecot 2.3.21، يدعم بروتوكولات POP3 وIMAP4rev1 مع امتدادات شائعة مثل SORT وTHREAD وIDLE، وآليات المصادقة والتشفير (SASL، TLS، انصرف). يظل 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: تم نقل فحص الملفات المؤقتة من لحظة فتح صندوق البريد إلى لحظة إغلاقه لتقليل التأخير الذي يواجهه المستخدمون.
- الإحصائيات: إذا تم تحديد الحقول في المقياس، فسيتم تصدير جميع هذه الحقول كعدادات إلى بروميثيوس في تنسيق العرض.
- "*-login": قد تتعطل العمليات إذا تم إنهاء اتصال SSL عن غير قصد. - ACL: عند تحميل البرنامج الإضافي، تم حساب علامتي \\HasChildren و\\HasNoChildren بشكل غير صحيح لصناديق البريد التي تحتوي على '*' و'%' في أسمائها.
- المصادقة: حدث عطل عند فشل الاتصال بنظام PostgreSQL DBMS أثناء بدء التشغيل.
- auth: عند تسجيل الدخول باستخدام كلمات مرور غير صالحة (على سبيل المثال، باستخدام نظام غير معروف)، كان passdb يعرض الخطأ "عدم تطابق كلمة المرور" بدلاً من "خطأ داخلي".
- المصادقة: لم تصدر آليات XOAUTH2 وOAUTHBEARER رسالة خطأ خاصة بالبروتوكول بشأن أي أخطاء. وهذا أعاق بشكل خاص اكتشاف OIDC.
- dbox: إذا لم يتم تعيين رأس last_temp_file_scan (خاصة بعد ترحيل dsync)، ففي المرة التالية التي يتم فيها فتح صندوق البريد، سيتم دائمًا بدء فحص الملفات المؤقتة. قد يتسبب هذا في ارتفاع التحميل بعد عمليات الترحيل. تم إصلاح المشكلة باستخدام دليل صندوق البريد في أي وقت عندما لا يكون هناك رأس، مما يؤدي عادةً إلى دفع وقت الفحص إلى المستقبل.
- dict-redis: فشل التراجع عن المعاملة.
- dsync: عند حذف صندوق بريد على الطرف البعيد، عندما لا تتطابق محددات التسلسل الهرمي، حدثت حلقة لا نهائية، مما أدى إلى حدث نفاد الذاكرة.
- dsync: لم يتم تنفيذ dsync التزايدي على أسماء المجلدات التي تنتهي بـ '%' ما لم يتم تعيين BROKENCHAR. كما تسببت أسماء المجلدات التي تحتوي على "%" في أماكن أخرى في إعادة تسمية المجلد بشكل غير ضروري إلى اسم مؤقت وإعادته مرة أخرى مع كل dsync تزايدي. الانحدار v2.3.19.
- IMAP-Hibernate: إذا انتهت مهلة عميل IMAP مع ظهور رسالة "(تم استلام الإصدار)" أثناء إلغاء القفل، فقد يكتمل إلغاء القفل لاحقًا بنجاح ويستمر في التشغيل العادي. كان هذا مربكًا لأن IMAP-Hibernate قد اكتشف بالفعل أن العميل قد تم قطع اتصاله. يمكنك تجنب ذلك عن طريق فرض انتهاء الاتصال بمهلة السبات.
- imapc: يتعطل عندما يختفي المجلد المعروض عبر مكون إضافي افتراضي من وحدة التخزين.
- imapc: ردود EXPUNGE أو EXISTS أو FETCH مع الخادم بالنسبة لصندوق بريد تم تحديده مسبقًا، قد تتم معالجة الرسائل كما لو كانت تابعة لصندوق البريد الجديد المحدد حاليًا. وقد يؤدي ذلك إلى ظهور تحذيرات.
- lib-http: يمكن لخادم Dovecot HTTP (doveadm، stats/openmetrics) قطع اتصال عملاء HTTP قبل إرسال الاستجابة بالكامل. حدث هذا فقط على الخوادم المزدحمة حيث كانت المخازن المؤقتة لمأخذ توصيل kernel ممتلئة جدًا.
- lib-http: تم إصلاح العطل المحتمل لخادم http في حالة قطع اتصال العميل مبكرًا. الانحدار في 2.3.18.
- lib-index: قد يؤدي تلف ملف الفهرس إلى حدوث عطل. تم الحل: الذعر: ملف mail-transaction-log-view.c: السطر 165 (mail_transaction_log_view_set): فشل التأكيد: (min_file_seq <= max_file_seq).
- lib-index: قد يؤدي مسح ملف ذاكرة تخزين مؤقت موجود أكبر من 1 جيجابايت إلى حدوث عطل. الآن، بعد المسح، يتم حذف ملفات ذاكرة التخزين المؤقت التي لا يزال حجمها أكبر من 1 جيجابايت. تم إصلاح: الذعر: ملف mail-index-util.c: السطر 10 (mail_index_uint32_to_offset): فشل التأكيد: (الإزاحة <0x40000000).
- lib-lua: لم يتمكن عميل HTTP من حل أسماء DNS في عمليات البريد لأنه توقع وجود مأخذ توصيل "dns-client" في الدليل الحالي.
- lib-oauth2: أرسل Dovecot Client_id وclient_secret كمعلمات POST إلى خادم الاستبطان. ومع ذلك، مع المصادقة الأساسية، يكون استخدامها اختياريًا.
- 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: إصلاحات مختلفة لمساحة القرص المنخفضة.
- رئيسي: لم يعمل إعداد خدمة idle_kill بشكل صحيح على الخوادم المزدحمة. كان من غير المرجح أن تظل أي عملية خاملة لفترة كافية للقتل. بالإضافة إلى ذلك، مع وجود عدد كبير من العمليات (على سبيل المثال، IMAP)، استخدم رمز معالجة Idle_kill الكثير من وحدة المعالجة المركزية في العملية الرئيسية. الآن، ستقوم كل فترة زمنية لـ idle_kill بتتبع أصغر عدد من العمليات الخاملة ثم تقوم بقتل هذا العدد.
- mdbox: تم فحص الملفات المؤقتة للأدلة الفارغة دائمًا.
- mdbox: عند كتابة رسائل البريد الإلكتروني، تم تنفيذ استدعاء fdatasync() في الدليل الأصلي الخاطئ. أيضًا، عندما تعطل، تعطل بدلاً من كتابة خطأ في السجل.
- notify_status: يتعطل البرنامج المساعد عندما تفشل تهيئة المستخدم. - pop3: إرسال أمر مع ':' أدى إلى "تعطل التأكيد". الانحدار في الإصدار 2.3.18.
- الإحصائيات: تم إصلاح حالة الذعر التي حدثت عند الوصول إلى مُصدِّر حدث غير موجود عند إضافة مقياس جديد ديناميكيًا باستخدام أمر "doveadm stats add". الآن يتم إعطاء الخطأ الصحيح.
- الإحصائيات: إذا قامت إحدى العمليات بتصدير العديد من الأحداث ثم تم الخروج منها، فقد تكون بعض الأحداث الأخيرة قد فقدت.
- الإحصائيات: تم إنشاء أسماء تصنيفات بروميثيوس غير الصحيحة باستخدام تكوينات معينة للرسم البياني group_by. رفض بروميثيوس هذه العلامات.
- مرحبًا: فشل البرنامج الإضافي في بعض الحالات التي تم فيها إنشاء صندوق الوارد ولكن لم يتم فتحه، على سبيل المثال، إذا تم استخدام GETMETADATA قبل فتح صندوق الوارد.
المصدر: opennet.ru
