LDAP ldapsearch filter:如果 person 有 sub ou=mail,则返回 uidNumber



我正在尝试为我的Postfix设置构建一个ldap过滤器,该过滤器充当下面的示例伪代码:

return uidNumber OF objectClass=posixAccount IF they have a ou=mail AND the mailAddress in this ou=mail IS EQUAL to test@Mydomain.TLD

更具体,例如 %s 成立,例如:test@Mydomain.TLD:

search_base = ou=people,dc=Mydomain,dc=TLD
query_filter = ( &(objectClass=posixAccount)(ou=mail)(mailAddress=%s) )
result_attribute = uidNumber

但是规则(ou=mail)不起作用,我不知道如何让它过滤这个ou=mail。我的 LDAP 结构如下所示:

=> dc=MyDomain,dc=TLD
==> ou=人
===> uid=用户-1
====> uidNumber=4035
====> ou=邮件
=====> 邮件地址=test@Mydomain.TLD
===> uid=用户-2

添加 posix 用户帐户

这就是我将普通用户添加到 LDAP 数据库的方式:

cat << EOF > ./add_user.ldif
dn:              uid=User-1,ou=people,dc=MyDomain,dc=TLD
objectClass:     top
objectClass:     person
objectClass:     inetOrgPerson
objectClass:     posixAccount
objectClass:     shadowAccount
uidNumber:       2001
gidNumber:       2001
homeDirectory:   /home/User-1
loginShell:      /usr/local/bin/bash
uid:             User-1
userPassword:    TopSecretPassword
displayName:     User-1
givenName:       User-1
mail:            SomeMail@SomeDomain.TLD
telephoneNumber: 0123456
cn:              User-1
sn:              Surname
o:               Some Corporation
jpegPhoto:<      file://Picture.jpg
EOF

添加 ou=mail

然后我会添加 User-1 的邮件容器,其中包含所有邮件托管相关信息。

cat << EOF > ./add_users_mail_container.ldif
dn: ou=mail,uid=User-1,ou=people,dc=MyDomain,dc=TLD
objectclass: top
objectclass: organizationalUnit
ou: mail
EOF

添加邮件帐户

现在我将邮件帐户添加到 ou=mail 容器中。这个想法是,这可以用不同的邮件地址重复几次:

cat << EOF > /add_users_mail_account.ldif
dn: mailAddress=test@Mydomain.TLD,ou=mail,uid=User-1,ou=people,dc=MyDomain,dc=TLD
objectclass: mailAccount
mailAddress: test@Mydomain.TLD
MailPassword: {SSHA}TopSecretPasswordHash
MailAccountStatus: active
mailStorageDirectory: /home/User-1/mail
#mailAlias: NONE
mailDelivery: dovecot
mailSizeMax: 10240
mailReplyText: Nothing to reply here
mailQuotaSize: 10240
mailQuotaCount: 0
mailservice: smtp
mailservice: pop3
mailservice: imap
mailservice: managesieve
EOF

不能通过单个搜索筛选器执行此操作。搜索筛选器中的所有条件仅适用于单个对象。

但在您的情况下,您的过滤器中涉及 3 个对象:

  • 一个对象,其对象类=posixAccount
  • 其 ou=mail 的子对象
  • 邮件地址=test@Mydomain.TLD 的子对象

另类:

一种替代方法是先搜索邮件帐户(孙子)对象

(&(objectClass=mailAccount)(mailAccount=test@Mydomain.TLD))

然后获取搜索结果的父级的父级以获取 uidNumber。

最新更新