Seguindo Referrals do OpenLDAP com PHP
Autor/fonte: Daniel Bojczuk
E-mail/Url: http://www.dicas-l.com.br/dicas-l/20100202.php
Tags: [ openldap ]
A utilização do LDAP é muito útil em vários contextos, tornando interessante a implementação de sistemas que automatizem ou facilitem seu uso. Uma das linguagens de programação que permite o desenvolvimento desses sistemas é o PHP, que desde sua versão 4 tem um modulo para LDAP.
Surgiu a necessidade de desenvolver um sistema para interagir com dois servidores OpenLDAP trabalhando com Sync Repl. Toda leitura de dados deveria ser realizado no servidor SLAVE e a escrita no servidor MASTER. Utilizar dois endereços de servidores LDAP tornaria o código complexo e confuso, esse é um dos casos que é necessáraio trabalhar com referrals. "Um referral é uma informação retornada por um servidor LDAP que indica ao cliente que outros servidores precisam ser contactados para que a requisição inicial seja preenchida."(http://gtdir.inf.puc-rio.br/distribuicao.htm).
Por padrão o PHP segue os referrals, mas eu estava com um problema: quando o OpenLDAP retornava um referral, ao fazer a requisição ao servidor indicado (chamaremos o servidor indicado pelo referral de MASTER) o PHP autenticava como anônimo (não enviava os dados de autenticação que enviou ao primeiro servidor) e assim não tinha permissão para efetuar requisição.
Solução
Para resolver o problema era necessário que o PHP refizesse a autenticação (bind) e também outros procedimentos como: iniciar TLS e configurar para utilizar a versão 3 do protocolo. Para isso é preciso utilizar a função ldap_set_rebind_proc antes de fazer o bind. Essa função determina o nome da função a ser chamada quando o PHP seguir um referral, ou seja, logo após o PHP se conectar com o servidor MASTER.
No exemplo abaixo, eu defino a função bind_function que serve para autenticar tanto no primeiro servidor quanto no MASTER. Esta função inicia o TLS (ldap_start_tls...), configura o php para utilizar a versão 3 do protocolo (ldap_set_option...) e faz a autenticação (ldap_bind...).
A função que será chamada para se autenticar no servidor indicado no referral tem que ter 2 parâmetros:
É isso... qualquer sugestão/dúvida é só entrar em contado.
Surgiu a necessidade de desenvolver um sistema para interagir com dois servidores OpenLDAP trabalhando com Sync Repl. Toda leitura de dados deveria ser realizado no servidor SLAVE e a escrita no servidor MASTER. Utilizar dois endereços de servidores LDAP tornaria o código complexo e confuso, esse é um dos casos que é necessáraio trabalhar com referrals. "Um referral é uma informação retornada por um servidor LDAP que indica ao cliente que outros servidores precisam ser contactados para que a requisição inicial seja preenchida."(http://gtdir.inf.puc-rio.br/distribuicao.htm).
Por padrão o PHP segue os referrals, mas eu estava com um problema: quando o OpenLDAP retornava um referral, ao fazer a requisição ao servidor indicado (chamaremos o servidor indicado pelo referral de MASTER) o PHP autenticava como anônimo (não enviava os dados de autenticação que enviou ao primeiro servidor) e assim não tinha permissão para efetuar requisição.
Solução
Para resolver o problema era necessário que o PHP refizesse a autenticação (bind) e também outros procedimentos como: iniciar TLS e configurar para utilizar a versão 3 do protocolo. Para isso é preciso utilizar a função ldap_set_rebind_proc antes de fazer o bind. Essa função determina o nome da função a ser chamada quando o PHP seguir um referral, ou seja, logo após o PHP se conectar com o servidor MASTER.
No exemplo abaixo, eu defino a função bind_function que serve para autenticar tanto no primeiro servidor quanto no MASTER. Esta função inicia o TLS (ldap_start_tls...), configura o php para utilizar a versão 3 do protocolo (ldap_set_option...) e faz a autenticação (ldap_bind...).
<?
/* inicia conexão com o LDAP */
$ldap=ldap_connect("servidorldap.exemplo.com");
/*função que será chamada para fazer o bind e o rebind*/
function bind_function($resource, $ldap_url = '') {
ldap_start_tls($resource);
ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($resource,"cn=admin,dc=exemplo,dc=com",'senha');
}
/*configura o PHP para executar a função bind_function quando seguir o referral*/
ldap_set_rebind_proc($ldap,"bind_function");
/*executa a função bind_function para fazer o bind no primeiro servidor*/
bind_function($ldap);
?>
A função que será chamada para se autenticar no servidor indicado no referral tem que ter 2 parâmetros:
- $resource: Será o link criado com o novo servidor;
- $ldap_url: O endereço do novo servidor obtido no Referral.
É isso... qualquer sugestão/dúvida é só entrar em contado.

Enviado por xKuRt em 04/02/2010 às 08:24
Avaliação
Esta publicação ainda não foi avaliada!
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).
Envio de comentário:
Quinta, 09 de Setembro de 2010
Área restrita
Leitura recomendada
Últimas publicações
Top 5 membros
- dddweb213 pts
- Jotah191 pts
- fbinasco165 pts
- andersonop153 pts
- fredbcn117 pts
Últimos membros cadastrados
- andytsunamiem 09/09
- Sanmylem 09/09
- eb210em 09/09



