Se o seu log está se entupindo de mensagens como esta abaixo, então esta dica vai te cair como uma luva. O procedimento foi realizado em um sistema Debian com LDAP 2.4, mas com alguns pequenos ajustes você poderá executá-lo em qualquer distribuição
Feb 14 12:30:59 ldapserver slapd[9274]: <= bdb_equality_candidates: (uid) not indexed Feb 14 12:10:19 ldapserver slapd[9274]: <= bdb_equality_candidates: (mail) not indexed │
Estas mensagens são registradas quando alguma aplicação tenta fazer uma consulta a sua árvore LDAP mas o atributo que está sendo usado como critério não está indexado, nos casos acima uid e mail.
Para reindexar é rápido, mas a configuração, embora simples não é nada amigável, envolvendo inclusive uma parada no serviço slap.d. Segue então o procedimento.
Parar o serviço de diretórios:
# service slapd stop
Editar o arquivo de configuração, onde adicionaremos os índices:
# vim /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{1\}hdb.ldif
Com este arquivo aberto em seu editor de textos, procure pela linha similar a seguinte:
olcDbIndex: objectClass eq
Logo abaixo dela adicione uma linha igual a esta para cada um dos atributos que seu sistema está reclamando. No meu caso eu adicionaria as duas linhas a seguir:
olcDbIndex: uid eq olcDbIndex: mail eq
ATENÇÃO! Alterar este arquivo pode danificar integralmente o seu LDAP então certifique-se de não ter alterado nenhuma outra linha além destas que você quer incluir. Se estiver tudo OK salve o arquivo.
Agora vamos refazer todos índices:
# slapindex -F /etc/ldap/slapd.d/
O comando acima não deveria ser executado como root e por isso, você deverá receber uma mensagem de alerta sobre a possibilidade de que o slapd poderá não subir. Para evitar surpresas vamos corrigir a posse dos arquivos novamente:
# chown -R openldap:openldap /var/lib/ldap
E agora sim poderemos iniciar o serviço de diretórios novamente:
# service slapd start
Seu sistema deverá estar no ar novamente e as mensagens de atributo não indexados não deverão mais existir para estes atributos.
DICA DE SEGURANÇA
Como dito antes este procedimento pode ser arriscado e danificar sua base, então antes de fazê-lo verifique se o seu backup está em dia.
Um “backup quente” da base é suficiente para te salvar de qualquer problema, então se não tiver um, após parar o serviço execute os seguintes comandos para conseguir um backup funcional que poderá te salvar de muitas dores de cabeça:
service slapd stop ; cd / ; tar czf ldap-beforeindex.tgz /var/lib/ldap /etc/ldap ; service slapd start ;
Com esta cópia você poderá seguir adiante. Caso algo dê errado, apague as pastas /var/lib/ldap e /etc/ldap restaure o seu backup antes de subir o slapd novamente:
service slapd stop ; cd / ; rm /var/lib/ldap/* rm -rf /etc/ldap/* tar xzf ldap-beforeindex.tgz service slapd start ;
Usando o service ao invés do systemctl? &;-D
E por que não? Ele funciona nos principais sistemas de inicialização usados pelas distros atuais e mesmo algumas mais “antiguinhas” (talvez nem todas, claro) ! 😀
Mas, sim, você pode usar o systemctl se sentir-se mais confortável. Só esteja atento que a sintaxe do systemctl e do service, são invertidas.
Os comandos systemctl start slapd e systemctl stop slapd fazem o mesmo efeito, respectivamente, que service slapd start e service slapd stop.