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.