Existe alguma solução genérica para usar uma única biblioteca NSS duas (ou mais) vezes?
No meu caso, tenho dois servidores LDAP, um local na própria máquina e um remoto. Preciso fazer o NSS funcionar com os dois (ele usa o remoto se o local não tiver entradas necessárias).
Atualmente, foi resolvido para que a biblioteca única ( PADL / nss_ldap ) seja compilada duas vezes. Nos dois casos, antes da construção sed
é usada para alterar todas as nss_ldap
ocorrências nas fontes para outra coisa. Para cada caso, um texto diferente é usado (como nss_ldap_1
e nss_ldap_2
). O resultado da construção é renomeado de acordo. Ambos os binários são armazenados no sistema de destino e mencionados em /etc/nsswitch.conf
.
As duas bibliotecas também usam arquivos de configuração diferentes /etc/
(caso contrário, não faria sentido!). No entanto, isso é feito facilmente, apenas alterando o argumento no configure
script da biblioteca executado antes da compilação.
Mas não "parece certo". Existe alguma outra abordagem?
O que eu poderia imaginar é que a própria biblioteca NSS poderia suportar várias configurações para que funcionasse como duas "instâncias únicas". Mas isso é difícil de conseguir se você não for o autor da biblioteca. Também requer a invocação subsequente da biblioteca para ambas as configurações, enquanto um pode preferir ter alguma outra biblioteca no meio.
Outra abordagem seria escrever um encaminhador simples que apenas chame alguma outra biblioteca com configuração diferente. Mas isso novamente exige que outra biblioteca seja reconfigurável de alguma forma (se ela usar apenas alguns arquivos de configuração fixos no /etc
encaminhador funcionará exatamente como a primeira versão). E também funciona apenas uma vez - para que uma biblioteca seja usada três vezes ou mais, o mesmo problema retorna agora com o próprio encaminhador.
sss
?Respostas:
Infelizmente, você não pode fazer isso com a implementação NSS do GNU libc. Você percebeu o problema fundamental, deixe-me apresentá-lo de um ângulo diferente: a
nsswitch.conf
sintaxe não permite fornecer informações adicionais aos módulos de serviço do NSS; portanto, eles não poderiam se comportar de maneira diferente em invocações repetidas. Portanto, ele não é suportado pelo lado da libc nem pelo lado do módulo. Além disso, a glibc faz questão de manter os módulos de serviço vinculados diretamente aos objetos compartilhados, o que exclui qualquer truque de vinculação.O que você pode fazer é criar um meta-diretório a partir dos seus dois diretórios LDAP e usá-lo na sua configuração do NSS. O OpenLDAP suporta isso muito bem, consulte a
slapd-meta(5)
página do manual ou esta introdução de mesclagem, por exemplo. É claro que você não precisa de uma novaslapd
instância para isso, se você pode configurar um dos dois.(E, em vez de
nss-ldap
usar,nss-ldapd
se puder.)fonte