Как мне создать LDAP-запрос для AD, который возвращает всех пользователей в определенной группе безопасности, учетные записи которых не отключены?
Я попытался
(& (objectClass = человек) (! (userAccountControl =ОТКЛЮЧАЕТСЯ)))
но это, похоже, не работает.
Я пытаюсь настроить Google Apps Directory Sync и хочу, чтобы он синхронизировал всех пользователей, которые входят в группу безопасности «Пользователи Google Apps», чьи учетные записи не отключены (или, при желании, просто приостановите учетные записи в GA, если они отключены в AD. ).
Иногда набор значений да / нет сохраняется в одном значении путем установки различных битов. Вы можете использовать битовая маска чтобы проверить, установлены ли они.
Например, 546 в десятичном формате - это двоичное значение 10 0010 0010, в десятичном - сумма 512, 32 и 2. (Все эти числа являются степенями двойки, что означает, что в их двоичном представлении имеется только одна '1') : Это означает, что эти три значения «да / нет» установлены.
Согласно userAccountControl документы это означает, что установлены следующие значения:
NORMAL_ACCOUNT (512)
PASSWD_NOTREQD (32)
ACCOUNTDISABLE (2)
Однако, например, если у вас был пользователь, у которого не было PASSWD_NOTREQD
set (так что их значение userAccountControl было 512), или тот, у кого также DONT_EXPIRE_PASSWORD
(65536) (это означает, что их значение было 66082), вы не найдете этих пользователей в своем запросе.
Что вам нужно сделать, это использовать побитовое И чтобы запросить значение только этого бита:
10 0010 0010
00 0000 0010
------------
00 0000 0010
Если значение этого бита равно 1, то этот бит установлен. Неважно, на что установлены другие биты, поэтому вы фактически спрашиваете, userAccountControl & 2 == 2
.
Синтаксис LDAP для проверки бита с использованием AND - 1.2.840.113556.1.4.803, поэтому вы можете увидеть, ACCOUNTDISABLE
бит устанавливается с помощью (userAccountControl: 1.2.840.113556.1.4.803: = 2). Добавление (! (Foo)) вокруг него дает вам всех пользователей, которые не отключен.
Похоже, это сработает, но не подберет членов вложенной группы:
(&
(memberOf=CN=GApsUsers,DN=....)
(!(userAccountControl=546))
)
Это работает!
(&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
близко, но
(& (objectClass = человек) (! (userAccountControl = ACCOUNTDISABLE)))
должно быть
(& (objectClass = человек) (! userAccountControl = ACCOUNTDISABLE))
обратите внимание, что я не могу проверить это с того места, где я нахожусь!