我正在使用 Pythonldap3
模块来处理 OpenLDAP 服务器。我已经能够查询用户并将用户添加到 OU,但不知道如何将用户添加到组(POSIX 和 memberOf/groupOfNames 覆盖)。我在这里找到了一种 Active Directory 的“方式”,但我如何将该示例用于 OpenLDAP?甚至不确定from ldap3 import Server, Connection, ALL, NTLM
是否在 Linux 上。
尝试下面的代码。用户被添加到目录中,但添加到POSIX组ldap-users
失败并出现一连串错误,但这看起来像是罪魁祸首。不知道我搞砸了 objectClass 属性:
LDAPInvalidAttributeSyntaxResult - 21 - invalidAttributeSyntax - None - objectClass: value #0 invalid per syntax
我想我会留下POSIX组以备后用并尝试使用memberOf覆盖(将用户添加到admins
groupOfNames对象),但我坚持使用
ImportError: No module named 'ldap3.modlist'
不知道为什么模块ldap3.modlist
不可用。那不应该包含在 Ubuntu/pythonldap3
包中吗?尝试显式导入它。
import ldap3.modlist as modlist
import json
import urllib.request
from urllib.error import URLError, HTTPError
import getopt, sys, logging
from ldap3 import Server, Connection, ALL
...
# retrieve user details from HR database
ldap_user = PersonFromHRDB(person_id)
# fill in the template of attributes we need to give to the ldap server
attributes = { 'givenName': ldap_user.givenName,
'sn': ldap_user.sn,
'displayName': ldap_user.displayName,
'uid': ldap_user.uidNumber,
'homeDirectory': ldap_user.homeDirectory,
...}
# add user to DIT via their dn (dn:uid=user101,ou=people,dc=my,dc=dom)
conn.add(ldap_user.dn, ['posixAccount', 'top', 'inetOrgPerson', 'shadowAccount'], attributes)
# add user to a the 'ldap-users' POSIX group
conn.add('cn=ldap-users,ou=groups,dc=my,dc=dom', {'memberUid': ldap_user.cn})
# add user to 'admins' groupOfNames (memberOf overlay) object
group_dn = 'cn=admins,ou=groups,dc=my,dc=dom'
conn.modify_s (group_dn, [ modlist.MOD_ADD, 'member', [ldap_user.dn]])