View Issue Details

IDProjectCategoryView StatusLast Update
0003306Far ManagerFile Systempublic2016-09-20 07:45
Reportervirus174 Assigned ToDrKnS  
PriorityhighSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Platformx64OSWindowsOS Version2008 R2
Product Version3.0 
Fixed in Version3.0 
Summary0003306: Некорректная работа с сетевыми папками и файлами
DescriptionДобрый день.
Проблема выявлена и в ночных и в стабильных ветках far3.
В Far2 проблемы нет.
Затрагивает сразу несколько категорий, поэтому обобщил указал File System. Вообще, в итоге, сказывается, на просмотре, копировании, редактировании, и т.д.
При работе с сетевой папкой из RDP сессии с русскими именами файлов и каталогов они содержат лишение символы с кодом 0 в конце.
Steps To ReproduceУсловия для воспроизведения проблемы на моем примере:
1. Подключаюсь по RDP клиентом rdesktop к серверу где установлен FarManager. На ПК с которого подключаюсь стоит Ubuntu 16.04.
2. В терминальной сессии открываем сетевую папку расшаренную через терминальную сессию
Сперва команда net:tsclient
Затем выбираем нужный каталог.

Когда заходим в каталог с русским названием появляются проблемы. Не просматривает и не копирует любый файлы. Не заходит в любые подкаталоги.
Additional InformationСуть проблемы легко определяется, в командной строке путь отображается как будто с лишними пробелами между последним символом и символом > означающим окончание пути. Но это не пробелы. Если скопировать в буфер название каталога и вставить в файл то видно что
то символы с кодом 0. Соответственно неверно формируется имя каталогов и файлов. При открытии файла в каталоге с русским названием просмотровщик вверху показывает только название каталога. После 0 путь обрезается и файл фактически не открывается. По той же причине не работает копирование и др. операции с файлами.
При этом только в верхней части панелей отображается корректное имя каталога без лишних символов в конце.
TagsNo tags attached.
Build4793

Activities

DrKnS

2016-09-17 10:30

administrator   bugnote:0014770

На ПК с которого подключаюсь стоит Ubuntu 16.04

virus174
Если подключаетесь с ПК, на котором стоит Windows - воспроизводится?
Выглядит как очередные глюки самбы.

virus174

2016-09-18 09:11

reporter   bugnote:0014772

Last edited: 2016-09-18 09:12

В понедельник попробую, дома нет ПК под Winows. но думаю там все ОК окажется. И самба тут не причем. При работе с шарами проброшенными через терминальную сессию samba не участвует, скорее тут работа со строками не так реализована. То что отдается список файлов в UTF-8.
Я тут нашел еще баг в FTP (http://bugs.farmanager.com/view.php?id=3293)
Возможно корни у них одни и те же

В понедельник отпишусь. Заодно сделаю тест с альтtрнативного клиента на Ubunte FreeRDP

virus174

2016-09-19 05:16

reporter   bugnote:0014773

Last edited: 2016-09-19 05:27

В итоге выявлено:
1. при подключении с ОС Windows по RDP проблем не выявлено
2. при подключении с ОС Ubuntu c помощью xfreerdp проблем не выявлено
3. проблема выявлена только при работе через терминальный клиент rdesktop (Стоит версия 1.8.3) при этом, через штатный Windows Explorer файлы отображаются корректно, точно также в Far2. Проблема именно в связке rdesktop+far3

Поправки к первому посту. Вверху панели путь отображается тоже с лишними символами.

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

Попробовал через processmonitor оттрейсить, там названия подкаталогов отображаются корректно.

DrKnS

2016-09-19 08:17

administrator   bugnote:0014774

https://github.com/rdesktop/rdesktop/blob/master/disk.c#L1284

[quote=disk.c]out_uint32_le(out, 2 * strlen(pdirent->d_name) + 2); /* unicode length */
[/quote]
Эти джентльмены отдают длину имени файла в байтах как 2 * "длина имени файла в UTF-8 в байтах" + 2.

Да, это будет работать для английских имён. И только для них.

Для всех остальных такая длина будет показывать куда-то в космос.

Строку надо переводить из UTF-8 в UCS-2 и передавать её длину в байтах.

virus174

2016-09-19 10:14

reporter   bugnote:0014775

Т.е. в Far3 не будет патча который обойдет такой кривой говнокод (как в rdesktop), просто обреза нули в конце?
Rdesktop уже больше года билдов не выпускает.

2useven10

2016-09-19 11:12

developer   bugnote:0014776

> Rdesktop уже больше года билдов не выпускает.
FreeRDP (remmina) ?

DrKnS

2016-09-19 11:51

administrator   bugnote:0014777

Last edited: 2016-09-19 16:33

Такой патч в Far уже был, иначе вы не смогли бы работать даже с английскими именами - обратите внимание, что они там отдают не просто длину, а длину с учётом завершающего \0.
Аналогично поступал sharepoint (т. е. msdn не умеют читать даже в microsoft), поэтому far такой единичный \0 игнорировал.

В более других приложениях это работает, т. к. они разрешают ОС нормализовывать имена. При этом эти нули обрезаются за кадром, как и всякие точки и пробелы. Far для поддержки длинных путей и нестандартных имён эту нормализацию не использует. они используют FindFirstFile[Ex] и строка помещается в буфер фиксированного размера WIN32_FIND_DATA.cFileName[MAX_PATH], т. е. длина явно не передаётся и клиент считает её сам. Far же использует NtQueryDirectoryFile, которая возвращает указатель на строку и длину строки.

Я обобщил вышеописанный хак и теперь должны игнорироваться все \0 в конце имени. Возможно, распоследняя ночная сборка будет работать.

Однако, как вы правильно отметили, это говнокод. Работающий только потому, что звёзды сошлись.
Даже если вдруг заработает, я рекомендую присмотреться к более другим клиентам.

virus174

2016-09-19 12:28

reporter   bugnote:0014778

DrKnS
> Я обобщил вышеописанный хак и теперь должны игнорироваться все \0 в конце имени. Возможно, распоследняя ночная сборка будет работать.

Огромное спасибо

2useven10
> FreeRDP (remmina) ?

У меня под рукой 2 инструмента. Но чаще пользуюсь rdesktop. В одном одни удобные фишки в другом другие. Их бы скрестить. Рабочее место админа у которого сотни серверов и куча работы настроено так что все под рукой и оптимизировано на скорость, как GUI так и в командной строке aliases. Сейчас по сути останавливает от полного перехода на xfreerdp только отсутствие опции убрать шапку окна и некорректная работа ключа /workarea, по крайней мере под MATE. Плюс еще несколько неудобств по мелочам, типа необходимость ручками сбрасывать ~/.freerdp/known_hosts. Если случается авария иногда счет идет на секунды

virus174

2016-09-20 04:21

reporter   bugnote:0014779

Все работает, спасибо

DrKnS

2016-09-20 07:44

administrator   bugnote:0014780

Написал им, обещали починить.

Issue History

Date Modified Username Field Change
2016-09-17 06:52 virus174 New Issue
2016-09-17 10:30 DrKnS Note Added: 0014770
2016-09-18 09:11 virus174 Note Added: 0014772
2016-09-18 09:12 virus174 Note Edited: 0014772
2016-09-19 05:16 virus174 Note Added: 0014773
2016-09-19 05:27 virus174 Note Edited: 0014773
2016-09-19 08:17 DrKnS Note Added: 0014774
2016-09-19 10:14 virus174 Note Added: 0014775
2016-09-19 11:12 2useven10 Note Added: 0014776
2016-09-19 11:51 DrKnS Note Added: 0014777
2016-09-19 11:52 DrKnS Assigned To => DrKnS
2016-09-19 11:52 DrKnS Status new => feedback
2016-09-19 12:28 virus174 Note Added: 0014778
2016-09-19 12:28 virus174 Status feedback => assigned
2016-09-19 16:33 DrKnS Note Edited: 0014777
2016-09-20 04:21 virus174 Note Added: 0014779
2016-09-20 07:44 DrKnS Note Added: 0014780
2016-09-20 07:45 DrKnS Build => 4793
2016-09-20 07:45 DrKnS Status assigned => closed
2016-09-20 07:45 DrKnS Resolution open => fixed
2016-09-20 07:45 DrKnS Fixed in Version => 3.0