![]() |
Neue Attribute mit LDAP hinzufügen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
ich habe mir die beiden Units für LDAP von ![]() Mein bissheriger Versuch sieht so aus :
Delphi-Quellcode:
Nur jedesmal bekomme ich eine EAccessViolation auf die Datei wldap32.dll. Nur weiß ich nicht warum. Könntet Ihr mit da weiterhelfen ?
procedure TForm6.Button1Click(Sender: TObject);
var ldapconnected : LdapConnection; Entries: LdapEntryList; ldapAttr: LdapEntry; Attributes : LdapAttribute; newAttr: LdapEntry; begin ldapconnected := LdapConnection.Create; ldapconnected.Open('server.domain.de','cn=user,ou=container,o=container', 'password', 389); Entries := LdapEntryList.Create; ldapAttr := LdapEntry.Create; ldapconnected.Search(Entries, 'ou=container,o=container'); // In der NDS suchen ab einem bestimmten Containers Label1.Caption := Entries.GetDN(11); // Abrufen des Full Calified Name ldapAttr := Entries.GetEntry(11); // Auslesen der Attribute von dem Object ldapAttr.Add('l', 'Stuttgart'); // Dieser Wert soll hinzugefügt werden. ldapconnected.Add(Entries.Entry[9]); Label2.Caption := Entries.EntryValue[11, 'givenName', 0]; // Einzelne Attribute auslesen Label3.Caption := Entries.EntryValue[11, 'fullName', 0]; // Einzelne Attribute auslesen Label4.Caption := Entries.EntryValue[11, 'l', 0]; // Einzelne Attribute auslesen Memo3.Lines.Text := ldapAttr.AsLDIF; // Eine LDIF - Ausgabe vom NDS-Object erstellen Memo2.Lines := ldapAttr.NameList; // Anzeigen der dazugehörigen Attribute Memo1.Lines.Text := Entries.Text; // Anzeigen des Suchergebniss ldapAttr.Free; // ldapEntry wieder freigeben Entries.Free; // ldapEntryList wieder freigeben ldapconnected.Close; // LDAP - Verbindung schliessen ldapconnected.Free; // LDAPConnection wieder freigeben end; |
Re: Neue Attribute mit LDAP hinzufügen
*push* Kann mir da wirklich keiner helfen, nichtmal ansatzweise ?
|
Re: Neue Attribute mit LDAP hinzufügen
Delphi-Quellcode:
ldapAttr := LdapEntry.Create;
..... // folgende Zeile erzeugt auf jeden Fall ein Speicherleck !! // ich weiss zwar nicht wie's richtig wäre, so ist's jedoch Falsch ldapAttr := Entries.GetEntry(11); // Auslesen der Attribute von dem Object |
Re: Neue Attribute mit LDAP hinzufügen
Danke für Deine Antwort. Nur verstehen tue ich das ganze nicht, warum das ein Speicherleck produziert. Wenn ich den Create-Befehl weglasse, dann meckert mein Compiler, dass möglicherweise mein ldapAttr nicht initialisiert wurde.
Edit : Wichtiger sind mir Zeile 20 und 21. Warum fügt er das Attribute nicht hinzu, dass ist mein größtes Problem. |
Re: Neue Attribute mit LDAP hinzufügen
Zitat:
Nur die 2. Zuweisung überschreibt den Zeiger (Objektvariablen sind Zeiger) mit einem neuen Wert. Jetzt ist das ursprüngliche Objekt verloren (aber nicht sauber freigegeben). Am Ende droht dann sogar eine doppelte Freigabe, denn ldapAttr zeigt ja auf Entries.GetEntry(11). Probier mal
Delphi-Quellcode:
ldapAttr.Assign(Entries.GetEntry(11)); // Objekt kopieren
|
Re: Neue Attribute mit LDAP hinzufügen
Danke für Deine Erklärung Andreas, dass war mir bis jetzt nicht so bewusst.
|
Re: Neue Attribute mit LDAP hinzufügen
*push* Kann mir hier wirklich keiner weiterhelfen ?
|
Re: Neue Attribute mit LDAP hinzufügen
Hallo Rolf,
ich habe mir deinen Code mal angesehen, ein wenig umgeformt und kommentiert.
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.ButtonClick(Sender: TObject);
var conn: LdapConnection; entries: LdapEntryList; entry: LdapEntry; newEntry: LdapEntry; begin conn := LdapConnection.Create; // quick hack to get read access in spite of protocol error // actually we need strong authorization to apply changes try conn.Open('www.openldap.com') except end; // create container for search results entries := LdapEntryList.Create; // execute subtree search conn.Search(entries, 'dc=OpenLDAP,dc=org', '(objectClass=openLDAPperson)'); // single out second entry entry := entries.GetEntry(1); // clone entry newEntry := LdapEntry.Create(entry); // change location newEntry.Modify('l', 'Stuttgart'); // issue mod request conn.Modify(entry, newEntry); // house keeping entry.Free; newEntry.Free; entries.Free; conn.Close; conn.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz