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