Я пытаюсь добавить участника в группу Active Directory с помощью скрипта, используя модуль python-ldap. Вот моя попытка:
import ldap
from ldap import modlist as modlist
l = ldap.initialize(server)
l.simple_bind_s(username, password)
l.set_option(ldap.OPT_REFERRAL)
old_members = new_members = dict()
new_members['member'] = 'cn=Forename Name,ou=Users,dc=DOMAIN'
old_members
group_dn = 'cn=GROUP,ou=Groups,dc=DOMAIN'
try:
ldif = modlist.modifyModlist(old_members,new_members)
l.modify_s(group_dn, ldif)
except ldap.LDAPError,e:
print e
У меня такая ошибка: LdapError: DSID-0C090C48, comment: Error in attribute conversion
Я понятия не имею, откуда взялась эта ошибка, после того, как я искал Google вверх и вниз.
Я был бы очень рад получить подсказку или другой способ добавить пользователя в группу, что должно быть довольно распространенной задачей из python-ldap
Большое спасибо
Я смотрел ваш код и думаю, что эта строка создает два указателя на один и тот же словарь:
old_members = new_members = dict ()
Это приведет к тому, что объект ldif будет равен [], когда вы запустите эту строку:
ldif = modlist.modifyModlist (old_members, new_members)
изменение
old_members = new_members = dict()
к
old_members = dict()
new_members = dict()
new_members['member'] = 'cn=Forename Name,ou=Users,dc=DOMAIN'
Я проверил, что все в порядке.
from ldap3 import Server, Connection, ALL, NTLM
from elizabeth import Personal, Address,Text
from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups
import random
serverName='dc1.stand.local'
connUser="stand.lsd\\Admin"
connUserPwd=""
usersOU = 'ou=test-ou,dc=stand,dc=local'
groupsOU = 'ou=test-groups,dc=stand,dc=local'
usersDnList = []
groupsDnList = []
server = Server(serverName, get_info=ALL)
conn = Connection(server, user=connUser, password=connUserPwd, authentication=NTLM)
conn.bind() #must be TRUE
conn.add(usersOU, 'organizationalUnit') # add test-ou for users
conn.add(groupsOU, 'organizationalUnit') # add test-ou for groups
data = Text('en')
for _ in range(0,10):
currentGroup = 'cn='+data.word()+',ou=test-groups,dc=stand,dc=local'
groupsDnList.append(currentGroup)
conn.add(currentGroup, 'group')
address = Address('en')
person = Personal('en')
for _ in range(0,10):
address_country = address.country()
conn.add('ou='+address_country+',ou=test-ou,dc=stand,dc=local', 'organizationalUnit')
for _ in range (0,10):
name = person.name(gender='male')
surname = person.surname(gender='male')
currentUser = 'cn='+name+'.'+surname+','+'ou='+address_country+',ou=test-ou,dc=stand,dc=local'
usersDnList.append(currentUser)
conn.add(currentUser, 'User',
{'givenName': name,
'sn': surname,
'departmentNumber': 'DEV',
'telephoneNumber': 1111})
for _ in range(0,300):
rndUser = random.choice(usersDnList)
rndGroup = random.choice(groupsDnList)
addUsersInGroups(conn, rndUser, rndGroup)