在net-ldap中搜索Ruby的"已启用"用户

Nei*_*off 3 ruby active-directory netldap

我正在使用net-ldap gem来搜索活动目录.
我可以使用过滤器搜索用户:

filter = Net::LDAP::Filter.eq("sAMAccountName", "neil*")
filter2 = ~Net::LDAP::Filter.eq("objectclass", "computer")

joined_filter = Net::LDAP::Filter.join(filter, filter2)

ldap.search(:base => treebase, :filter => joined_filter) do |entry|
   puts entry.sAMAccountName
end
Run Code Online (Sandbox Code Playgroud)

这给了我所有sAMAccountName以neil开头并且不是计算机帐户的用户.

如何添加仅搜索已启用帐户的过滤器?

Dar*_*aro 13

您可以使用ruleOID LDAP_MATCHING_RULE_BIT_AND规则来检查UserAccountControl.

我使用此过滤器来查找已启用的用户:

(&(objectCategory=organizationalPerson)(objectClass=User)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Run Code Online (Sandbox Code Playgroud)

如果帐户被禁用,userAccountControl:1.2.840.113556.1.4.803将设置位2.

ruleOID的值可以是以下之一:

•1.2.840.113556.1.4.803 - 这是LDAP_MATCHING_RULE_BIT_AND规则.仅当属性中的所有位与值匹配时,匹配规则才为真.此规则类似于按位AND运算符.

•1.2.840.113556.1.4.804 - 这是LDAP_MATCHING_RULE_BIT_OR规则.如果属性中的任何位与值匹配,则匹配规则为true.此规则类似于按位OR运算符.

例如,您希望在Active Directory中查询已禁用的用户类对象.保存此信息的属性是userAccountControl属性.该属性由不同标志的组合组成.用于设置要禁用的对象的标志是UF_ACCOUNTDISABLE,其值为0x02(十进制2).指定userAccountControl并且设置了UF_ACCOUNTDISABLED位的按位比较过滤器将类似于:(UserAccountControl:1.2.840.113556.1.4.803:= 2)