Um arquivo LDIF é:
Uma coleção de registros separados por linhas em branco.
Um mapeamento de atributos a valores.
Uma coleção de diretivas que dizem ao parser como processar a informação.
Um registro consiste de uma seqüência de linhas descrevendo uma entrada do diretório ou um conjunto de modificações em uma entrada do diretório. Ele especifica um conjunto de entradas do diretório ou um conjunto de mudanças a ser aplicado nas entradas do diretório, mas não ambos.
Existe uma relação um-para-um entre as operações LDAP que modificam o diretório (add, delete, modify e modrdn) e os tipos de registros. Essa correspondência é intencional, pois permite uma tradução direta do registro LDIF para as operações do protocolo. Mais informações sobre as operações no Apêndice D, Operações do LDAP.
A forma básica de um registro é:
#comentário
dn:distinguished name
attrdesc
:attrvalue
attrdesc
:attrvalue
A seguir está um exemplo de um arquivo LDIF.
Exemplo B.1. Arquivo LDIF
dn: dc=ime,dc=usp,dc=br objectClass: domain dc: ime dn: cn=admin,dc=ime,dc=usp,dc=br objectClass: organizationalRole objectClass: simpleSecurityObject cn: admin description: Administrador do LDAP userPassword: {CRYPT}NHiC2OYs6eym2 dn: ou=Users,dc=ime,dc=usp,dc=br objectClass: organizationalUnit ou: Users description: Usuários da organização dn: ou=Groups,dc=ime,dc=usp,dc=br objectClass: organizationalUnit ou: Groups description: Grupos do sistema
Cada registro consiste em um DN
obrigatoriamente, e uma ou mais classes de objetos e múltiplas definições de atributos. O objectClass
especifica a classe de objeto da entrada. A classe define quais atributos ou schema's são permitidos ou obrigatórios para a entrada. Os dados em um arquivo LDIF devem obedecer as regras de schema do diretório LDAP.
Agora vamos analisar alguns registros:
dn: dc=ime,dc=usp,dc=br objectClass: domain dc: ime
Esse registro define o domínio, que é a raiz da árvore de diretório.
dn: cn=admin,dc=ime,dc=usp,dc=br objectClass: organizationalRole objectClass: simpleSecurityObject cn: admin description: Administrador do LDAP userPassword: {CRYPT}NHiC2OYs6eym2
Esse registro define a entrada que será usada como administrador do diretório. A classe organizationalRole
define entradas que representam cargos desempenhados pelas pessoas em uma organização. A classe simpleSecurityObject
permite o uso de passwords por outras classes. cn
é um atributo obrigatório da classe organizationalRole
. description
é um atributo da classe organizationalRole
, que define a descrição do cargo. userPassword
é um atributo obrigatório da classe simpleSecurityObject
, que define o password da entrada.
cn
(Common Name) é um atributo usado para definir o nome (RDN) de uma entrada no diretório. Ele é bem genérico, pois seu tipo não diz nada a respeito do que representa a entrada. O atributo dc
(Domain Component) é usado para definir uma parte do nome de um domínio. Ele também pode definir o RDN de uma entrada, no exemplo, seria dc
=ime.
dn: ou=Users,dc=ime,dc=usp,dc=br objectClass: organizationalUnit ou: Users description: Usuários da organização dn: ou=Groups,dc=ime,dc=usp,dc=br objectClass: organizationalUnit ou: Groups description: Grupos do sistema
Esses registros definem duas unidades organizacionais, ou
=Users,dc
=ime,dc
=usp,dc
=br, que contém os usuários, e ou
=Groups,dc
=ime,dc
=usp,dc
=br, que contém os grupos de usuários. ou
(Organizational Unit) é um atributo da classe organizationalUnit
. Ela permite definir uma entrada como uma unidade organizacional e também é usado para definir o RDN da entrada.
Outro exemplo:
Exemplo B.2. Outro arquivo LDIF
dn: uid=barbosa,ou=Users,dc=ime,dc=usp,dc=br objectClass: account objectClass: posixAccount uid: barbosa uidNumber: 2424 gidNumber: 20000 cn: Barbosa Pinto userPassword: {CRYPT}KSC/iTKEfKm0A loginShell: /bin/bash homeDirectory: /home/barbosa/ gecos: Barbosa Pinto dn: cn=SI,ou=Groups,dc=ime,dc=usp,dc=br objectClass: posixGroup cn: SI gidNumber: 20000 description: Grupo dos usuários do SI
O primeiro registro, que é das classes account
e posixAccount
, representa um usuário Linux/Unix, e o segundo, que é da classe posixGroup
, representa um grupo Linux/Unix. Na verdade essas classes servem para definir usuário e grupo de qualquer sistema operacional que siga o padrão POSIX.
uid
(User Identification) é um atributo que é usado para definir o RDN da entrada que represente um usuário.
Esses exemplos de arquivos LDIF poderiam ser usados para importar informações de um diretório. A seguir está um exemplo que poderia ser usado para representar uma mudança a ser aplicada em uma entrada do diretório.
Exemplo B.3. Arquivo LDIF para remover usuário
dn: uid=barbosa,ou=Users,dc=ime,dc=usp,dc=br changetype: delete
A palavra-chave changetype
é usada para modificar registros existentes no diretório. changetype
recebe o valor delete, que significa que o registro cujo dn
é uid
=barbosa,ou
=Users,dc
=ime,dc
=usp,dc
=br é para ser apagado.
Trabalhar com arquivos LDIF assim como com ferramentas de linha de comando é construtivo para o aprendizado e entendimento das estruturas de dados do diretório. Porém não é muito conveniente na prática. Por isso existem várias ferramentas gráficas para isso. Mais informações no Capítulo 4, Ferramentas de gerenciamento.