2016-07-22 10 views
0

Der Versuch, ein ldap-Attribut mit mehreren Werten zu ändern, scheint die Syntax nicht zu verstehen.ldap3-Bibliothek: Attribut mit mehreren Werten ändern

Ich verwende die ldap3 Bibliothek mit Python3.

Die documentation gibt ein Beispiel, das zwei Attribute eines Eintrags modifiziert - aber jedes Attribut nur eine Wert hat.

Das Wörterbuch aus diesem Beispiel ist das Bit ich Probleme mit, die ich:

c.modify('cn=user1,ou=users,o=company', 
    {'givenName': [(MODIFY_REPLACE, [<what do I put here>])]}) 

Statt ‚given‘, die einen Wert haben würde, ich möchte das memberUid Attribut ändern, die offensichtlich viele Namen haben würde als Einträge.

Also spucke ich alle meine Mitglieder in eine Liste, mache die Änderung, und versuche dann, meine neue Benutzernamen/Mitgliedsliste dem MODIFY-Befehl zu füttern. Wie so:

oldval = 'super.man' 
newval = 'clark.kent' 

existingmembers = ['super.man', 'the.hulk', 'bat.man'] 
newmemberlist = [newval if x==oldval else x for x in existingmembers] 
# newmemberlist = ", ".join(str(x) for x in newmemberlist) 

habe ich versucht, als eine Liste in newmemberlist vorbei

'memberuid': [(MODIFY_REPLACE, ['clark.kent', 'the.hulk','bat.man'])] 

die mich TypeError: 'str' object cannot be interpreted as an integer

oder verschiedene Kombinationen (die Kommentarzeile) einer langen Reihe gibt, getrennt mit Leerzeichen, Komma, Semikolon und alles, was mir sonst noch einfällt

'memberuid': [(MODIFY_REPLACE, 'clark.kent, the.hulk, bat.man')] 

, die das ersetzen wird, aber ich erhalte ein memberUid wie diese 'clark.kent, the.hulk, bat.man'

Antwort

1

Sie müssen schauen Sie vorbei in den DN der ldapobject Sie ändern möchten, um sicherzustellen.

c.modify(FULL_DN_OF_OBJECT, {'memberuid': [(MODIFY_REPLACE, ['clark.kent', 'the.hulk','bat.man'])]}) 

Dann sollten Sie in der Lage sein, nur in newmemberlist passieren anstelle von [ 'clark.kent', 'the.hulk', 'bat.man']

c.modify(FULL_DN_OF_OBJECT, {'memberuid': [(MODIFY_REPLACE, newmemberlist)]}) 
+0

Meine Liste Beispiel verpasst die DN (Tippfehler). Ich habe meine Frage entsprechend bearbeitet. Ich habe keine Probleme, einen MODIFY REPLACE zu tun, wenn es einen Wert gibt - aber das Übergeben einer Liste, um Multi-Werte zu erhalten (wie Sie sagten) gibt den Fehler, den ich zeigte. –

0

glaube ich MODIFY_REPLACE Befehl würde nicht akzeptieren mehrere Werte, da es nicht verstehen würde, welche Werte durch neue ersetzt werden würden. Stattdessen sollten Sie zuerst MODIFY_DELETE alte Werte und anschließend MODIFY_ADD neue Werte versuchen.

Verwandte Themen