LDAP: como buscar membros do grupo pelo memberUid do grupo?

LDAP: como buscar membros do grupo pelo memberUid do grupo?

Estou tentando escrever um único filtro de pesquisa LDAP para recuperar usuários que são membros de um grupo específico.

Estamos executando uma implementação LDAP customizada (rodando em OpenLDAP: slapd 2.4.40), onde as relações entre usuários e grupos são mapeadas Group (memberUid) -> User (uid).

O usuário LDIF não possui atributos memberOf, o que torna impossível usar a abordagem usual de(&(objectClass=person)(memberOf=login_group))

Os LDIFs do usuário se parecem com:

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

O grupo LDIF é assim:

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

É possível escrever uma única consulta LDAP que faça o equivalente a um SQL JOIN ou filtro "IN", ex.

SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)

Deve ser uma consulta única, pois será utilizada para controlar o acesso a um portal de terceiros, não podemos alterar a implementação do cliente.

informação relacionada