Problem Roku... 2022? Poczta Microsoft Exchange przestała działać
Niektóre wersje serwera pocztowego Microsoft Exchange w wariancie on-prem uległy wraz z Nowym Rokiem awarii, bowiem dzisiejsza data nie mieści się w zmiennej. Winę za to ponosi wbudowany silnik filtrujący (Microsoft Filtering Engine). Umożliwia on skanowanie zawartości Exchange'a przez program antywirusowy i reguły spamowe. Wszystko to przez osobliwy sposób zapisu daty.
01.01.2022 17:42
Czy ktoś pamięta jeszcze Problem Roku 2000? Miliony urządzeń elektronicznych miały przestać działać i w konsekwencji doprowadzić do paraliżu i/lub wojny sekundę po zakończeniu 31 grudnia 1999. Powodem miał być dwucyfrowy format daty, przekręcający się w roku 2000 do daty 1900. Dwucyfrowe daty były zaszłością historyczną z czasów telegrafów, zostały przeniesione do tuzinów standardów federalnych w USA i w ten sposób wylądowały w elektronice biurowej i użytkowej.
Problem był rozdmuchany przez prasę - ale tylko trochę. Brak katastrofy w roku 2000 zawdzięczamy wysiłkom informatyków na całym świecie, którzy łatali lub wymieniali podatne systemy. Dziś, ze względu na przegrzanie tematu, takie historie nie są już popularne. A podobny problem czai się w 32-bitowym Uniksie i niektórych, gdzie "cwana" sztuczka z przechowywaniem daty w postaci sekund w jednej zmiennej, dociera do kresu możliwości w 2038 roku.
Nowy serwer, stary problem
Co zrobił Microsoft? Zdecydowano - kiedyś dawno temu - że format daty dla niektórych składników, w tym dla usługi Filtering Management Service, stosuje dawny format zapisu daty YYMMDDHHmm, co oznacza, że 1 stycznia 2022 to inaczej 2201010000. Data jest trzymana w zmiennej typu long o szerokości 32-bitowej, a LONG_MAX to 2147483647. Oczywiście, taka wartość maksymalna nie ma sensu nawet we francuskim kalendarzu rewolucyjnym, faktem pozostaje jednak, że wytrzymałość zmiennej long kończy się w roku 2021.
Dziennik zdarzeń rapotuje awarię skanera warstwy systemu plików (FIP-FS) o nazwie "Microsoft", wołanego przez exchange'owego agenta Antimalware Agent. Skaner ulega awarii ("Can't convert "2201010001" to long."), co kładzie usługę filtrującą (to ciekawe!), a gdy obiekt nie przejdzie przez całą kolejkę, jest uznawany za nieprzetworzony i ląduje w kolejce - która rośnie.
Rozwiązaniem jest wstrzymanie działania modułu antywirusowego w Exchange'u, co oznacza że w 2022 rozwiązaniem w dalszym ciągu bywa "wyłącz antywirusa". Powinno to zdumiewać, choć źródłem zamieszania jest problem o wiele poważniejszy: format daty nieodporny na przyszłość. Jest to dość elementarny błąd, a obecny jest nawet w najnowszym Exchange 2019.
Poprawki jeszcze nie ma.