nixp.ru v3.0

19 октября 2017,
четверг,
21:26:47 MSK

DevOps с компанией «Флант»
Аватар пользователя Дмитрий Шурупов
Дмитрий Шурупов написал 2 марта 2009 года в 16:31 (919 просмотров) Ведет себя как фрик; открыл 670 тем в форуме, оставил 5690 комментариев на сайте.

Столкнулся с такой проблемой…

У нас в LDAP хранятся пользователи, у каждого из которых есть по несколько uid вида username@some.domain. Стоит еще Samba, которая привязана к LDAP.

К серверу Samba 3.0 не могут подключиться клиент smbclient (3.2) и Windows Vista, потому что они не передают полностью логин (вырезают часть username, т.е. все до собаки). (smbclient 3.0 и Windows XP при этом подключаются нормально.)

Обновил сервер до Samba 3.2. Теперь к нему не может подключиться никто. Почему? На небольшой log level показывали вот такую ошибку: «init_sam_from_ldap: No uid attribute found for this user!»

После увеличения log level до 10 и прочтения этих размышлений я тоже увидел: «attribute uid has 4 values, expected only one».

Оказывается, Samba-сервер начиная с версии 3.2 не поддерживает т.н. multivalued uids (множественные значения). При этом для LDAP (OpenLDAP) такое положение вещей является нормальным.

Вопрос: что делать, чтобы люди смогли авторизоваться по Samba? В LDAP обязательно нужно оставить каждому пользователю по несколько uid.

Дмитрий Шурупов

Похоже, проблему тривиально не решить (всякий mapping на уровне NSS не предлагать :P).

Написал простейший патчик для Samba 3.2.8. Пробую собрать. О результатах доложу…

Дмитрий Шурупов

С патчиком возникли проблемы. ЗАТО Я ТУТ ТАКОЕ НАШЕЛ!

/* Our own fstrings */
/*
                  --------------
                 /              \
                /      REST      \
               /        IN        \
              /       PEACE        \
             /                      \
             | The infamous pstring |
             |                      |
             |                      |
             |      7 December      |
             |                      |
             |         2007         |
            *|     *  *  *          | *
   _________)/\\_//(\/(/\)/\//\/\///|_)_______
*/

(Исходники Samba 3.2.8, файл source/include/includes.h.)

Дмитрий Шурупов

Продолжаем этот увлекательный блог.

Пофиксил эту штуку в сервере. Теперь с smbclient 3.0 подключение проходит нормально. Но с smbclient 3.2 по-прежнему вырезается все после «@» в логине…

metal

Я так и не понял, это фича или баг?

Дмитрий Шурупов

Я так понимаю, что фича (ну, судя по коду, сие сделано специально). Не нашел подробностей и объяснений, почему так. В OpenLDAP, напомню, никто не мешает «вручать» записи по пачке uid’ов и кое-где это очень удобно; все другие сервисы к такому положению вещей относятся нормально.

Может, этого какая-нибудь совместимость с AD требует? Типа, в 3.2 же большой прогресс в этом направлении обещался…

Дмитрий Шурупов

В общем, подводя итоги этого замечательного дня, могу сказать, что сейчас требуется научить smbclient 3.2.x нормально передавать имя пользователя с «@» (до сервера Samba 3.2, судя по логам, доходит лишь кусок до «@», как было и в случае Samba 3.0). В чем здесь проблема — ума не приложу. Возможно, smbclient думает о том, что «@» является каким-то спецзнаком…

metal

Попробуй его экранировать '\@’, вдруг поможет.

Дмитрий Шурупов

А-ха-ха!! Спасибо, друг ;-)

Я пробовал smbclient с:

'username@something'

и

username\@something

Не помогало. Но сработало с твоим вариантом:

username'\@'something

При этом, что интересно, в smbclient 3.0 работало без всяких этих хитростей вообще, т.е. так:

username@something

Но! В убунтовском Nautilus по-прежнему не монтируется шара (ни под username@something, ни под username\@something). Вероятно, и он как-то по-своему интерпретирует эту «собачку». А я думал — у всего одна причина…

И с вистой надо еще отдельно разбираться. Но теперь жить стало проще и веселее.

Дмитрий Шурупов

P.S. Мой «патчик» (одна строка изменена всего) для того, чтобы Samba 3.2 дружила с ldap-записями с кучей uid’ов, лежит тут: http://shurupov.ru/pub/dev/samba/ (там же чуть поправленный gentoo ebuild для 3.2.8 — добавлено наложение этого патча).