Funciones LDAP
Introducción
LDAP es el protocolo simple de acceso a directorios (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 más inferiores se encuentran las entradas para la gente, y en algunos casos equipos informáticos y documentos.
Para referirse a un archivo en un subdirectorio del disco duro se usa algo como:
/usr/local/misapps/docs
Las barras marcan cada división en la referencia al archivo, y la secuencia es leida de izquierda a derecha.
El equivalente a la referencia a un archivo en LDAP es el "distinguished name" (nombre distinguible), abreviado como "dn". 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. La conclusión es que no se pueden escribir programas para acceder a 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.
Información sobre LDAP se puede encontrar en:
Netscape SDK tiene una » Guia de programación muy buena en HTML.
Requisitos
Se necesita obtener y compilar las bibliotecas LDAP cliente de la dirección de » OpenLDAP o de » Bind9.net para poder compilar PHP con soporte LDAP.
Instalación
Para incluir el soporte de LDAP en PHP, es necesario añadir el parámetro --with-ldap[=DIR] a las opciones de configuración de la compilación de PHP, donde DIR apunta al directorio base de instalación de LDAP. Para incluir soporte de SASL, también se debe añadir la siguiente opción de compilación --with-ldap-sasl[=DIR], y además el archivo sasl.h debe existir en el sistema.
Note: Nota para los usuarios de Windows Para habilitar este módulo en entornos Windows, se deben copiar varios archivos de la carpeta DLL del directorio PHP/Win32 a la carpeta SYSTEM del sistema (que normalmente se encuentra en C:\WINNT\SYSTEM32 o C:\WINDOWS\SYSTEM). Para las versiones de PHP <= 4.2.0 se tiene que copiar el archivo libsasl.dll, para las versiones de PHP >= 4.3.0 se deben copiar los archivos libeay32.dll y ssleay32.dll.
Configuración en tiempo de ejecución
El comportamiento de estas funciones está afectado por los valores definidos en php.ini.
Nombre | Valor por defecto | Donde se cambia | Registro de cambios |
---|---|---|---|
ldap.max_links | "-1" | PHP_INI_SYSTEM |
Tipos de recursos
Esta extensión no tiene ningún tipo de recurso definido.
Constantes predefinidas
Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.
- LDAP_DEREF_NEVER (integer)
- LDAP_DEREF_SEARCHING (integer)
- LDAP_DEREF_FINDING (integer)
- LDAP_DEREF_ALWAYS (integer)
- LDAP_OPT_DEREF (integer)
- LDAP_OPT_SIZELIMIT (integer)
- LDAP_OPT_TIMELIMIT (integer)
- LDAP_OPT_PROTOCOL_VERSION (integer)
- LDAP_OPT_ERROR_NUMBER (integer)
- LDAP_OPT_REFERRALS (integer)
- LDAP_OPT_RESTART (integer)
- LDAP_OPT_HOST_NAME (integer)
- LDAP_OPT_ERROR_STRING (integer)
- LDAP_OPT_MATCHED_DN (integer)
- LDAP_OPT_SERVER_CONTROLS (integer)
- LDAP_OPT_CLIENT_CONTROLS (integer)
- LDAP_OPT_DEBUG_LEVEL (integer)
- GSLC_SSL_NO_AUTH (integer)
- GSLC_SSL_ONEWAY_AUTH (integer)
- GSLC_SSL_TWOWAY_AUTH (integer)
Ejemplos
Recuperar informacion para todas las entradas donde el apellido empiece por "P" de un servidor de directorio, mostrando un listado con el nombre y dirección de correo electrónico.
Example#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 valido!
echo "El resultado de la conexion es ".$ds."<br />";
if ($ds) {
echo "Autentificandose ...";
$r=ldap_bind($ds); // Autentificacion anonima, habitual de los
// accesos de solo lectura
echo "El resultado de la autentificacion es ".$r."<br />";
echo "Buscando (sn=P*) ...";
// Busqueda de entradas por apellidos
$sr=ldap_search($ds,"o=Mi Compania, c=ES", "sn=P*");
echo "El resultado de la busqueda es ".$sr."<br />";
echo "El numero de entradas devueltas es ".ldap_count_entries($ds,$sr)."<br />";
echo "Recuperando entradas ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Se han encontrado ".$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] ."<br /><hr />";
}
echo "Cerrando conexion";
ldap_close($ds);
} else {
echo "<h4>No ha sido posible conectarse al servidor LDAP</h4>";
}
?>
Usando las funciones LDAP de PHP
Antes de usar las funciones LDAP deben conocerse los siguientes datos...
-
El nombre o dirección del servidor de directorio que se va a usar
-
El "dn base" del servidor (la parte del directorio global que maneja ese servidor, que puede ser por ejemplo "o=Mi CompañÃa,c=ES")
-
Si es necesaria contraseña para acceder al servidor (muchos servidores ofrecen acceso de lectura para usuarios anónimos pero requieren una contraseña para cualquier otro acceso)
La secuencia tÃpica de llamadas a funciones LDAP que realizan las aplicaciones suele seguir el siguiente patrón:
ldap_connect() // establecer la conexión con el servidor | ldap_bind() // acceso anónimo o autentificado | Hacer búsquedas o actualizaciones en el directorio y mostrar los resultados | ldap_close() // cerrar la conexión
Table of Contents
- ldap_8859_to_t61 — Transforma caracteres en formato 8859 a caracteres en formato t61
- ldap_add — Añade entradas a un directorio LDAP
- ldap_bind — Autenticación en un directorio LDAP
- ldap_close — Alias of ldap_unbind
- ldap_compare — Compara un valor indicado con el valor de un atributo especificado mediante su 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 a un formato más legible
- ldap_err2str — Convertir el número de error LDAP a un mensaje de error tipo cadena
- ldap_errno — Devuelve el número de error LDAP del último comando LDAP
- ldap_error — Devuelve el mensaje de error LDAP del último comando LDAP
- ldap_explode_dn — Divide un DN en las partes que lo componen
- ldap_first_attribute — Devuelte el primer atributo
- ldap_first_entry — Devuelve el identificador del primer resultado
- ldap_first_reference — Devuelve la primera referencia
- 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 — Obtiene el valor de la opción indicada
- ldap_get_values_len — Obtiene todos los valores binarios de un atributo de una entrada de un resultado
- ldap_get_values — Obtiene todos los valores de una entrada de un resultado
- ldap_list — Búsqueda de nivel único
- ldap_mod_add — Añade valores a los 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 de un resultado
- ldap_next_entry — Obtiene la siguiente entrada de un resultado
- ldap_next_reference — Obtiene la siguiente referencia
- ldap_parse_reference — Obtiene información de la entrada de referencia
- ldap_parse_result — Obtiene información de un resultado
- ldap_read — Lee una entrada
- ldap_rename — Modifica el nombre de una entrada
- ldap_sasl_bind — Autenticarse en un directorio LDAP empleando SASL
- ldap_search — Busca en un arbol LDAP
- ldap_set_option — Establece el valor de la opción indicada
- ldap_set_rebind_proc — Indica la funció de callback a utilizar en caso de tener que volver a realizar la autenticación con el servidor.
- ldap_sort — Ordena las entradas de un resultado de búsqueda LDAP
- ldap_start_tls — Inicia TLS
- ldap_t61_to_8859 — Transforma caracteres en formato t61 a caracteres en formato 8859
- ldap_unbind — Desconectarse de un directorio LDAP