5.1 Informações sobre o LDIF

O LDIF é um formato de arquivo usado frequentemente, que descreve as informações sobre o diretório ou as operações de modificação que podem ser executadas em um diretório. O LDIF é completamente independente do formato de armazenamento usado dentro de qualquer implementação do diretório específico e é geralmente usado para exportar informações sobre o diretório e importar dados para os servidores LDAP.

Geralmente, é fácil gerar o LDIF. Ele possibilita usar ferramentas como awk e perl para mover os dados de um formato patenteado para um diretório LDAP. Também é possível gravar scripts para gerar dados de teste no formato LDIF.

5.1.1 Formato do Arquivo LDIF

As importações do Utilitário de importação, conversão e exportação da NetIQ requerem 1 arquivo formatado. A seguir estão algumas regras básicas para um arquivo:

  • A primeira linha sem comentário deve estar na versão: 1.

  • Uma série de um ou mais registros segue a versão.

  • Cada registro é composto por campos, um campo por linha.

  • As linhas são separadas por uma nova linha ou por um par nova linha/retorno de carro.

  • Os registros são separados por uma ou mais linhas em branco.

  • Há dois tipos distintos de registros LDIF: conteúdo e mudança. Um arquivo LDIF pode conter um número ilimitado de registros, mas eles precisam ser do mesmo tipo. Você não pode misturar os registros de conteúdo e os registros de mudança no mesmo arquivo LDIF.

  • Toda linha que começa com cerquilha (#) é um comentário e é ignorada ao processar o arquivo LDIF.

5.1.2 Registros do Conteúdo do LDIF

Um registro do conteúdo do LDIF representa o conteúdo de uma entrada inteira. Veja a seguir um exemplo de um arquivo LDIF com quatro registros de conteúdo:

 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

Esse arquivo LDIF é composto pelas seguintes peças:

Componente

Descrição

Especificador de Versão

A primeira linha de um arquivo LDIF contém a versão. São permitidos nenhum ou mais espaços entre os dois pontos e o número da versão, definido atualmente para 1.

Se a linha de versão faltar, qualquer aplicativo que processar o arquivo LDIF considerará a versão do arquivo como 0. Também poderá ocorrer que o arquivo LDIF seja rejeitado como sintaticamente incorreto. Utilitários NetIQ que processam o LDIF consideram uma versão de arquivo 0 quando a linha de versão está faltando.

Especificador do Nome Exclusivo

A primeira linha de cada registro de conteúdo (linhas 2, 6, 11 e 16 no exemplo mencionado anteriormente) especifica o DN da entrada que ele representa.

O especificador DN deve ter uma das seguintes formas:

  • dn: safe_UTF-8_distinguished_name

  • dn:: Base64_encoded_distinguished_name

Delimitadores de Linha

O separador de linha pode ser uma alimentação de linha ou uma dupla de retorno de carro/alimentação de linha. Isto resolve a incompatibilidade comum entre os arquivos de texto do Linux e Solaris, que usam uma alimentação de linha como separador, e arquivos de texto MS-DOS* e Windows, que usam uma dupla de retorno de carro/alimentação de linha como separador de linha.

Delimitadores de Registro

As linhas em branco (5 ,10, 15 e 26 no exemplo mencionado anteriormente) são usadas como delimitadores de registro.

Todo registro em um arquivo LDIF que inclui o último registro deve ser finalizado com um delimitador de registro (uma ou mais linhas em branco). Embora algumas implementações aceitem passivamente um arquivo LDIF sem um delimitador de registro, a especificação do LDIF precisa dele.

Especificador do Valor do Atributo

Todas as outras linhas em um registro de conteúdo são especificadores de valor. Os especificadores de valor têm uma das três formas a seguir:

  • Descrição do atributo: value

  • Descrição do atributo:: Base64_encoded_value

  • Descrição do atributo: < URL

5.1.3 Registros de Mudança do LDIF

Os registros de mudança do LDIF contêm modificações que serão feitas em um diretório. Qualquer uma das operações de atualização do LDAP (adicionar, excluir, modificar e modificar DN) pode ser representada em um registro de mudança do LDIF.

Os registros de mudança do LDIF usam o mesmo formato para os especificadores do nome exclusivo, do valor do atributo e do delimitador de registro que os registros do conteúdo LDIF. (Consulte o Registros do Conteúdo do LDIF para obter mais informações.) A presença de um campo changetype é o que distingue um registro de mudança LDIF de um registro de conteúdo do LDIF. Um campo changetype identifica a operação especificada pelo registro de mudança.

O campo changetype pode ter uma das seguintes cinco formas:

Formulário

Descrição

changetype:adicionar

Uma palavra-chave indicando que o registro de mudança especifica uma operação de adição do LDAP.

changetype:delete

Uma palavra-chave indicando que o registro de mudança especifica uma operação de exclusão do LDAP.

changetype: moddn

Uma palavra-chave indicando que o registro de mudança especifica uma modificação do LDAP na operação DN se o processador LDIF estiver vinculado ao servidor LDAP como um cliente da versão 3 ou modificar a operação RDN se o processador LDIF estiver vinculado ao servidor LDAP como um cliente da versão 2.

changetype: modrdn

Um sinônimo do tipo de mudança moddn.

changetype:modificar

Uma palavra-chave indicando que o registro de mudança especifica uma operação de modificação do LDAP.

O Tipo de Mudança Adicionar

Um registro de adição de mudança assemelha-se a um registro de mudança de conteúdo (consulte Registros do Conteúdo do LDIF) com a adição do campo changetype: add imediatamente antes de quaisquer campos de valor do atributo.

Todos os registros devem ser do mesmo tipo. Você não pode misturar os registros do conteúdo e da mudança.

 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

O Tipo de Mudança Excluir

Como o registro de mudança excluir especifica a exclusão de uma entrada, os únicos campos necessários nesse registro são o especificador do nome exclusivo e um tipo de mudança de exclusão.

A seguir está um exemplo de um arquivo LDIF usado para excluir quatro entradas criadas por ele, mostradas em O Tipo de Mudança Adicionar.

IMPORTANTE:Para apagar entradas previamente adicionadas, inverta a ordem das entradas. Se não fizer isto, a operação de exclusão falhará devido às entradas do container não estarem vazias.

 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 Mudança Modificar

Para modificar o tipo de mudança, permite que você especifique adição, exclusão e substituição dos valores do atributo para uma entrada que já existe. As modificações têm uma das formas a seguir:

Elemento

Descrição

adicionar: tipo de atributo

Uma palavra-chave indicando que os especificadores do valor do atributo subsequente para o tipo de atributo devem ser adicionados à entrada.

excluir: tipo de atributo

Uma palavra-chave indicando que valores do tipo de atributo serão excluídos. Se o especificador do valor do atributo seguir o campo excluir, os valores especificados serão excluídos.

Se nenhum especificador do valor do atributo seguir o campo excluir, todos os valores serão excluídos. Se o atributo não tiver valores, essa operação falhará, mas o efeito desejado ainda será atingido porque o atributo não tinha valores para serem excluídos.

substituir: tipo de atributo

Uma palavra-chave indicando que os valores do tipo de atributo serão substituídos. Todos os especificadores do valor do atributo que acompanham o campo substituir tornam-se os novos valores para o tipo de atributo.

Se nenhum especificador do valor do atributo acompanhar o campo substituir, o conjunto de valores atual será substituído por um conjunto de valores vazio (que faz com que o atributo seja removido). Ao contrário da exclusão do especificador da modificação, se o atributo não tiver nenhum valor, a substituição ainda ocorrerá. O efeito em ambos os casos é o mesmo.

A seguir está um exemplo de uma modificação do change type que acrescentará um telefone adicional à 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

Da mesma maneira que você combina uma mistura de modificações em uma única solicitação de modificação LDAP, você pode especificar várias modificações em um único registro LDIF. Uma linha que contém apenas o caractere hífen (-) é usada para marcar o fim das especificações do valor do atributo para cada especificador da modificação.

O exemplo a seguir do arquivo LDIF contém uma mistura de modificações.

 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

Tipo de Mudança Modificar DN

Permite renomear uma entrada, movê-la ou ambos. Esse tipo de mudança é composta por dois campos obrigatórios e um opcional.

Campo

Descrição

newrdn (obrigatório)

Fornece o novo nome para a entrada que será atribuída durante o processamento desse registro. O novo especificador RDN deve ter uma das seguintes formas:

  • newrdn: safe_UTF-8_relative_distinguished_name

  • newrdn:: Base64_encoded_relative_ distinguished_name

O novo especificador RDN é obrigatório em todos os registros LDIF com uma modificação do tipo de mudança DN.

deletoldr (obrigatório)

A exclusão do especificador RDN antigo é um flag que indica se o RDN antigo deve ser substituído pelo newrdn ou se deve ser mantido. Ele deve ter uma das seguintes formas:

  • deleteoldrdn: 0

    Indica que o valor RDN antigo deve ser mantido na entrada depois que é renomeado.

  • deleteoldrdn: 1

    Indica que o valor RDN antigo deve ser excluído quando a entrada é renomeada.

newsuperior (opcional)

O novo especificador superior fornece o nome do novo pai que será atribuído à entrada durante o processamento da modificação do registro DN. O novo especificador superior deve ter uma das seguintes formas:

  • newsuperior: safe_UTF-8_distinguished_name

  • newsuperior:: Base64_encoded_distinguished_ name

O novo especificador superior é opcional nos registros LDIF com uma modificação do tipo de mudança DN. Ele é determinado apenas nos casos em que você queira um novo pai para a entrada.

A seguir, um exemplo de uma modificação do changetype DN que mostra como renomear uma 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 seguir, um exemplo de uma modificação do changetype DN que mostra como mover uma 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 seguir, um exemplo de uma modificação do changetype DN que mostra como mover e renomear uma entrada ao mesmo tempo:

 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:A versão 2 da modificação da operação RDN do LDAP não permite a movimentação de entrada. Se você tentar mover uma entrada usando a sintaxe newsuperior do LDIF com a versão 2 do cliente do LDAP, a solicitação falhará.

5.1.4 Incluindo uma Linha nos Arquivos LDIF

Para encerrar uma linha em um arquivo LDIF, basta inserir um separador de linha (uma nova linha ou dupla de retorno de carro/nova linha) seguido por um espaço no local onde deseja que a linha seja encerrada. Quando o analisador do LDIF encontra um espaço no início de uma linha, ele sabe como concatenar o resto dos dados na linha com os dados da linha anterior. O espaço inicial é então descartado.

Você não deve incluir linhas no meio de um caractere UTF-8 de vários bytes.

A seguir, um exemplo de um arquivo LDIF com uma linha inserida (consulte as linhas 13 e 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 Representação de senha hash em arquivos LDIF

A senha hash é representada como dados de base64 no arquivo LFID. O nome do atributo userpassword deverá ser seguido pelo nome da criptografia usada para aplicar o hash à senha. Este nome deverá ser indicado dentro de um par de chaves "{ }", como mostrado abaixo:

Exemplo 1

Para senhas 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

Exemplo 2

Para senhas 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

Exemplo 3

Para senhas 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