/** * Autentificación de usuarios con LDAP. * * @param string $userLogin con el login del usuario * @param string $userPass con la clave del usuario * @return int|bool Número de error o boolean */ public static function authUserLDAP($userLogin, $userPass) { if (!Util::ldapIsAvailable() || !Util::ldapIsEnabled() || !Ldap::checkLDAPParams()) { return false; } $ldapGroupAccess = false; $message['action'] = __FUNCTION__; // Conectamos al servidor realizamos la conexión con el usuario proxy try { Ldap::ldapConnect(); Ldap::ldapBind(); Ldap::getUserDN($userLogin); } catch (\Exception $e) { return false; } $userDN = Ldap::$ldapSearchData[0]['dn']; // Realizamos la conexión con el usuario real y obtenemos los atributos try { Ldap::ldapBind($userDN, $userPass); $attribs = Ldap::getLDAPAttr(); } catch (\Exception $e) { return ldap_errno(Ldap::getConn()); } // Comprobamos si la cuenta está bloqueada o expirada if (isset($attribs['expire']) && $attribs['expire'] > 0) { return 701; } 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; } } } else { $ldapGroupAccess = self::checkLDAPGroup($attribs['group']); } // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del grupo } else { $ldapGroupAccess = Ldap::searchUserInGroup($userDN) || LdapADS::searchADUserInGroup($userLogin); } } else { $ldapGroupAccess = true; } if ($ldapGroupAccess === false) { $log = new Log(__FUNCTION__); $log->addDescription(_('Usuario no pertenece al grupo')); $log->addDescription(sprintf('%s : %s', _('Usuario'), $userDN)); $log->writeLog(); return 702; } self::$userName = isset($attribs['name']) ? $attribs['name'] : $userLogin; self::$userEmail = isset($attribs['mail']) ? $attribs['mail'] : ''; return true; }
/** * Comprobar si los parámetros necesario de LDAP están establecidos. * * @return bool */ public static function checkLDAPParams() { self::$_isADS = Config::getValue('ldap_ads', false); self::$_searchBase = Config::getValue('ldap_base'); self::$_ldapServer = !self::$_isADS ? Config::getValue('ldap_server') : LdapADS::getADServer(Config::getValue('ldap_server')); self::$_bindDN = Config::getValue('ldap_binduser'); self::$_bindPass = Config::getValue('ldap_bindpass'); self::$_ldapGroup = Config::getValue('ldap_group', '*'); if (!self::$_searchBase || !self::$_ldapServer || !self::$_bindDN || !self::$_bindPass) { Log::writeNewLog(__FUNCTION__, _('Los parámetros de LDAP no están configurados')); return false; } return true; }