Jestem w stanie powiązać i zapytać Active Directory przez python-ldap bez żadnych problemów, z wyjątkiem sytuacji, gdy chodzi o dodawanie lub modyfikowanie atrybutów w AD. Mogę dodać atrybut, ale kodowanie wydaje się być wyłączone, ponieważ cały tekst jest zniekształcony.Python LDAP zapisuj wpis do Active Directory
Próbowałem kodowania mój ciąg z utf8 i kilka innych bez powodzenia.
Próbowałem również powiązania z kontem administratora domeny wraz z powiązaniem z kontem użytkownika, do którego będę zmieniał atrybut, ten sam wynik niezależnie.
Oto metoda używam zaktualizować atrybut:
klasy LdapHelpers:
def __init__(self):
import ldap
# set globals
self.server = 'LDAP://dc.mycompany.com'
self.admin_dn = 'CN=Administrator,CN=users,DC=mycompany,DC=com'
self.admin_pass = 'coolpassword'
# init LDAP connection
#ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, 0)
ldap.set_option(ldap.OPT_REFERRALS, 0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ldap.protocol_version = ldap.VERSION3
self.ldap = ldap.initialize(self.server)
def update_attribute(self, attrib, value):
try:
import ldap
conn = self.ldap
conn.simple_bind_s(self.admin_dn, self.admin_pass)
mod_attrs = [(ldap.MOD_REPLACE, "mobile", "6306564123")]
# I have tried other variations of the above
# mod_attrs = [(ldap.MOD_REPLACE, "mobile", "6306564123".encode('utf-8)]
conn.modify_s('CN=Mike Smith,OU=GoogleApps,DC=company,DC=com', mod_attrs)
print 'record updated'
except ldap.LDAPError as e:
return e.message
Doing ldapsearch przez terminal to co atrybut wygląda następująco:
mobile:: MC8sAQAAAAAQNA==
ten tak wygląda "Hello World", gdy ustawiam komórkę:
mobile:: 77+9ehsCAAAAABDvv70V
Sprawdziłem MSDN i mówi, że atrybut ldap jest tylko ciągiem znaków Unicode.
System: Ubuntu 15.10 64bit Python: 2.7.10 python-ldap == 2.4.21
Na marginesie mogę reklama w wyszukiwarce bez żadnych problemów i analizowania/wyświetlacz wrócił atrybutów użytkownika, kwestia tylko wydaje się, że przy tworzeniu lub modyfikowaniu atrybutów przychodzi ten problem z kodowaniem.
czy możesz sprawdzić jakie zapytanie wysyła 'tcpflow -c port 389'? – kwarunek
Oto zrzut z powyższego zapytania modyfikującego: tcpflow -c port 389 tcpflow: nasłuchiwanie na eth0 010.001.200.029.54760-010.000.000,039.00389: 0C'> '-CN = Administrator, CN = użytkownicy, DC = firma , DC = com coolpassword 010.000.000.039.00389-010.001.200.029.54760: 0a 010.001.200.029.54760-010.000.000.039.00389: 0 [fV4CN = Jassen Michaels, OU = GoogleApps, DC = firma, DC = com00 pmobile1 010,000,000,039.00389-010.001.200.029.54760: 0g – xXPhenom22Xx