* [MOD] Modified LDAP behaviour when no group is set

This commit is contained in:
nuxsmin
2015-09-23 11:20:05 +02:00
parent 9b7a7736b3
commit 0e0cf2ebb3
3 changed files with 43 additions and 30 deletions

View File

@@ -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) {

View File

@@ -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';

View File

@@ -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) {