mirror of
https://github.com/nuxsmin/sysPass.git
synced 2026-03-03 23:24:07 +01:00
* [MOD] Modified LDAP behaviour when no group is set
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user