вторник, 18 ноября 2008 г.

rdesktop и длинные имена файлов

Было дело, создал я около года назад свой дистрибутив Linux. Свой дистрибутив конечно громко сказано - за основу взял пакеты Debian, пересобрал ядро, удалил лишнее, организовал процесс загрузки как мне нужно. Так получился дистрибутив Linux Micro RDP Client. Как следует из его названия, единственное его предназначение - соединение по RDP протоколу с сервером, и предоставление удаленного рабочего стола юзверю. Создание своего дистрибутива было вызвано необходимостью. Ранее на предприятие, где я тружусь поставлялись тонкие клиенты Ниеншанса с очень удобным и простым дистрибутивом NNZ Linux. Но появился в поле видимости другой поставщик с тонкими клиентами - Depo. Есессенно с более выгодной ценой, и более интересными машинками. Но вот только в качестве операционки они использовали PIXES - весьма неудобоваримый для пользователя и тугой в настройке для админа дистрибутив. Сторонние дистрибутивы либо не обладали достаточным функционалом, либо стоили денег (пусть даже небольших, но все равно жалко ;) ).
С какими трудностями я столкнулся в процессе создания дистрибутива - отделая история, ибо всяческих нюансов, тонкостей, и просто граблей я хапнул давольно-таки не мало (да и по большому счету до сих пор хватаю - разработка до сих пор не закрыта, а в качестве бетатестеров сидят работники немаленького предприятия ;) )

Итак, ближе к теме.
Наткнулся на такой баг - при редиректе флешки посредством инструменов rdesktop в рабочее пространство пользователя на сервере (флешка появляется как подключеный сетевой диск), у некоторых пользователей система напроч отказывается читать некоторые каталоги (даже корневой). Ругается что устройство отключено, или что нет прав. Выяснилось что проблема в длинных именах файлов: почему-то не перевариваются имена более 126 символов. Понятно что скорее всего где-то в rdesktop стоит ограничение или может просто элементарная ошибка.
К счастью для пользователей (кодер из меня не ахти, да и времени жаль, да еще и лень разбираться ;) ) в инете наткнулся на багзилу АльтЛинукса, где люди весьма успешно борются с данной проблемой.
Все решение проблемы уложилось в последовательность действий: скачка патча, наложение патча, сборка, собирание призов от пользователей :)
Кстати, эту проблему я встретил в rdesktop 1.5.0, однако для свежей на данный момент версии 1.6.0 проблема осталась актуальной.

PS: Сам патч шоб не потерять:
--- rdesktop.orig/disk.c 2008-02-16 03:13:25 +0300
+++ rdesktop/disk.c 2008-07-04 14:13:52 +0400
@@ -1201,8 +1201,8 @@
out_uint32_le(out, filestat.st_size); /* filesize low */
out_uint32_le(out, 0); /* filesize high */
out_uint32_le(out, file_attributes);
-   out_uint8(out, 2 * strlen(pdirent->d_name) + 2); /* unicode length */
-   out_uint8s(out, 7); /* pad? */
+   out_uint16(out, 2 * strlen(pdirent->d_name) + 2); /* unicode length */
+   out_uint8s(out, 6); /* pad? */
out_uint8(out, 0); /* 8.3 file length */
out_uint8s(out, 2 * 12); /* 8.3 unicode length */
rdp_out_unistr(out, pdirent->d_name, 2 * strlen(pdirent->d_name));

Комментариев нет: