Есть ли общее решение использовать одну библиотеку NSS два (или более) раза?
В моем случае у меня есть два сервера LDAP, один локальный на самой машине и один удаленный. Мне нужно, чтобы NSS работал с ними обоими (он использует удаленный, если локальный не имеет необходимых записей).
В настоящее время решено, что одна библиотека ( PADL / nss_ldap ) собирается дважды. В обоих случаях перед сборкой sed
используется для изменения всех nss_ldap
вхождений в источниках на что-то другое. Для каждого случая используется другой текст (например, nss_ldap_1
и nss_ldap_2
). Результат сборки переименован соответственно. Оба двоичных файла хранятся в целевой системе и упоминаются в /etc/nsswitch.conf
.
Также обе эти библиотеки используют разные конфигурационные файлы /etc/
(иначе это не имело бы никакого смысла!). Однако это легко сделать, просто изменив аргумент в configure
скрипте библиотеки, запущенной перед сборкой.
Но это не "чувствует себя хорошо". Есть ли другой подход?
Я мог бы представить, что сама библиотека NSS может поддерживать несколько конфигураций, чтобы она работала как два «единичных экземпляра». Но этого трудно достичь, если вы не являетесь автором библиотеки. Также это требует последующего вызова библиотеки для обеих конфигураций, в то время как можно предпочесть иметь какую-то другую библиотеку между ними.
Другой подход - написать простой сервер пересылки, который просто вызывает другую библиотеку с другой конфигурацией. Но это опять-таки требует, чтобы другая библиотека была каким-то образом реконфигурируемой (если она просто использует некоторые фиксированные конфигурационные файлы в /etc
сервере пересылки, будет работать так же, как и в первой версии). И также это работает только один раз - если использовать библиотеку три раза или более, та же проблема возвращается теперь с самим форвардером.
sss
?Ответы:
К сожалению, вы не можете сделать это с NSS-реализацией GNU libc. Вы заметили фундаментальную проблему, просто позвольте мне представить ее под другим углом зрения:
nsswitch.conf
синтаксис не позволяет предоставлять какую-либо дополнительную информацию служебным модулям NSS, поэтому они в любом случае не могут вести себя по-разному при повторных вызовах. Так что это не поддерживается ни со стороны libc, ни со стороны модуля. Кроме того, Glibc делает точку сохранения модулей услуг непосредственно связываемый общие объектов, что исключает любую связывающую хитрость.Вместо этого вы можете создать мета-каталог из двух ваших каталогов LDAP и использовать его в своей конфигурации NSS. OpenLDAP прекрасно это поддерживает, см ., Например,
slapd-meta(5)
страницу руководства или вступление к слиянию . Конечно, вам не нужен новыйslapd
экземпляр для этого, если вы можете настроить любой из двух.(И вместо того, чтобы
nss-ldap
использовать,nss-ldapd
если можете.)источник