LDAP 查询不在子查询中

LDAP query not in subquery

我正在尝试的是仅获取活跃用户并排除不活跃用户(唯一的区别是不活跃用户具有 accountExpires 的值)。

所以我的过期用户查询是:

(&(objectClass=user)(!accountExpires=9223372036854775807)(!accountExpires=0))

我现在需要的是如何添加查询的第一部分:

(&(objectClass=user)(givenName=*" & userVariable & "*))

所以查询应该是这样的:

(&(objectClass=user)(givenName=*" & userVariable & "*)) NOT IN (&(objectClass=user)(!accountExpires=9223372036854775807)(!accountExpires=0))

我知道在 LDAP 中没有“不在”表达式,但我怎样才能得到这个查询? 如果我否定过期用户的查询,它不起作用。

希望有人找到了解决方案。

谢谢!

If I negate the query of expired users it does not work.

我认为这是问题所在:您必须根据布尔代数正确分配否定。

完整过滤器变为:

(&(objectClass=user)(givenName=*" & userVariable & "*)(|(!accountExpires=*)(accountExpires=9223372036854775807)(accountExpires=0)))

查询说明

如果我们有一个布尔表达式 pq,正确的否定是 ¬p∨¬q。因此,要排除过期用户并仅包含未过期用户,我们需要过滤器:

(|(!accountExpires=*)(accountExpires=9223372036854775807)(accountExpires=0))

这将包括对 accountExpires 没有价值的用户(参见 attribute presence clause) or which have infinite expiration

我简单地将&转换为|并反转了否定,但我认为包含!accountExpires=*也是必要的。