Bug 26182 - Отказ подсистемы печати (spoolss) при наличии кириллицы в имени принтера
Summary: Отказ подсистемы печати (spoolss) при наличии кириллицы в имени принтера
Status: CLOSED WONTFIX
Alias: None
Product: Branch p6
Classification: Distributions
Component: samba (show other bugs)
Version: не указана
Hardware: all Linux
: P3 normal
Assignee: Nobody's working on this, feel free to take it
QA Contact: QA p6
URL:
Keywords:
Depends on:
Blocks: 26742
  Show dependency tree
 
Reported: 2011-08-28 11:34 MSK by Alex Moskalenko
Modified: 2019-03-25 10:40 MSK (History)
3 users (show)

See Also:


Attachments
log самбы с log level = 10 (5.63 KB, application/x-bzip)
2011-08-28 11:34 MSK, Alex Moskalenko
no flags Details
Версии пакетов и вывод testparm на работающей машине (5.1) (1.91 KB, text/plain)
2011-08-29 09:58 MSK, Alex Moskalenko
no flags Details
Версии пакетов и вывод testparm на НЕработающей машине (p6) (1.72 KB, text/plain)
2011-08-29 09:58 MSK, Alex Moskalenko
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alex Moskalenko 2011-08-28 11:34:46 MSK
Created attachment 5072 [details]
log самбы с log level = 10

При наличии символов кириллицы в имени принтера (попытка переименовать принтер на самбе из Windows) происходит отказ подсистемы печати.

Лог на стороне самбы:
[2011/08/26 13:08:42.282189,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(5): Bad character conversion
[2011/08/26 13:08:42.282356,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(5): Bad character conversion
[2011/08/26 13:08:42.282378,  0] rpc_server/srv_pipe.c:2439(api_rpcTNP)
  api_rpcTNP: \spoolss: SPOOLSS_GETPRINTER failed.
[2011/08/26 13:08:42.334397,  1] smbd/ipc.c:447(api_fd_reply)
  api_fd_reply: INVALID PIPE HANDLE: 3578
[2011/08/26 13:08:42.354360,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(5): Bad character conversion
[2011/08/26 13:08:42.354435,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(5): Bad character conversion
[2011/08/26 13:08:42.354453,  0] rpc_server/srv_pipe.c:2439(api_rpcTNP)
  api_rpcTNP: \spoolss: SPOOLSS_GETPRINTER failed.
[2011/08/26 13:12:23.181281,  1] smbd/service.c:1251(close_cnum)
  management-vm (192.168.4.124) closed connection to service print$
[2011/08/26 13:12:25.742662,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(5): Bad character conversion
[2011/08/26 13:12:25.742831,  1] ../librpc/ndr/ndr.c:421(ndr_push_error)
  ndr_push_error(4): ndr_push_relative_ptr2_end:relative_end_offset 0 < offset 
112
[2011/08/26 13:12:25.742854,  0] rpc_server/srv_pipe.c:2439(api_rpcTNP)
  api_rpcTNP: \spoolss: SPOOLSS_GETPRINTER failed.

Настройки кодировок в smb.conf:
dos charset = CP866
unix charset = UTF8
display charset = UTF8

Проблема проявляется на самбе версий 3.5.8, 3.5.9, 3.5.10, 3.6.0 из архивов сизифа и на 3.5.10 из p6. При этом 3.5.8-alt1, собранная из src.rpm в окружении 5.1, проблем не вызывает.

Для возвращения в рабочее состояние требуется перезапуск smbd с удалением ntprinters.tdb.
Comment 1 Alex Moskalenko 2011-08-28 11:40:14 MSK
Наблюдение:

Система p6, samba 3.5.10-alt2

Имя принтера "HP P1505 у закупщиков" приводит к неработоспособности spoolss.
Имя принтера "PH P1505 у за-купщиков" НЕ приводит к неработоспособности spoolss.

Закономерности вывести не удается - на других принтерах помогает замена одного или двух кириллических символов на латиницу или "-" помогает избежать отказа подсистемы печати. Вот только понять логику в определении порядкового номера и количества подлежащих замене символов мне не удалось...
Comment 2 AEN 2011-08-28 21:25:03 MSK
Интересно, в какой кодировке название принтера у Windows и в каком виде оно передается. Судя по всему, отлуп дает обычный iconv , самба тут бессильна.
И сравните настройки систем на p6 и 5.1.
Comment 3 Alex Moskalenko 2011-08-29 09:58:24 MSK
Created attachment 5073 [details]
Версии пакетов и вывод testparm на работающей машине (5.1)
Comment 4 Alex Moskalenko 2011-08-29 09:58:57 MSK
Created attachment 5074 [details]
Версии пакетов и вывод testparm на НЕработающей машине (p6)
Comment 5 Alex Moskalenko 2011-08-29 10:08:06 MSK
Насколько я знаю, Windows использует unicode (UTF16LE в нотации iconv). Тестовый файл со строкой "HP P1505 у закупщиков", созданный в Windows в кодировке unicode, корректно обрабатывается iconv на всех системах (командная строка cat test.txt | iconv -f utf16le -t utf8).

Подскажите пожалуйста, что еще можно посмотреть в настройках системы. Готов тестировать, так как очень заинтересован в решении этой проблемы - планировал переход на p6 на нескольких серверах, использующих самбу и кириллические имена принтеров.
Comment 6 AEN 2011-08-29 10:23:04 MSK
(В ответ на комментарий №5)
> Насколько я знаю, Windows использует unicode (UTF16LE в нотации iconv).
> Тестовый файл со строкой "HP P1505 у закупщиков", созданный в Windows в
> кодировке unicode, корректно обрабатывается iconv на всех системах (командная
> строка cat test.txt | iconv -f utf16le -t utf8).
> 
> Подскажите пожалуйста, что еще можно посмотреть в настройках системы. Готов
> тестировать, так как очень заинтересован в решении этой проблемы - планировал
> переход на p6 на нескольких серверах, использующих самбу и кириллические имена
> принтеров.

Надо смотреть в google, там много на 'ndr_push_error(5): Bad character conversion' .
К сожалению, мейнтейнер samba появится через неделю.
Comment 7 Alex Moskalenko 2011-08-29 12:12:12 MSK
Спасибо, будем ждать майнтейнера. У меня мысли закончились. Без знания кода samba похоже не разобраться.

Логика работы/отказа мне совершенно не ясна. Имена "Принтер HP P1505 у закупщиков", "P1505 у закупщиков", "HP P1505 у за-купщиков", "H P1505 у закупщиков", "HPP1505 у закупщиков" не вызывают проблем, а "HP P1505 у закупщиков", "Принтер у закупщиков", "HP  1505 у закупщиков" - рушат подсистему печати.

Для проверки пробовал установить RPM самбы от 5.1 (которые в 5.1 работают), на p6. Включая libtdb и libtalloc. Не помогло. Бинарники, совпадающие по md5, работают на 5.1 и не работают на p6.
Comment 8 Alex Moskalenko 2011-09-14 13:18:44 MSK
Уважаемый мейнтейнер samba и другие уважаемые люди, знающие код samba!

Подскажите пожалуйста, эта проблема не может ли всплыть где-нибудь в другом месте, кроме имени принтера? Например, при печати с клиента Windows какого-либо задания с русским именем, имени шары или ее комментария, содержащего кириллицу. 

Хотелось бы понять, можно ли использовать 6 платформу как надежный файловый сервер/сервер печати. Если проблема только в имени принтера, то ее можно обойти, не используя кириллицу (хотя конечно костыль тот еще), но если возможно ее проявление например на заданиях печати с кириллицей в имени...
Comment 9 Vitaly Kuznetsov 2011-09-14 23:45:43 MSK
Я, к сожалению, пока не добрался до построения стенда для дебага данной проблемы. С заданиями на печать (чисто теоретически) ситуация должна быть иная. Надо смотреть.
Comment 10 Lenar Shakirov 2011-10-17 00:02:36 MSK
Извините, не совсем понятно, вы подключаете сетевой принтер с линукс машины на windows по smb, и переименовываете уже настроенный?

Может тогда попробовать избавится от самбы, настроив печать с windows на linux по ipp?
http://social.technet.microsoft.com/Forums/en-US/w7itproui/thread/f5e69f33-29ff-4c86-a7ed-3b066f0b642d

Не забудьте подкрутить /etc/cups/cupsd.conf дабы разрешить печать по сети.
Comment 11 Alex Moskalenko 2011-10-19 11:29:51 MSK
(В ответ на комментарий №10)
> Извините, не совсем понятно, вы подключаете сетевой принтер с линукс машины на
> windows по smb, и переименовываете уже настроенный?
Я подключаю принтер на линукс-машине с Windows-машины. Для подключения использую samba, установленную на линукс-машине, с установленными драйверами принтера для Windows и настроенными разрешениями для Windows. Изначально (на линукс-машине в printers.conf cupsа или smb.conf) принтер имеет имя prn-hp-p1505. После переименования его с windows-клиента в желаемое имя "Принтер HP P1505 у закупщиков" получаем полный отказ подсистемы печати в samba. Про возможности обойти это знаю - например, отказ от использования кириллицы в имени принтера проблему решает. Покоя не дают две вещи - то, что одни и те же бинарники РАБОТАЮТ на p5.1 и НЕ РАБОТАЮТ на p6, и отсутствие уверенности в том, что подобные проблемы с кириллицей не вылезут где-нибудь еще.

На всякий случай - действия по шагам. Все происходит с Windows-клиента.

1. Открываем Проводник.
2. В адресной строке вводим имя линукс-машины с самбой и принтерами (\\server).
3. Заходим в папку "Принтеры и факсы" на \\server.
4. Правой кнопкой по нужному принтеру в списке - Переименовать.
5. Переименовываем принтер в "Принтер HP P1505 у закупщиков".

В результате получаем отказ spoolss с приведенной выше диагностикой. Вернуть самбу в рабочее состояние можно удалением соответствующих tdb-файлов.
Comment 12 Alex Moskalenko 2019-03-25 10:40:01 MSK
Устарело