python - पायथन-एलडीएपी एडीआईएस एडी प्रयोक्ता के लिए ओबीजेईसीटीसीएलएएसएसएवीएलेशन के साथ विशेषता जोड़ने में विफल रहता है




active-directory python-ldap (2)

एक विशेषता जोड़ने की कोशिश करते समय मुझे एक OBJECT_CLASS_VIOLATION मिलता है। एक मौजूदा विशेषता को संशोधित करना ठीक काम करती है (यह वही विशेषता है, अगर मैं इसे पहले एडी से जोड़ देता हूं, फिर इसे संशोधित करें)।

सबसे पहले मैं एक डोमेन व्यवस्थापक के रूप में kinit, तो:

import ldap, ldap.sasl
l = ldap.initialize('ldap://TEST.DOM.DE')
auth_tokens = ldap.sasl.gssapi('')
l.sasl_interactive_bind_s('', auth_tokens)
l.add_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [('gecos', ['something'])])

जो यह त्रुटि देता है:

ldap.OBJECT_CLASS_VIOLATION: {'info': '0000207B: UpdErr: DSID-0305124B, problem 6002 (OBJ_CLASS_VIOLATION), data 0\n', 'desc': 'Object class violation'}

हालांकि यह कमांड सफल है, अगर मैं एयूडीसी के भीतर समय से पहले विशेषता बना देता हूं:

l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(1, 'gecos', None), (0, 'gecos', ['something'])])

और add कमांड ldapmodify के साथ काम करता है:

> ldapmodify -x -h TEST.DOM.DE -D [email protected].DOM.DE 
dn:CN=dmulder,CN=Users,DC=test,DC=dom,DC=de
changetype: modify
add: gecos
gecos: something
modifying entry "CN=dmulder,CN=Users,DC=test,DC=dom,DC=de"

कोई भी विचार जो मैं गलत कर रहा हूँ यहाँ?

https://code.i-harness.com


मैं Ubuntu 16. और नीचे में OpenLDAP सर्वर डेमन का मार्गदर्शन और स्थापित करता हूं नीचे मेरा प्रयास है।

import ldap
l = ldap.initialize('ldap://localhost',trace_level=3)
l.simple_bind_s('CN=admin,DC=example,DC=com','381138')#my setting
base_dn = 'DC=example,DC=com'
filter = '(objectclass=person)'
attrs = ['gecos']

add_record = [
('objectclass', ['inetOrgPerson']),
('gecos', ['Bacon'] ),
]
#l.modify_s('CN=dmulder,ou=people,dc=example,dc=com', [(1, 'gecos', None), (0, 'gecos', ['something'])])
l.add_s('cn=dmulder,ou=people,dc=example,dc=com', add_record)
l.search_s( base_dn, ldap.SCOPE_SUBTREE, filter, attrs )

यदि आप स्कीमा का उल्लंघन नहीं करते हैं, तो यह ldapclient.python-ldap का एक बग सिर्फ एक आवरण होना चाहिए।

उदाहरण के लिए, यदि कोई स्ट्रक्चरल ऑब्जेक्ट क्लास विशेषताओं में निर्दिष्ट नहीं है, तो एक अन्य अपवाद उठाया जाएगा। अगर किसी रिकॉर्ड में यूआईडी में प्रयुक्त विशेषताएँ नहीं हैं, तो एक NAMING_VIOLATION उठाया जाएगा। यदि किसी रिकॉर्ड में स्ट्रक्चरल ऑब्जेक्ट क्लास के लिए जरूरी कोई विशेषता नहीं है, तो एक ओबीजेईसीटीसीएलएएसएस_वॉल्यूशन उठाया जाएगा, और इसी तरह।

कृपया अजगर- dump_record.py की एक श्रृंखला द्वारा प्रदान की गई dump_record.py उपयोग करें जो नई प्रविष्टि को dump_record.py लिए डंप करने के लिए उपयोग करें।


l.add_s का प्रयोग किसी वस्तु को जोड़ने के लिए किया जाता है, एक विशेषता नहीं

इस मामले में आप एक नया ऑब्जेक्ट बनाने का प्रयास कर रहे हैं, और आप वस्तु निर्माण के लिए कई आवश्यक विशेषताओं को याद नहीं कर रहे हैं। आपको उपयोग करना चाहिए

l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(0, 'gecos', 'something')])

ऑब्जेक्ट में सिर्फ एक नई विशेषता जोड़ने के लिए

स्पष्ट करने के लिए: जब विशेषता पहले से सेट नहीं हुई है, तो यह वाक्यविन्यास गलत है: l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(1, 'gidNumber', None), (0, 'gidNumber', ['1000'])]) उपरोक्त वाक्यविन्यास (पिछले मान के बिना) सही है।







python-ldap