XLVIII. Funciones LDAP

Introducción a LDAP

LDAP es el protocolo de acceso a directorios ligero ( Lightweight Directory Access Protocol) , un protocolo usado para acceder a "Servidores de Directorio " . El directorio es una clase especial de base de datos que contiene información estructurada en forma de árbol .

El concepto es similar a la estructura de directorios de los discos duros , pero en este caso , el directorio raiz es " El Mundo " y los subdirectorios de primer nivel son los "países " . Niveles inferiores de la estructura de directorio contienen entradas para compañías , organizaciones o lugares , y en niveles aún inferiores se encuentran las entradas para la gente , y quizás de equipos informáticos y documentos .

Para referirse a un fichero en un subdirectorio del disco duro se usa algo como


/usr / local / misapps / docs

Las barras marcan cada división en la referencia al fichero , y la secuencia es leida de izquierda a derecha .

El equivalente a la referencia a un fichero en LDAP es el " distinguished name " (nombre distinguible) , abreviado como "db " . Un ejemplo de dn podría ser .


cn=Pedro Pérez,ou=Contabilidad,o=Mi Compañía,c=ES

Las comas marcan cada división en la referencia , y la secuencia se lee de derecha a izquierda . Este dn se leería como . .


country = ES organization = Mi Compañía organizationalUnit = Contabilidad commonName = Pedro Pérez



De la misma manera que no hay reglas estrictas sobre como organizar la estructura de directorios de un disco duro , un administrador de un servidor de directorio puede establecer cualquier estructura que sea útil para sus propósitos . Sin embargo hay algunos acuerdos tácitos que siempre deben seguirse . El mensaje es que no se puede escribir código para acceder un directorio si no se conoce algo de su estructura , igual que no se puede usar una base de datos sin algún conocimiento sobre lo que está disponible en ella .

Ejemplo de código completo

Recuperar informacion para todas las entradas donde el apellido empiece por " P " de un servidor de directorio , mostrando un extracto con el nombre y dirección de correo electrónico .

Ejemplo 1 . ejemplo de búsqueda LDAP

 
?php

 
/

 
/

 
La

 
secuencia

 
básica

 
para

 
trabajar

 
con

 
LDAP

 
es

 
conectar

 
,

 
autentificarse

 
,

 
/

 
/

 
buscar

 
,

 
interpretar

 
el

 
resultado

 
de

 
la

 
búsqueda

 
y

 
cerrar

 
la

 
conexión

 
.

 
echo

 
"

 
h3

 
Prueba

 
de

 
consulta

 
LDAP

 
/

 
h3

 
"

 
;

 
echo

 
"Conectando

 
..

 
."

 
;

 
$ds=ldap_connect("localhost")

 
;

 
/

 
/

 
Debe

 
ser

 
un

 
servidor

 
LDAP

 
válido

 
!

 
echo

 
"El

 
resultado

 
de

 
la

 
conexión

 
es

 
".$ds

 
.

 
"

 
p

 
"

 
;

 
if

 
($ds

 
)

 
{

 
echo

 
"Autentificandose

 
..

 
."

 
;

 
$r=ldap_bind($ds)

 
;

 
/

 
/

 
Autentificación

 
anónima

 
,

 
típicamente

 
con

 
/

 
/

 
acceso

 
de

 
lectura

 
echo

 
"El

 
resultado

 
de

 
la

 
autentificación

 
es

 
".$r

 
.

 
"

 
p

 
"

 
;

 
echo

 
"Buscando

 
(sn=P*

 
)

 
..

 
."

 
;

 
/

 
/

 
Busqueda

 
de

 
entradas

 
por

 
apellidos

 
$sr=ldap_search($ds

 
,"o=Mi

 
Compañia

 
,

 
c=ES"

 
,

 
"sn=P*")

 
;

 
echo

 
"El

 
resultado

 
de

 
la

 
búsqueda

 
es

 
".$sr

 
.

 
"

 
p

 
"

 
;

 
echo

 
"El

 
número

 
de

 
entradas

 
devueltas

 
es

 
".ldap_count_entries($ds,$sr)

 
.

 
"

 
p

 
"

 
;

 
echo

 
"Recuperando

 
entradas

 
..

 
.

 
p

 
"

 
;

 
$info

 
=

 
ldap_get_entries($ds

 
,

 
$sr)

 
;

 
echo

 
"Devueltos

 
datos

 
de

 
".$info["count"]

 
.

 
"

 
entradas

 
:

 
p

 
"

 
;

 
for

 
($i=0

 
;

 
$i

 
$info["count"]

 
;

 
$i++

 
)

 
{

 
echo

 
"dn

 
es

 
:

 
"

 
.

 
$info[$i]["dn"

 
]

 
.

 
"

 
br

 
"

 
;

 
echo

 
"La

 
primera

 
entrada

 
cn

 
es

 
:

 
"

 
.

 
$info[$i]["cn"][0

 
]

 
.

 
"

 
br

 
"

 
;

 
echo

 
"La

 
primera

 
entrada

 
email

 
es

 
:

 
"

 
.

 
$info[$i]["mail"][0

 
]

 
.

 
"

 
p

 
"

 
;

 
    }

 
echo

 
"Cerrando

 
conexión"

 
;

 
ldap_close($ds)

 
;

 
}

 
else

 
{

 
echo

 
"

 
h4

 
Ha

 
sido

 
imposible

 
conectar

 
al

 
servidor

 
LDAP

 
/

 
h4

 
"

 
;

 
}

 
?



Usando las llamadas LDAP de PHP

Es necesario conseguir y compilar la librerías cliente de LDAP ya sea del paquete ldap-3.3 de la Universidad de Michigan o del Netscape Directory SDK . También es necesario recompilar PHP con soporte LDAP activado para que la funciones LDAP de PHP funcionen .

Antes de usarse las llamadas LDAP se debe saber . .

  • El nombre o dirección del servidor de directorio que se va a usar

  • El " dn base " del servidor (la parte del directorio global contenida en ese servidor , que puede ser por ejemplo "o=Mi Compañia,c=ES" )

  • Si es necesaria contraseña para acceder al servidor ( muchos servidores ofrecen acceso de lectura para usuarios anónimos pero requieren un password para cualquier otro acceso )



La secuencia típica de llamadas LDAP suele implementarse en aplicaciones que siguen el siguiente patrón :


ldap_connect( ) / / establecer la conexión con el servidor | ldap_bind( ) / / login anónimo o autentificado | Hacer búsquedas o actualizaciones en el directorio y mostrar los resultados | ldap_close( ) / / Cerrar la conexión









Más información

Mucha información acerca de LDAP puede ser consultada en

El SDK de Netscape contiene una Guía de Programación muy útil en formato html .

Tabla de contenidos
ldap_8859_to_t61 -- Translate 8859 characters to t61 characters
ldap_add -- Añade entradas a un directorio LDAP
ldap_bind -- Autentifica en un directorio LDAP
ldap_close -- Cierra una conexión a un servidor LDAP
ldap_compare -- Compare value of attribute found in entry specified with DN
ldap_connect -- Conecta con un servidor LDAP
ldap_count_entries -- Cuenta el número de entradas de una búsqueda
ldap_delete -- Borra una entrada de un directorio
ldap_dn2ufn -- Convierte un dn al formato User Friendly Naming
ldap_err2str -- Convierte un código numérico de error LDAP en un mensaje.
ldap_errno -- Devuelve el código numérico de error para el último comando LDAP.
ldap_error -- Devuelte el mensaje de error del último comando LDAP
ldap_explode_dn -- Divide un DN en las partes que le componen
ldap_first_attribute -- Devuelte el primer atributo
ldap_first_entry -- Devuelve el identificador del primer resultado
ldap_first_reference -- Return first reference
ldap_free_result -- Libera la memoria que almacena los resultados
ldap_get_attributes -- Obtiene los atributos de una entrada de un resultado de búsqueda
ldap_get_dn -- Obtiene el DN de una entrada de un resultado
ldap_get_entries -- Obtiene todas las entradas de un resultado
ldap_get_option -- Get the current value for given option
ldap_get_values_len -- Obtiene todos los valores binarios de un atributo de una entrada
ldap_get_values -- Obtiene todos los valores de un atributo de una entrada
ldap_list -- Búsqueda Single-level (Nivel Único)
ldap_mod_add -- Añade valores de atributos
ldap_mod_del -- Borra valores de atributos
ldap_mod_replace -- Reemplaza valores de atributos
ldap_modify -- Modifica una entrada LDAP
ldap_next_attribute -- Obtiene el siguiente atributo de una entrada
ldap_next_entry -- Obtiene la siguiente entrada de un resultado
ldap_next_reference -- Get next reference
ldap_parse_reference -- Extract information from reference entry
ldap_parse_result -- Extract information from result
ldap_read -- Lee una entrada
ldap_rename -- Modify the name of an entry
ldap_search -- Busca en un arbol LDAP
ldap_set_option -- Set the value of the given option
ldap_set_rebind_proc -- Set a callback function to do re-binds on referral chasing.
ldap_sort -- Sort LDAP result entries
ldap_start_tls -- Start TLS
ldap_t61_to_8859 -- Translate t61 characters to 8859 characters
ldap_unbind -- Hace logout de un directorio LDAP