Como eu criaria uma consulta LDAP para o AD que retornasse todos os usuários de um determinado grupo de segurança cujas contas não estivessem desativadas?

5

Como eu criaria uma consulta LDAP para o AD que retornasse todos os usuários de um determinado grupo de segurança cujas contas não estivessem desativadas?

Eu tentei

(&(objectClass=person)(!(userAccountControl=ACCOUNTDISABLE)))

mas isso parece não funcionar.

Estou tentando configurar o Google Apps Directory Sync e gostaria que ele sincronizasse todos os usuários que fazem parte do grupo de segurança "Usuários do Google Apps" cujas contas não estão desativadas (ou, opcionalmente, suspender contas no GA se elas estiverem desativadas desativado no AD).

    
por Corey 04.08.2010 / 01:10

4 respostas

4

Isso funciona!

(&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
    
por 26.08.2010 / 15:33
7

Às vezes, um conjunto de valores sim / não é armazenado em um único valor, definindo vários bits. Você pode usar um bitmask para verificar se eles estão definidos.

Por exemplo, 546 em decimal é o valor binário 10 0010 0010 - em decimal, a soma de 512, 32 e 2. (Todos esses números são potências de 2, o que significa que eles só têm um '1' em suas representação binária): Isso significa que os três valores sim / não estão definidos.

De acordo com os documentos userAccountControl , os seguintes valores são definidos:

NORMAL_ACCOUNT (512)
PASSWD_NOTREQD (32)
ACCOUNTDISABLE (2)

No entanto, por exemplo, se você tivesse um usuário que não tivesse PASSWD_NOTREQD set (para que seu valor userAccountControl fosse 512) ou um que também tivesse DONT_EXPIRE_PASSWORD (65536) set (significando que seu valor era 66082), você não encontraria esses usuários em sua consulta.

O que você precisa fazer é usar um bit a bit AND para consultar o valor de só isso:

10 0010 0010
00 0000 0010
------------
00 0000 0010

Se o valor desse bit for 1, esse bit será definido. Não importa o que os outros bits estão definidos, então você está efetivamente perguntando se userAccountControl & 2 == 2 .

A sintaxe LDAP para verificar um bit usando AND é 1.2.840.113556.1.4.803, portanto, você pode ver se o ACCOUNTDISABLE bit está definido com (userAccountControl: 1.2.840.113556.1.4.803: = 2). Adicionando (! (Foo)) em torno dele dá a você todos os usuários que não estão desativados.

    
por 12.09.2011 / 13:47
4

Parece que isso funcionará, mas não atenderá aos membros do grupo aninhados:

(&
    (memberOf=CN=GApsUsers,DN=....)
    (!(userAccountControl=546))
)
    
por 04.08.2010 / 01:23
1

fechar mas

(& (objectClass = person) (! (userAccountControl = ACCOUNTDISABLE)))

deve ser

(& (objectClass = person) (! userAccountControl = ACCOUNTDISABLE))

por favor note que eu não posso realmente testar isso de onde estou!

    
por 04.08.2010 / 01:27