Estoy intentando escribir un único filtro de búsqueda LDAP para recuperar usuarios que son miembros de un grupo en particular.
Estamos ejecutando una implementación LDAP personalizada (que se ejecuta en OpenLDAP: slapd 2.4.40), donde se asignan las relaciones entre usuarios y grupos Group (memberUid) -> User (uid)
.
El usuario LDIF no tiene atributos memberOf, lo que hace imposible utilizar el enfoque habitual de(&(objectClass=person)(memberOf=login_group))
Los LDIF de usuario se ven así:
dn: uid=user1,ou=people,dc=example,dc=com
cn: user1
displayName:: User1
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
uidNumber: 2698
uid: user1
El grupo LDIF es así:
dn: cn=login_group,ou=groups,dc=example,dc=com
gidNumber: 1643
objectClass: posixGroup
objectClass: top
objectClass: groupOfUniqueNames
cn: login_group
memberUid: user1
memberUid: user2
¿Es posible escribir una única consulta LDAP que haga el equivalente a un filtro SQL JOIN o "IN", por ejemplo?
SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)
Debe ser una consulta única ya que se utilizará para controlar el acceso a un portal de terceros, no podemos cambiar la implementación del cliente.