我现在用的是净LDAP宝石搜索Active Directory。
我可以搜索使用过滤器的用户:
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
这给了我它的sAMAccountName赋始于尼尔,而不是计算机帐户的所有用户。
如何添加只启用搜索帐户过滤器?
您可以使用ruleOID LDAP_MATCHING_RULE_BIT_AND规则,以检查的UserAccountControl。
我用这个过滤器来查找已启用用户:
(&(objectCategory=organizationalPerson)(objectClass=User)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
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规则。 如果从属性的任何位匹配值的匹配规则是真实的。 这条规则是像位OR运算符。
一个例子是,当你想查询是被禁用的用户类对象的Active Directory。 保存此信息的属性为userAccountControl属性。 该属性是由不同的标志的组合。 设置要禁用对象的标志是UF_ACCOUNTDISABLE,其中有0×02(2十进制)的值。 按位比较过滤器,用于指定与所述UF_ACCOUNTDISABLED位组userAccountControl的将类似于此:(的UserAccountControl:1.2.840.113556.1.4.803:= 2)
达罗的回答关于使用(userAccountControl的:1.2.840.113556.1.4.803:= 2)!是完全正确的,但我不能使它与使用Net :: LDAP :: Filter.join方法红宝石网/ LDAP工作。
然而,我还是设法与网:: LDAP :: Filter.construct,如来实现它
滤波器=净:: LDAP :: Filter.construct(“(&(objectClass的=用户)(=的memberOf CN = MYGROUP,OU =组,DC = MyPlace酒店)((userAccountControl的:1.2.840.113556.1.4.803:= 2 )))“)