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.
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.
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:
|
|
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:
|
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. |
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
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
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 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:
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:
|
|
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:
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.
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
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:
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
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
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