[samba] Ошибка чтения пустого каталога
Oleg Gints
oleg на cec.amur.elektra.ru
Чт Апр 1 07:14:29 MSD 2004
Alexander Bokovoy пишет:
>>Samba-3.0.2a-alt8.M22
>>Клиент WIN ME, при чтении ПУСТОГО каталога получаем ошибку:
>>
>>L:\>cd 1234
>> L:\1234>dir
>>
>> Том в устройстве L имеет метку DISK K
>> Содержимое папки L:\1234
>>
>>. <ПАПКА> 31.03.04 13:43 .
>>.. <ПАПКА> 31.03.04 14:06 ..Ошибка 161
>>
>>L:\1234>
>>
>>FAR на этом месте выдает "Указанное имя неверно. Не удается прочесть
>>содержимое папки"
>>
>>Просматривая пакеты с помощью ethereal видно,
>>что 161 ошибку самба выдает после получения
>>запроса:
>>Trans2 Request, FIND_NEXT2, Continue: ..
>>
>>По логам:
>>[2004/03/31 14:28:03, 10] lib/util.c:dump_data(1864)
>> [000] 00 00 01 04 00 04 01 00 00 00 00 00 00 2E 00 2E ........ ........
>> [010] 00 00 00 ...
>>[2004/03/31 14:28:03, 3] smbd/process.c:switch_message(685)
>> switch message SMBtrans2 (pid 9067)
>>[2004/03/31 14:28:03, 4] smbd/uid.c:change_to_user(186)
>> change_to_user: Skipping user change - already user
>>[2004/03/31 14:28:03, 3] smbd/error.c:error_packet(134)
>> error packet at smbd/trans2.c(1171) cmd=50 (SMBtrans2) eclass=1 ecode=161
>>
>>Под XP такой ошибки нет, но там запросы другие.
>>
>>Интересно, эта ошибка еще у кого-нибудь наблюдается?
>
> Не видел. Интересно, не связано ли это с тем же источником, который
> создает проблему и при использовании smbfs в 2.4? Там тоже ошибка в
> обработке TRANS2, правда в коде smbfs.
Разобрался в чем дело, только как корректно исправить ситуацию - не знаю.
Дело связано с изменениями в trans2.c:
функция call_trans2findnext
if (total_params < 12)
return(ERROR_DOS(ERRDOS,ERRinvalidparam));
*mask = *directory = *resume_name = 0;
- srvstr_pull(inbuf, resume_name, params+12, sizeof(resume_name),
-1, STR_TERMINATE);
+ srvstr_get_path(inbuf, resume_name, params+12,
sizeof(resume_name), -1, STR_TERMINATE, &ntstatus);
+ if (!NT_STATUS_IS_OK(ntstatus)) {
+ return ERROR_NT(ntstatus);
+ }
DEBUG(3,("call_trans2findnext: dirhandle = %d, max_data_bytes =
%d, maxentries = %d, \
Ощибка происходит при вызове srvstr_get_path (файл reply.c)
в которой далее вызывается функция check_path_syntax(dest, tmppath)
В качестве параметра передается строка 0x2E 0x2E \0, т.е. то,
что было запрошено со сторны клиента Win ME - FIND_NEXT2("..")
if ((s[0] == '.') && (s[1] == '.') && (IS_DIRECTORY_SEP(s[2]) || s[2] ==
'\0'))
успешно эту стороку отлавливает, и далее срабатывает это условие
if (d == destname) {
return NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
}
и клиент получает ошибку 161 - неверное имя каталога.
Осталось выяснить, исправлена ли эта ситуация в последней версии
самбы.
--
С уважением,
Олег Гинц
Подробная информация о списке рассылки Samba