5.1 Descripción de LDIF

LDIF es un formato de archivo muy utilizado que describe la información de directorio o las operaciones de modificación que se pueden realizar en un directorio. LDIF es completamente independiente del formato de almacenamiento utilizado en cualquier implementación de directorio específica; normalmente se utiliza para exportar información de directorio e importar datos en servidores LDAP.

El formato LDIF suele ser fácil de generar. Esto hace posible el uso de herramientas como awk o perl para mover datos de un formato exclusivo a un directorio LDAP. También puede escribir guiones para generar datos de prueba en formato LDIF.

5.1.1 Formato de archivo LDIF

Las importaciones de la utilidad ICE de NetIQ requieren archivos con formato LDIF 1. Estas son las reglas básicas para un archivo LDIF 1:

  • La primera línea sin comentario debe ser la versión: 1.

  • Después de la versión, sigue una serie de uno o varios registros.

  • Los registros se componen de campos (un campo por línea).

  • Las líneas están separadas por una línea nueva o por un par retorno de carro/línea nueva.

  • Los registros están separados por una o varias líneas en blanco.

  • Existen dos tipos distintos de registros LDIF: registros de contenido y registros de cambios. Un archivo LDIF puede contener un número ilimitado de registros, pero todos deben ser del mismo tipo. No se pueden mezclar registros de contenido y registros de cambios en el mismo archivo LDIF.

  • Las líneas que empiecen por el signo de almohadilla (#) son comentarios y se omiten al procesar el archivo LDIF.

5.1.2 Registros de contenido LDIF

Un registro de contenido LDIF representa el contenido de una entrada completa. A continuación se proporciona un ejemplo de archivo LDIF con cuatro registros de contenido:

 1  version: 1
 2  dn: c=US
 3  objectClass: top
 4  objectClass: country
 5  
 6  dn: l=San Francisco, c=US
 7  objectClass: top
 8  objectClass: locality
 9  st: San Francisco
10
11 dn: ou=Artists, l=San Francisco, c=US
12 objectClass: top
13 objectClass: organizationalUnit
14 telephoneNumber: +1 415 555 0000
15 
16 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
17 sn: Michaels
18 givenname: Peter
19 objectClass: top
20 objectClass: person
21 objectClass: organizationalPerson
22 objectClass: iNetOrgPerson
23 telephonenumber: +1 415 555 0001
24 mail: Peter.Michaels@aaa.com
25 userpassword: Peter123
26

Este archivo LDIF se compone de las siguientes partes:

Componente

Descripción

Especificador de versión

La primera línea de un archivo LDIF contiene la versión. Se admiten cero o varios espacios entre los dos puntos y el número de versión, que actualmente está ajustado en 1.

Si falta la línea de versión, cualquier aplicación que procese el archivo LDIF puede asumir que la versión del archivo es 0. También es posible que el archivo LDIF se rechace como sintácticamente incorrecto. Las utilidades de NetIQ que procesan LDIF asumen que la versión de un archivo es 0 cuando falta la línea de versión.

Especificador de nombre completo

La primera línea de cada registro de contenido (líneas 2, 6, 11 y 16 en el ejemplo anterior) especifica el DN de la entrada que representa.

El especificador de DN debe tomar una de las dos formas siguientes:

  • dn: safe_UTF-8_distinguished_name

  • dn: nombre_completo_codificado_en_Base64

Delimitadores de línea

El separador de línea puede ser un avance de línea o un par retorno de carro/avance de línea. Esto resuelve una incompatibilidad común entre los archivos de texto de Linux y Solaris, que utilizan un salto de línea como separador de línea, y MS-DOS * y los archivos de texto de Windows, que utilizan un par retorno de carro/avance de línea como separador de línea.

Delimitadores de registro

Las líneas en blanco (líneas 5, 10, 15 y 26 en el ejemplo anterior) se usan como delimitadores de registro.

Todos los registros de un archivo LDIF, incluido el último registro, deben terminar con un delimitador de registro (una o varias líneas en blanco). Aunque algunas implementaciones aceptarán de forma silenciosa un archivo LDIF sin un delimitador de registro de terminación, la especificación LDIF lo requiere.

Especificador de valor de atributo

Todas las demás líneas de un registro de contenido son especificadores de valor. Los especificadores de valor deben tomar una de las tres formas siguientes:

  • Descripción de atributo: valor

  • Descripción de atributo: valor_codificado_en_Base64

  • Descripción de atributo: < dirección URL

5.1.3 Registros de cambios LDIF

Los registros de cambios LDIF contienen las modificaciones que deben realizarse en un directorio. En un registro de cambios LDIF se puede representar cualquiera de las operaciones de actualización LDAP (añadir, suprimir, modificar y modificar DN).

Los registros de cambios LDIF utilizan el mismo formato para el especificador de nombre completo, el especificador de valor de atributo y el delimitador de registro que los registros de contenido LDIF. (Consulte la Registros de contenido LDIF para obtener más información.) La presencia de un campo changetype es lo que distingue a un registro de cambios LDIF de un registro de contenido LDIF. Los campos changetype identifican la operación especificada por el registro de cambios.

Los campos changetype pueden tomar una de las cinco formas siguientes:

Formulario

Descripción

changetype: add

Una palabra clave que indica que el registro de cambios especifica una operación de añadir LDAP.

changetype: delete

Una palabra clave que indica que el registro de cambios especifica una operación de suprimir LDAP.

changetype: moddn

Una palabra clave que indica que el registro de cambios especifica una operación de modificar DN LDAP si el procesador LDIF está enlazado con el servidor LDAP como un cliente de versión 3, o una operación de modificar RDN si el procesador LDIF está enlazado con el servidor LDAP como un cliente de versión 2.

changetype: modrdn

Sinónimo del tipo de cambio moddn.

changetype: modify

Una palabra clave que indica que el registro de cambios especifica una operación de modificar LDAP.

Tipo de cambio de adición

Un registro de cambios de adición tiene el mismo aspecto que un registro de cambios de contenido (consulte la sección Registros de contenido LDIF), donde el campo changetype: add aparece inmediatamente antes de los campos de valor de atributo.

Todos los registros deben ser del mismo tipo. No se pueden mezclar registros de contenido y registros de cambios.

 1 version: 1
 2 dn: c=US
 3 changetype: add
 4 objectClass: top
 5 objectClass: country
 6 
 7 dn: l=San Francisco, c=US
 8 changetype: add
 9 objectClass: top
10 objectClass: locality
11 st: San Francisco
12
14 dn: ou=Artists, l=San Francisco, c=US
15   changetype: add
16 objectClass: top
17 objectClass: organizationalUnit
18 telephoneNumber: +1 415 555 0000
19 
20 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
21 changetype: add
22 sn: Michaels
23 givenname: Peter
24 objectClass: top
25 objectClass: person
26 objectClass: organizationalPerson
27 objectClass: iNetOrgPerson
28 telephonenumber: +1 415 555 0001
29 mail: Peter.Michaels@aaa.com
30 userpassword: Peter123
31

Tipo de cambio de supresión

Los registros de cambios de supresión especifican la supresión de una entrada, por lo que los únicos campos necesarios para un registro de cambios de supresión son el especificador de nombre completo y un tipo de cambio de supresión.

A continuación se proporciona un ejemplo de archivo LDIF utilizado para suprimir las cuatro entradas que crea el archivo LDIF, tal como se muestra en la sección Tipo de cambio de adición.

IMPORTANTE:Para suprimir las entradas añadidas anteriormente, invierta el orden de las entradas. Si no lo hace, se produce un error en la operación de supresión porque las entradas de contenedor no están vacías.

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: delete
 4
 5 dn: ou=Artists, l=San Francisco, c=US
 8   changetype: delete
 9
10 dn: l=San Francisco, c=US
11 changetype: delete
12
13 dn: c=US
14 changetype: delete
15

Tipo de cambio de modificación

El tipo de cambio de modificación le permite especificar la adición, supresión y sustitución de los valores de atributo de una entrada que ya existe. Las modificaciones toman una de las tres formas siguientes:

Elemento

Descripción

add: tipo de atributo

Una palabra clave que indica que los siguientes especificadores de valor de atributo para el tipo de atributo deben añadirse a la entrada.

delete: tipo de atributo

Una palabra clave que indica que los valores del tipo de atributo se suprimirán. Si el campo de supresión va seguido de especificadores de valor de atributo, se suprimen los valores dados.

Si el campo de supresión no va seguido de ningún especificador de valor de atributo, se suprimen todos los valores. Si el atributo no tiene valores, se producirá un error en esta operación, pero se obtendrá el efecto deseado porque el atributo no tenía ningún valor que suprimir.

replace: tipo de atributo

Una palabra clave que indica que los valores del tipo de atributo se sustituirán. Los especificadores de valor de atributo que sigan al campo de sustitución se convertirán en los nuevos valores del tipo de atributo.

Si el campo de sustitución no va seguido de ningún especificador de valor de atributo, el conjunto de valores actual se sustituye por un conjunto de valores vacío (lo cual hace que el atributo se elimine). A diferencia del especificador de modificación de supresión, si el atributo no tiene valores, la sustitución se realizará correctamente. El efecto neto es el mismo en ambos casos.

A continuación se proporciona un ejemplo de tipo de cambio de modificación que añade un número de teléfono adicional a la entrada cn=Peter Michaels.

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: modify
 4 # add the telephone number to cn=Peter Michaels
 4 add: telephonenumber
 5 telephonenumber: +1 415 555 0002
 6

Del mismo modo que puede combinar una mezcla de modificaciones en una sola petición LDAP, puede especificar varias modificaciones en un único registro LDIF. Una línea que solo contiene el carácter de guión (-) se utiliza para marcar el final de las especificaciones de valor de atributo de cada especificador de modificación.

El siguiente archivo LDIF de ejemplo contiene una mezcla de modificaciones:

 1 version: 1
 2
 3 # An empty line to demonstrate that one or more
 4 # line separators between the version identifier 
 5 # and the first record is legal.
 6
 7 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 8 changetype: modify
 9 # Add an additional telephone number value.
10 add: telephonenumber
11 telephonenumber: +1 415 555 0002
12 -
13 # Delete the entire fascimiletelephonenumber attribute.
14 delete: facsimileTelephoneNumber
15 -
16 # Replace the existing description (if any exists) 
17 # with two new values.
18 replace: description
19 description: guitar player
20 description: solo performer
21 -
22 # Delete a specific value from the telephonenumber 
23 # attribute.
24 delete: telephonenumber
25 telephonenumber: +1 415 555 0001
26 -
27 # Replace the existing title attribute with an empty 
28 # set of values, thereby causing the title attribute to 
29 # be removed.
30 replace: title
31 -
32

El tipo de cambio de modificación de DN

El tipo de cambio de modificación de DN permite renombrar una entrada, moverla o ambas cosas. Este tipo de cambio se compone de dos campos obligatorios y un campo opcional.

Campo

Descripción

newrdn (obligatorio)

Especifica el nombre nuevo de la entrada que se asignará al procesar este registro. El especificador nuevo RDN debe tomar una de las dos formas siguientes:

  • newrdn: nombre_completo_relativo_UTF 8_seguro

  • newrdn: nombre_completo_relativo_codificado_en_Base64

El especificador nuevo RDN es necesario en todos los registros LDIF que tengan un tipo de cambio de modificación de DN.

deleteoldrdn (obligatorio)

El especificador RDN antiguo de supresión es un indicador que indica si el RDN antiguo se debe sustituir por newrdn o mantener. Toma una de las dos formas siguientes:

  • deleteoldrdn: 0

    Indica que se debe mantener el valor de RDN antiguo en la entrada después de que se renombre.

  • deleteoldrdn: 1

    Indica que se debe suprimir el valor de RDN antiguo cuando se renombra la entrada.

newsuperior (opcional)

El especificador nuevo superior proporciona el nombre del nuevo padre que se asignará a la entrada al procesar el registro de modificación de DN. El especificador nuevo superior debe tomar una de las dos formas siguientes:

  • newsuperior: nombre_completo_UTF-8_seguro

  • newsuperior: nombre_completo_codificado_en_Base64

El especificador nuevo superior es opcional en los registros LDIF que tienen un tipo de cambio de modificación de DN. Solo se da en los casos en los que se desea cambiar el padre de la entrada.

A continuación se proporciona un ejemplo de tipo de cambio de modificación de DN que muestra cómo renombrar una entrada:

 1 version: 1
 2 
 3 # Rename ou=Artists to ou=West Coast Artists, and leave
 4 # its old RDN value.
 5 dn: ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: ou=West Coast Artists
 8 deleteoldrdn: 1
 9

A continuación se proporciona un ejemplo de tipo de cambio de modificación de DN que muestra cómo mover una entrada:

 1 version: 1
 2
 3 # Move cn=Peter Michaels from 
 4 # ou=Artists,l=San Francisco,c=US to 
 5 # ou=Promotion,l=New York,c=US and delete the old RDN.
 5 dn: cn=Peter Michaels,ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: cn=Peter Michaels
 8 deleteoldrdn: 1
 9 newsuperior: ou=Promotion,l=New York,c=US
10

A continuación se proporciona un ejemplo de tipo de cambio de modificación de DN que muestra cómo mover una entrada y renombrarla al mismo tiempo:

 1 version: 1
 2
 3 # Move ou=Promotion from l=New York,c=US to
 4 # l=San Francisco,c=US and rename it to 
 5 # ou=National Promotion.
 5 dn: ou=Promotion,l=New York,c=US
 6 changetype: moddn
 7 newrdn: ou=National Promotion
 8 deleteoldrdn: 1
 9 newsuperior: l=San Francisco,c=US
10

IMPORTANTE:La operación de modificación de RDN de LDAP 2 no admite el movimiento de entradas. Si intenta mover una entrada utilizando la sintaxis newsuperior de LDIF con un cliente LDAP 2, se producirá un error en la petición.

5.1.4 Saltos de línea en archivos LDIF

Para introducir un salto de línea en un archivo LDIF, basta con insertar un separador de línea (una línea nueva o un par retorno de carro/línea nueva) seguido de un espacio en el lugar donde desee cambiar de línea. Cuando el analizador LDIF encuentra un espacio al principio de una línea, sabe que debe concatenar el resto de los datos de la línea con los datos de la línea anterior. Entonces el espacio de la izquierda se descarta.

No se deben introducir saltos de línea en medio de un carácter UTF-8 multibyte.

A continuación se proporciona un ejemplo de archivo LDIF con un salto de línea (véanse las líneas 13 y 14):

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 sn: Michaels
 4 givenname: Peter
 5 objectClass: top
 6 objectClass: person
 7 objectClass: organizationalPerson
 8 objectClass: iNetOrgPerson
 9 telephonenumber: +1 415 555 0001
10 mail: Peter.Michaels@aaa.com
11 userpassword: Peter123
12 description: Peter is one of the most popular music
13  ians recording on our label. He’s a big concert dr
14  aw, and his fans adore him.
15

5.1.5 Representación de la contraseña con hash en archivos LDIF

La contraseña con hash se representa como datos base64 en el archivo LDIF. El nombre de atributo userpassword debe ir seguido del nombre del cifrado utilizado para la creación del hash de la contraseña. Este nombre debe encerrarse entre un par de corchetes “{}”, tal como se muestra a continuación:

Ejemplo 1

Para contraseñas con hash SHA:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SHA}xcbdh46ngh37jsd0naSFDedjAS30dm5 objectclass: inetOrgPerson

Ejemplo 2

Para contraseñas con hash SSHA:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SSHA}sGs948DFGkakdfkasdDF34DF4dS3skl5DFS5 objectclass: inetOrgPerson

Ejemplo 3

Para contraseñas con hash Digest MD5:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {MD5}a45lkSDF234SDFG62dsfsf2DG2QEvgdmnk4305 objectclass: inetOrgPerson