Pull to refresh

Маааленький баг с локалью в ftpd во FreeBSD

Reading time 2 min
Views 1.2K
Давным давно столкнулся с проблемой когда ни один из клиентов, типа Filezilla, Far FTP Plugin, Far Navigator и другие, не может отобразить содержимое каталогов при подключении к серверу.
FAR FTP Plugin ругается на что не может отпарсить вывод, Filezilla показывает файлы перемешивая дату и имя файла и не даёт двигаться по каталогам.


Как оказалось ftpd наследует локаль пользователя который запускал или перезапускал демона через /etc/rc.d/ и отдаёт данные в этой локали всем клиентам которые подключаются к серверу.
Имея LANG=ru_RU.UTF-8(ru_RU.KOI8-R) и перезапустив ftpd через /etc/rc.d/ftpd restart, при подключении через штатный ftp клиент мы получаем следующую картинку.

ftp> ls test
229 Entering Extended Passive Mode (|||64671|)
150 Opening ASCII mode data connection for '/bin/ls'.
total 212
-rw-r--r-- 1 aborche wheel 15457 23 п╟п©я─ 10:51 crypttest.txt
-rw-r--r-- 1 aborche wheel 193509 29 я▐пҐп╡ 2009 falling_into_a_black_hole.jpg
drwxr-xr-x 2 aborche wheel 512 27 п╟п╡пЁ 11:36 geo
drwxr-xr-x 2 aborche wheel 512 27 п╟п╡пЁ 11:36 release
drwxr-xr-x 3 aborche wheel 512 27 п╟п╡пЁ 11:36 scripts
226 Transfer complete.

Соответственно такой же кривой вывод отдаётся и всем другим клиентам которые просто напросто не могут распарсить полученные данные. Поэтому имя файла мешается с датой или не показывается вообще ничего. Если вдруг клиент умеет полноценный UTF-8, то всё равно полученный вывод будет корректно виден в клиенте, но клиент не сможет ничего сделать с файлами.

при рестарте ftpd с LANG=C всё возвращается на круги своя.
ftp> ls test
229 Entering Extended Passive Mode (|||64395|)
150 Opening ASCII mode data connection for '/bin/ls'.
total 212
-rw-r--r-- 1 aborche wheel 15457 Apr 23 10:51 crypttest.txt
-rw-r--r-- 1 aborche wheel 193509 Jan 29 2009 falling_into_a_black_hole.jpg
drwxr-xr-x 2 aborche wheel 512 Aug 27 11:36 geo
drwxr-xr-x 2 aborche wheel 512 Aug 27 11:36 release
drwxr-xr-x 3 aborche wheel 512 Aug 27 11:36 scripts
226 Transfer complete.

Проблема в том, что стартовые скрипты не чистят значение LANG, наследуя его от текущего юзера.
Имейте это ввиду при настройке серверов.

(C) Aborche 2009
Tags:
Hubs:
+6
Comments 2
Comments Comments 2

Articles