我正在使用 LDAP 电子邮件服务器设置 Postfic 和 Dovecot。我在 LDAP 中的用户如下:
dn: uid=firstname,ou=People,dc=domain,dc=com
uid: firstname
uidNumber: 4025
gidNumber: 4025
givenName: firstname
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: organizationalPerson
objectClass: inetOrgPerson
loginShell: /bin/bash
homeDirectory: /home/firstname
cn: firstname lastname
mail: [email protected]
这就是我将 Dovecot 与 LDAP 连接的方式
hosts = ldapserver
ldap_version = 3
base = ou=People,dc=domain,dc=com
deref = never
scope = subtree
user_attrs =
user_filter = (&(objectclass=inetOrgPerson)(uid=%n)
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectclass=inetOrgPerson)(uid=%n))
default_pass_scheme = SSHA
当我输入用户的电子邮件地址和密码时,如下所示:电子邮件:[电子邮件保护]
密码: 密码
根据我使用“%n”的设置(如上所示),用于验证的用户名是“firstname.lastname”。我检查了 Dovecot 变量,但在本例中找不到任何有用的方法来操作“%n”变量。
我希望继续使用电子邮件地址作为“[电子邮件保护]“但使用他们的名字来验证用户。我真的在这里遇到了障碍,任何帮助都将不胜感激。
答案1
如果您的 LDAP 数据中还没有电子邮件地址,我建议您添加它。
搜索完整的电子邮件地址
user_filter = (&(objectclass=inetOrgPerson)(mail=%u))
答案2
我决定使用完整的电子邮件地址作为用户名。以下是我的设置:
hosts = LDAP server address
dn = cn=manager,dc=domain,dc=com
dnpass = password
ldap_version = 3
base = ou=People,dc=domain,dc=com
deref = never
scope = subtree
user_attrs =
user_filter = (&(objectclass=inetOrgPerson)(mail=%u)
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectclass=inetOrgPerson)(mail=%u))
答案3
如果您想要以 firstname.lastname 进行身份验证,然后查看完整的电子邮件地址(好像该地址已用于身份验证),则需要设置 userdb_user:
pass_attrs = userdb_user=mail