Имеется система корпоративного бэкапа Legato Networker (да, я знаю, что ныне Legato куплено и является подразделением компании EMC). Отдельный навороченный бэкапный сервер со своей ленточной библиотекой, дисковым хранилищем и т.д., но речь не об этом. Важно то, что в состав системы корпоратичного бэкапа входят агенты под разные операционные системы, в том числе под NetWare. И при переезде с NetWare 5.1 (где у нас использовались традиционные тома) на NetWare 6.5 (с томами NSS) неожиданно выяснилось, что во время бэкапа сервер достаточно стабильно абендится. Хотя используются самые что ни на есть распоследние версии агента (SAVE.NLM/SAVEFS.NLM/NETWORKR.NLM), операционки (NW6.5sp8) и постфиксы на операционку.
Методом последовательных приближений удалось вычислить, что абенды происходят примерно в одном и том же месте, а именно - во время бэкапа определённых файлов. Если их исключить из бэкапа, то он проходит дальше (и, возможно, абендится уже на других файлах). Все проблемные файлы не имеют ничего примечательного внутри, но обладают общим свойством: они имеют достаточно длинный полный путь (считая все промежуточные каталоги) и содержат, кроме английских, буквы национальных алфавитов (в нашем случае - русские или латышские).
В результате выяснилось следующее. Тома NSS имеют ограничение на полный путь имени файла (считая все промежуточные директории, имена тома и сервера, а также символы-разделители между ними) - не более 255 символов. Это документировано, например, здесь и здесь. Однако, разработчики легатовского софта, видимо, посчитали, что символ - это всегда байт, и выделили у себя какой-то буфер из расчёта, что полный путь не будет превышать 255 байтов. NetWare и в самом деле не позволяет создать на томе файл с полным путём длиннее 255 символов; но проблема в том, что имена файлов хранятся в UTF-8, а в этой кодировке кириллица (русские) и европейские не-ASCII (в том числе латышские) символы кодируются двумя байтами каждый. В результате происходит элементарное переполнение буфера (как нам ответил инженер из Novell, прислав анализ коредампа), и как результат - абенд.
Отправились теперь за поддержкой к тем, кто нам продал Legato (договор на техподдержку есть). Но они нам честно ответили, что разработчик уже давно прекратил дальнейшее развитие агента для NetWare (оно, кстати, и заметно - внутри модулей все копирайты за 2005-й год, хотя сами файлы датированы апрелем 2008-го). Поэтому надежды на то, что что-то поправят (хотя баг - налицо) весьма призрачны.
