Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Active Directory - User zu einer Gruppe hinzufügen (https://www.delphipraxis.net/212255-active-directory-user-zu-einer-gruppe-hinzufuegen.html)

hschmid67 13. Jan 2023 11:16

Active Directory - User zu einer Gruppe hinzufügen
 
Hallo zusammen,

wie kann ich einen AD-User zu einer Gruppe hinzufügen? Ich dachte, ich wäre schon sehr weit, denn mit folgendem Code geht manches Schreiben in Objekte des AD:

Delphi-Quellcode:
uses
  web.win.adstypes,
  activeds_tlb;

procedure WriteUserAttrib;
var
  lResourceStr: string;
  lADObj: IADsObject;
  lStr: string;
begin
  lResourceStr := 'LDAP://domain.de/cn=TestUser,ou=TEST,dc=domain,dc=de';

  ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsObject, lADObj);

  lStr := lADObj.Get('comment'); // nur zum Testen
  Memo1.Lines.Add(lStr);

  lADObj.Put('comment', 'dummytext');
  lADObj.SetInfo;
end;
Das funktioniert für einfache Attribute ganz gut, aber ich scheitere am Attribut "memberOf". Das ist ein Array und ich kann die Werte damit auch auslesen, aber ich bekomme es nicht hin, das wieder zurückzuschreiben.

Selbst so funktioniert es nicht, also nur auslesen und gleiches gleich wieder reinschreiben:

Delphi-Quellcode:
var
  lMember: Variant;
begin
  lMember := lADObj.Get('memberOf');
  lADObj.PutEx(2, 'memberOf', lMember);
  lADObj.SetInfo;
end;
Fehler: "Der Server kann die Anforderung nicht ausführen."

Nun hab ich es von der anderen Seite her probiert, also ausgehend von der Gruppe:

Delphi-Quellcode:
var
  lResourceStr: string;
  lADObj: IADsGroup;
  lStr: string;
begin
  lResourceStr := 'LDAP://domain.de/cn=TestGruppe,ou=TEST,dc=domain,dc=de';

  ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsGroup, lADObj);

  lStr := lADObj.Get('cn');  // nur zum Testen
  Memo1.Lines.Add(lStr);

  lADObj.Add('cn=TestUser,ou=TEST,dc=domain,dc=de');
  lADObj.SetInfo;
end;
Hier bekomme ich den ominösen OLE-Fehler 80005000.

Weiß jemand Rat? Ich möchte nur die Powershell vermeiden, alle anderen Wege direkt in Delphi sind willkommen.

Viele Grüße
Harald

peterbelow 13. Jan 2023 14:01

AW: Active Directory - User zu einer Gruppe hinzufügen
 
Führst Du das unter einem Admin-Account aus? Änderungen am AD sind meines Wissens die Sache von Domain-Administratoren, erfordern also weitreichende Rechte.

hschmid67 13. Jan 2023 14:09

AW: Active Directory - User zu einer Gruppe hinzufügen
 
ja, der User hat Admin-Rechte - und wie gesagt, andere Änderungen einfacher Attribute funktionieren auf diese Weise.

hschmid67 13. Jan 2023 15:43

AW: Active Directory - User zu einer Gruppe hinzufügen
 
Jetzt hab ich doch noch die "Kleinigkeit" gefunden, die gefehlt hat - und jetzt funktioniert es:

Delphi-Quellcode:
var
  lResourceStr: string;
  lADObj: IADsGroup;
  lStr: string;
begin
  lResourceStr := 'LDAP://domain.de/cn=TestGruppe,ou=TEST,dc=domain,dc=de';

  ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsGroup, lADObj);

  lStr := lADObj.Get('cn'); // nur zum Testen
  Memo1.Lines.Add(lStr);

  lADObj.Add('LDAP://domain.de/cn=TestUser,ou=TEST,dc=domain,dc=de'); // das hat gefehlt: "LDAP://domain.de/..."
  lADObj.SetInfo;
end;
Die Domain, der LDAP-Pfad muss komplett sein!

Vielen Dank fürs Mitdenken und viele Grüße
Harald Schmid

hschmid67 13. Jan 2023 15:47

AW: Active Directory - User zu einer Gruppe hinzufügen
 
wüsste dennoch noch jemand, wie man das Array korrekt übergibt, wenn man die Methode über den User nutzen möchte. Welchen Typ hat das Array?

Delphi-Quellcode:
var
  lMember: Variant;
begin
  lMember := lADObj.Get('memberOf');
  lADObj.PutEx(2, 'memberOf', lMember);
  lADObj.SetInfo;
end;
Viele Grüße
Harald Schmid

TiGü 16. Jan 2023 08:55

AW: Active Directory - User zu einer Gruppe hinzufügen
 
Müsste der Rückgabetyp von
Delphi-Quellcode:
lADObj.Get('memberOf');
nicht ein
Delphi-Quellcode:
array of variant
sein?
Wenn ich mit dem ADExplorer von Sysinternals mein User-Account anschaue, hat der Syntax: DN, Count: 8 und jeder Eintrag besteht aus "CN=GUID/Gruppenname...,OU=Firmenname-Berlin,DC=Firmenname,DC=local".

ringli 16. Jan 2023 12:26

AW: Active Directory - User zu einer Gruppe hinzufügen
 
Ich kann zur Problemlösung nicht direkt etwas beitragen, aber ich habe mal durch Zufall dieses Projekt gefunden. Getestet habe ich es mangels Bedarf nicht, aber vielleicht hilft es dir ja weiter. :)

https://github.com/EdZava/VCL-ActiveDirectory4Delphi

kopernikus 18. Jan 2023 19:01

AW: Active Directory - User zu einer Gruppe hinzufügen
 
Ich habe mich vor einigen Jahren einmal mit dieser Problematik beschäftigt. Ausführliche Beschreibungen und auch die Quelltexte dazu findet man auf meiner Webseite. Vielleicht helfen diese Informationen weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 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