LDAP ldapsearch 过滤器:return uidNumber if person has sub ou=mail

LDAP ldapsearch filter: return uidNumber if person has sub ou=mail

我正在尝试为我的 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=User-1
====> uidNumber=4035
====> ou=邮件
=====> mailAddress=test@Mydomain.TLD
===> uid=User-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 容器中。这个想法是,这可以用不同的 mailAddress:

重复几次
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 个对象:

  • objectClass=posixAccount
  • 的对象
  • ou=mail
  • 的子对象
  • grand child object whose mailAddress=test@Mydomain.TLD

选择:

一种替代方法是先搜索 mailAccount(孙子)对象

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

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