Python - пиад создать пользователя с запятой в его имени

Я пытаюсь создать пользователя с помощью pyad, у меня работает:

    ou = pyad.adcontainer.ADContainer.from_dn('OU=Employees,DC=lan,DC=cleo,DC=com')
    name =  ("doe john")
    newUser = pyad.aduser.ADUser.create(name, ou, password="password")

Однако, если я попытаюсь сделать имя, чтобы быть doe, john (теперь запятая):

    ou = pyad.adcontainer.ADContainer.from_dn('OU=Employees,DC=lan,DC=cleo,DC=com')
    name =  ("doe, john")
    newUser = pyad.aduser.ADUser.create(name, ou, password="password")

Я получаю ошибку:

Traceback (most recent call last):
File "C:\Users\sshulgan\AppData\Local\Programs\Python\Python36-32\lib\site- packages\pyad\adcontainer.py", line 38, in create_user
obj.SetInfo()
File "<COMObject <unknown>>", line 2, in SetInfo
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Active 
Directory', 'An invalid dn syntax has been specified.\r\n', None, 0, -2147016654), None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "NamelyToAD.py", line 49, in <module>
newUser = pyad.aduser.ADUser.create(name, ou, password="Password1")
File "C:\Users\sshulgan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyad\aduser.py", line 16, in create
optional_attributes=optional_attributes
File "C:\Users\sshulgan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyad\adcontainer.py", line 47, in create_user
pyadutils.pass_up_com_exception(e)
File "C:\Users\sshulgan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyad\pyadutils.py", line 58, in pass_up_com_exception
raise WIN32_ERRORS.get(info['error_num'], win32Exception)(error_info=info, additional_info=additional_info)
pyad.pyadexceptions.win32Exception: 0x80072032: An invalid dn syntax has been specified.

Я не знаю, как обойти, включая запятую, я пытался избежать ее, в том числе и chr(44), но ничего не работает.

1 ответ

Решение

Есть две проблемы с символами, которые вам нужно решить:

  1. RDN (например, cn=User Name) объекта LDAP должны иметь следующие символы, экранированные обратной косой чертой:
    , \ # + < > ; " =

  2. sAMAccountName не может содержать любой из следующих символов:
    " [ ] : ; | = + * ? < > / \ ,

pyad по умолчанию попытается установить sAMAccountName приписать name аргумент передан ADUser.create()Итак, если запрещенный символ находится в name, необходимо предоставить свой собственный sAMAccountName в качестве необязательного атрибута.

В вашем примере вы должны сделать что-то вроде:

pyad.aduser.ADUser.create("Doe\, John", ou, password="Password123", 
    optional_attributes={'sAMAccountName':'jdoe'})
Другие вопросы по тегам