¿Existe alguna solución genérica para usar una sola biblioteca NSS dos (o más) veces?
En mi caso, tengo dos servidores LDAP, uno local en la máquina y otro remoto. Necesito hacer que NSS funcione con ambos (usa el remoto si local no tiene entradas requeridas).
Actualmente se resolvió de modo que la biblioteca única ( PADL / nss_ldap ) se compila dos veces. En ambos casos, antes de construir sed
se usa para cambiar todas las nss_ldap
ocurrencias en las fuentes a otra cosa. Para cada caso se usa un texto diferente (como nss_ldap_1
y nss_ldap_2
). El resultado de la compilación se renombra en consecuencia. Ambos binarios se almacenan en el sistema de destino y se hace referencia a ellos /etc/nsswitch.conf
.
Además, ambas bibliotecas usan diferentes archivos de configuración /etc/
(de lo contrario, ¡no tendría sentido!). Sin embargo, esto se hace fácilmente simplemente cambiando el argumento en el configure
script de la biblioteca ejecutada antes de construir.
Pero no "se siente bien". ¿Hay algún otro enfoque?
Lo que podría imaginar es que la propia biblioteca NSS podría admitir múltiples configuraciones para que funcione como dos "instancias únicas". Pero esto es difícil de lograr si no eres autor de la biblioteca. También requiere la invocación posterior de la biblioteca para ambas configuraciones, mientras que uno podría preferir tener alguna otra biblioteca en el medio.
Otro enfoque sería escribir un reenviador simple que simplemente llame a alguna otra biblioteca con una configuración diferente. Pero esto nuevamente requiere que otra biblioteca sea reconfigurable de alguna manera (si solo usa algunos archivos de configuración fijos en /etc
el reenviador funcionará igual que la primera versión). Y también funciona solo una vez: para que una biblioteca se use tres veces o más, el mismo problema vuelve ahora con el reenviador.
sss
?Respuestas:
Desafortunadamente, no puede hacer esto con la implementación NSS de GNU libc. Notó el problema fundamental, solo permítame presentarlo desde un ángulo diferente: la
nsswitch.conf
sintaxis no permite proporcionar ninguna información adicional a los módulos de servicio NSS, por lo que de todos modos no podrían comportarse de manera diferente en invocaciones repetidas. Por lo tanto, no es compatible desde el lado de la libc ni desde el lado del módulo. Por otra parte, glibc hace que un punto de mantenimiento de los módulos de servicio directamente objetos enlazable compartidos, que excluye cualquier engaño vinculación.Lo que puede hacer en su lugar es crear un metadirectorio a partir de sus dos directorios LDAP y usarlo en su configuración de NSS. OpenLDAP lo admite muy bien, consulte la
slapd-meta(5)
página del manual o esta introducción de fusión, por ejemplo. Por supuesto, no necesita una nuevaslapd
instancia para esto si puede configurar cualquiera de los dos.(Y en lugar de
nss-ldap
usarnss-ldapd
si puedes).fuente