我将如何build立一个AD的LDAP查询,返回一个特定安全组中的帐户没有被禁用的所有用户?

我将如何build立一个AD的LDAP查询,返回一个特定安全组中的帐户没有被禁用的所有用户?

我试过了

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

但似乎并不奏效。

我正在尝试设置Google Apps Directory Sync,并希望它能够同步所有属于“Google Apps用户”安全组的帐户未被禁用的用户(或者,如果在AD中被禁用,则只需挂起GA中的帐户)。

  • phpldapadmin:使用UIDlogin为“root”pipe理员用户
  • Windows AD和Linux LDAP服务器之间的统一authentication
  • AD LDAP不需要密码
  • 您可以通过ADFS获取用户列表吗?
  • LDAP(slapd)authentication用户不能修改自己
  • ldap_result:无法联系LDAP服务器(-1)
  • 4 Solutions collect form web for “我将如何build立一个AD的LDAP查询,返回一个特定安全组中的帐户没有被禁用的所有用户?”

    有时候通过设置不同的位来将一组是/否的值存储在单个值中。 你可以使用一个位掩码来检查它们是否被设置。

    例如,十进制中的546是二进制值10 0010 0010 – 十进制中的512,32和2的总和(所有这些数字都是2的幂,这意味着它们的二进制表示中只有一个'1')。 :这意味着这三个是/否的值被设置。

    根据userAccountControl文档 ,这意味着以下值被设置:

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

    但是,例如,如果您的用户没有设置PASSWD_NOTREQD (所以他们的userAccountControl值是512),或者也有一个设置了DONT_EXPIRE_PASSWORD (65536)(意思是它们的值是66082)的用户,您不会在这个用户中find您的查询。

    你需要做的是使用按位AND来查询只有该位的值:

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

    如果该位的值是1,那么该位被设置。 不pipe什么其他位设置,所以你有效地问,如果userAccountControl & 2 == 2

    使用AND检查位的LDAP语法是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))) 

    closures但是

    (&(objectClass的=人)(!(userAccountControl的= ACCOUNTDISABLE)))

    应该

    (&(objectClass的=人)(!userAccountControl的= ACCOUNTDISABLE))

    请注意,我不能从我所在的地方真正地testing这个。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.