Puede que la replicación de Open Directory no funcione; aparece "Se ha superado el límite de tamaño" en slapd.log

Puede que la replicación de Open Directory no funcione. Cuando esto suceda, aparecerán entradas como la siguiente en /var/log/slapd.log

slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded
slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded

Esto puede suceder si un servidor de Open Directory se ha desactivado durante un largo periodo de tiempo, o si se crea una réplica cuando hay más de 11 000 objetos en el almacén de datos LDAP. 11 000 es el número máximo de objetos por omisión que se pueden devolver en una búsqueda.

Permite que el usuario _ldap_replicator ignore el límite de búsqueda. Esto se lleva a cabo cambiando la configuración del servidor LDAP en cada servidor de Open Directory. Ello implica la autenticación como administrador del directorio y la ejecución de determinados comandos de modificación LDAP en Terminal. Además debe conocerse la base de búsqueda, también conocida como contexto de nombres, para el servidor LDAP.

También se pueden utilizar los pasos siguientes para conseguirlo.

Primero busca la base de búsqueda del servidor LDAP

Busca la base de búsqueda del servidor LDAP. Normalmente es el nombre de dominio válido del servidor con dc= prefijado a cada etiqueta y los puntos cambiados por comas.

Por ejemplo, un servidor con nombre de host server.example.com tendría una base de búsqueda por omisión de "dc=server,dc=example,dc=com". La base de búsqueda se puede comprobar realizando una consulta en el servidor LDAP con el comando de Terminal siguiente:

ldapsearch -x -LLL -b “” -s base namingContexts

Busca la línea que contenga namingContexts y la base de búsqueda estará detrás de los dos puntos en el ejemplo de salida que aparece a continuación.

dn:
namingContexts: dc=server,dc=example,dc=com

Después obtén las credenciales de kerberos del administrador del directorio

El nombre por omisión de este usuario es diradmin, pero el nombre se podría haber cambiado cuando se creó el servidor maestro Open Directory. Esto se realiza utilizando el comando kinit en Terminal. Ejecuta el comando siguiente, sustituyendo el nombre correcto por el administrador del directorio de diradmin si fuera necesario e introduce la contraseña cuando se te pida. No hay salida.

kinit diradmin

A continuación, utiliza ldapmodify en modo interactivo en Terminal para realizar los cambios. Simplemente ejecuta lo siguiente en Terminal:

ldapmodify

Nota: Esto hará que aparezcan mensajes SASL. Después, espera por la entrada. Si se realiza correctamente, la salida SASL debería tener un aspecto similar al siguiente:

SASL/GSSAPI authentication started
SASL username: diradmin@REALM
SASL SSF: 56
SASL data security layer installed.

Modificar la configuración

Finalmente, realiza las modificaciones pertinentes en la configuración. Esto requiere que todo el texto de abajo se introduzca en la ventana de Terminal como entrada del comando ldapmodify. La base de búsqueda debe sustituirse por [search base] a continuación. También se han de eliminar los corchetes.

dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

Ahora pulsa Control-D.

Si todo se realiza correctamente, aparecerán mensajes como el siguiente.

modifying entry "olcDatabase={1}bdb,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"

Más información

   

Alternativa de script Shell

A continuación encontrarás el texto de un script shell que se puede utilizar para automatizar este proceso. Simplemente utiliza el comando kinit en el administrador de directorio como se indica anteriormente y ejecuta este script. Consulta este artículo para conocer sugerencias del editor de textos.

#!/bin/sh
nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'`
ldapmodify  <<EOF
dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

EOF
#end of script
Fecha de publicación: