AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Attribute mit LDAP hinzufügen

Ein Thema von RWarnecke · begonnen am 12. Aug 2007 · letzter Beitrag vom 19. Aug 2007
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Neue Attribute mit LDAP hinzufügen

  Alt 12. Aug 2007, 12:14
Hallo zusammen,

ich habe mir die beiden Units für LDAP von CodeCentral (die Ihr auch im Anhang findet) heruntergeladen. Die Verbindung und das auslesen zum LDAP-Server funktioniert wunderbar. Aber irgendwie bin ich zu blöd einem Object ein neues Attribute hinzuzufügen oder es zu modifizieren.

Mein bissheriger Versuch sieht so aus :
Delphi-Quellcode:
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;
Nur jedesmal bekomme ich eine EAccessViolation auf die Datei wldap32.dll. Nur weiß ich nicht warum. Könntet Ihr mit da weiterhelfen ?
Angehängte Dateien
Dateityp: pas linldap_379.pas (18,5 KB, 9x aufgerufen)
Dateityp: pas uldap_103.pas (23,4 KB, 10x aufgerufen)
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Neue Attribute mit LDAP hinzufügen

  Alt 14. Aug 2007, 17:38
*push* Kann mir da wirklich keiner helfen, nichtmal ansatzweise ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Neue Attribute mit LDAP hinzufügen

  Alt 14. Aug 2007, 17:44
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Neue Attribute mit LDAP hinzufügen

  Alt 14. Aug 2007, 17:50
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Neue Attribute mit LDAP hinzufügen

  Alt 14. Aug 2007, 18:02
Zitat von RWarnecke:
Nur verstehen tue ich das ganze nicht, warum das ein Speicherleck produziert.
Mit der Create - Zuweisung legt du ein neues, leeres Objekt an. Alles Paletti.
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
   ldapAttr.Assign(Entries.GetEntry(11)); // Objekt kopieren
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: Neue Attribute mit LDAP hinzufügen

  Alt 14. Aug 2007, 19:57
Danke für Deine Erklärung Andreas, dass war mir bis jetzt nicht so bewusst.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: Neue Attribute mit LDAP hinzufügen

  Alt 19. Aug 2007, 10:04
*push* Kann mir hier wirklich keiner weiterhelfen ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Neue Attribute mit LDAP hinzufügen

  Alt 19. Aug 2007, 18:22
Hallo Rolf,

ich habe mir deinen Code mal angesehen, ein wenig umgeformt und kommentiert.

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz