LDIF

De Astillas.net


Enlaces y referencias

Usos y finalidades

Este formato de archivo tiene varios propósitos en un directorio LDAP:

  1. Construir la estructura inicial del directorio.
  2. Añadir registros en masa al directorio.
  3. Restaurar un directorio.
  4. Archivar un directorio (exportando su contenido).
  5. Aplicar modificaciones en masa a un directorio.

Formato

Los archivos LDIF son archivos de texto plano que pueden crearse y mantenerse con editores de texto sencillos y en casi cualquier sistema operativo dado que las líneas pueden terminar con el carácter <LF> o la combinación <CR><LF>.

Las líneas pueden ser de varios tipos:

Directiva
Comienza en la columna 1 de la línea con cualquier carácter exceptuando el espacio en blanco y la almohadilla (#).
De continuación
Es una línea que aparece a continuación de una línea de directiva y comienza en la primera columna con un espacio en blanco. Los siguientes caracteres se asumen como continuación de la línea anterior (la de la directiva) y pueden existir tantas líneas de este tipo como longitud sea capaz de almacenar el atributo.
En blanco
Son aquellas que están vacías y no contienen ningún otro carácter exceptuando los que correspondan al final de la misma. Se emplean normalmente para separar secuencias de entradas.
Comentarios
Líneas que contienen el carácter almohadilla (#) en la primera columna.
De separación
Contienen un guión en la primera columna y se usan normalmente para terminar secuencias de operación.

Sobre las secuencias citadas podemos añadir que:

Secuencias de entradas
Son un grupo de directivas que se aplican a una entrada en el directorio. Generalmente comienzan y terminan con una línea en blanco, siendo la directiva dn: la que señala el comienzo de las mismas, aunque esto es más una convención que una regla estricta.
Secuencias de operación
Constituyen grupos de directivas usadas para añadir, modificar, borrar y mover entradas en el directorio.

A tener en cuenta ...

... cuando se trabaja con archivos LDIF.

  • Existe un factor de peso en el tipo de servidor LDAP y su correspondiente versión para dar por válido un archivo LDIF, lo que quiere decir que es posible que se necesiten retoques en el contenido al transportar o cambiar de servidor.
  • La directiva version no es estrictamente necesaria y actualmente sólo contiene el valor uno (1), pero es una buena práctica incluirla en todos los archivos por si en el futuro no es compatible o se necesitan validaciones más estrictas.
  • Los comentarios se crean únicamente con un carácter # en la primera columna; cualquier otra cosa no se considera como tal.
  • Debe existir al menos una línea en blanco entre secuencias de entradas (las que comienzan con dn:).
  • Es vital que exista un espacio en blanco tras cada carácter dos puntos (:).

objectclass: top

¿ Es necesario incluir toda la jerarquía de clases a la que pertenece una entrada cuando se carga ésta en un directorio ?

Pongamos por ejemplo la creación de una entrada de clase inetOrgPerson en un directorio como el siguiente:

dn:cn=Victor Moral,ou=people,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Victor Moral
sn: Moral
mail: victor@example.com
ou: weapons
....

Si tenemos en cuenta que la clase inetOrgPerson desciende de la clase organizationalPerson y ésta de la clase person que a su vez lo hace de top, ¿ no estamos dando más información de la necesaria ?

He visto bastantes referencias que sugieren que no, que es necesario hacerlo para una carga correcta de la entrada, pero la explicación de la gente de zytrax.com es la que más me convence porque alegan lo siguiente:

  1. La definición de una clase incluye su relación en la jerarquía (de quién desciende).
  2. El servidor LDAP debe conocer de antemano todos los esquemas y, por tanto, todas las clases y sus relaciones.
  3. El servidor LDAP puede calcular por sí mismo dicha jerarquía y evitar errores de escritura (si ésta se hace a mano).
  4. Incluir todas las clases a las que pertenece una entidad por herencia puede resultar confuso porque parece que viola la regla de que sólo puede pertenecer a una clase de tipo estructural.

Sin embargo no existe una respuesta definitiva; algunos servidores LDAP como OpenLDAP versión 2.x+ cargarán sin problemas la siguiente definición:

dn:cn=Victor Moral,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: Victor Moral
sn: Moral
street: querol, 6
ou: weapons
....

deduciendo él solito tanto la jerarquía como los atributos heredados. En este caso hablamos del atributo street que está definido en organizationalPerson y que hereda inetOrgPerson.

Eso sí, parece ser que también se tiene que ser precavido con esta práctica porque en caso de exportar la entrada del ejemplo anterior en el mismo formato existen servidores LDAP que retornarán justamente esas líneas. Como existen servidores LDAP que no procesan automáticamente la jerarquía de clases se pueden producir resultados inesperados al recargar dichas entradas.