From 0e0cf2ebb35bc4dcb5a44dff423d64a211d62a01 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 23 Sep 2015 11:20:05 +0200 Subject: [PATCH] * [MOD] Modified LDAP behaviour when no group is set --- inc/Auth.class.php | 42 +++++++++++++++++++----------------------- inc/Base.php | 2 +- inc/Ldap.class.php | 29 +++++++++++++++++++++++------ 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/inc/Auth.class.php b/inc/Auth.class.php index d0c90727..fa32e5bd 100644 --- a/inc/Auth.class.php +++ b/inc/Auth.class.php @@ -62,19 +62,11 @@ class Auth } $userDN = Ldap::$ldapSearchData[0]['dn']; - // Mapeo de los atributos - $attribsMap = array( - 'groupMembership' => 'group', - 'memberOf' => 'group', - 'displayname' => 'name', - 'fullname' => 'name', - 'mail' => 'mail', - 'lockoutTime' => 'expire'); // Realizamos la conexión con el usuario real y obtenemos los atributos try { Ldap::ldapBind($userDN, $userPass); - $attribs = Ldap::getLDAPAttr($attribsMap); + $attribs = Ldap::getLDAPAttr(); } catch (\Exception $e) { return ldap_errno(Ldap::getConn()); } @@ -84,26 +76,30 @@ class Auth return 701; } - // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del usuario - if (isset($attribs['group'])) { - if (is_array($attribs['group'])) { - foreach ($attribs['group'] as $group) { - if (is_int($group)) { - continue; - } + if (Ldap::getLdapGroup() !== '*') { + // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del usuario + if (isset($attribs['group'])) { + if (is_array($attribs['group'])) { + foreach ($attribs['group'] as $group) { + if (is_int($group)) { + continue; + } - // Comprobamos que el usuario está en el grupo indicado - if (self::checkLDAPGroup($group)) { - $ldapGroupAccess = true; - break; + // Comprobamos que el usuario está en el grupo indicado + if (self::checkLDAPGroup($group)) { + $ldapGroupAccess = true; + break; + } } + } else { + $ldapGroupAccess = self::checkLDAPGroup($attribs['group']); } + // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del grupo } else { - $ldapGroupAccess = self::checkLDAPGroup($attribs['group']); + $ldapGroupAccess = (Ldap::searchUserInGroup($userDN) || LdapADS::searchADUserInGroup($userLogin)); } - // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del grupo } else { - $ldapGroupAccess = (Ldap::searchUserInGroup($userDN) || LdapADS::searchADUserInGroup($userLogin)); + $ldapGroupAccess = true; } if ($ldapGroupAccess === false) { diff --git a/inc/Base.php b/inc/Base.php index 63a7ecc2..02647571 100644 --- a/inc/Base.php +++ b/inc/Base.php @@ -27,7 +27,7 @@ define('MODEL_PATH', __DIR__); define('CONTROLLER_PATH', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'web'); define('VIEW_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'themes'); define('EXTENSIONS_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'ext'); -define('DEBUG', true); +define('DEBUG', false); require MODEL_PATH . DIRECTORY_SEPARATOR . 'Init.class.php'; diff --git a/inc/Ldap.class.php b/inc/Ldap.class.php index b0066a58..10a4db75 100644 --- a/inc/Ldap.class.php +++ b/inc/Ldap.class.php @@ -46,6 +46,23 @@ class Ldap private static $_bindPass; private static $_ldapGroup; + // Mapeo de los atributos + private static $_attribsMap = array( + 'groupMembership' => 'group', + 'memberOf' => 'group', + 'displayname' => 'name', + 'fullname' => 'name', + 'mail' => 'mail', + 'lockoutTime' => 'expire'); + + /** + * @return mixed + */ + public static function getLdapGroup() + { + return self::$_ldapGroup; + } + /** * @return mixed */ @@ -70,10 +87,10 @@ class Ldap * Comprobar la conexión al servidor de LDAP. * * @param string $ldapServer con la dirección del servidor - * @param string $bindDN con el usuario de conexión - * @param string $bindPass con la clave del usuario de conexión + * @param string $bindDN con el usuario de conexión + * @param string $bindPass con la clave del usuario de conexión * @param string $searchBase con la base para las búsquedas - * @param string $ldapGroup con el grupo con los usuarios de acceso + * @param string $ldapGroup con el grupo con los usuarios de acceso * @return false|int Con el número de entradas encontradas */ public static function checkLDAPConn($ldapServer, $bindDN, $bindPass, $searchBase, $ldapGroup) @@ -123,7 +140,7 @@ class Ldap /** * Realizar la autentificación con el servidor de LDAP. * - * @param string $userDN con el DN del usuario + * @param string $userDN con el DN del usuario * @param string $userPass con la clave del usuario * @throws \Exception * @return bool @@ -313,11 +330,11 @@ class Ldap /** * Obtener los atributos del usuario. * - * @param array $attribs con los atributos a obtener * @return array con los atributos disponibles y sus valores */ - public static function getLDAPAttr($attribs) + public static function getLDAPAttr() { + $attribs = self::$_attribsMap; $res = array(); foreach (self::$ldapSearchData as $entryValue) {