Thread LDAP Daten Auslesen und weiter Verarbeiten
(24 answers)
Opened by Rambo at 2018-08-08 09:02
Hallo Rambo,
die E-Mail-Adressen _aller_ Benutzer müssen zuerst komplett ermittelt werden. Deshalb der Hash '%email_by_dn', der in der ersten foreach-Schleife komplett befüllt wird. In der 2. foreach-Schleife werden daraus nur die Werte gelesen. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # ------------------------------------------------------------------ # search LDAP database # ------------------------------------------------------------------ $mesg = $ldap->search( base=>$ldap_base_dir, filter => '(userAccountControl:1.2.840.113556.1.4.803:=512)'; # nur Benutzer #Liefert _alle_Einträge des AD: filter => "(&(objectclass=*)(sn=*))"); #filter=>"(name=*)", # # Hier fehlt noch die Fehlerbehandlung, falls $ldap->search fehlschlägt # # # Vermutlich fehlt noch das "bind" ... # my @entries = $mesg->entries; # 1. Schritt: Die E-Mail-Adressen _aller_ Benutzer ermitteln # Die E-Mail-Adressen werden im Hash '%email_by_dn' gespeichert: # z.B.: $email_by_dn{"DN=cn=Karl..."}='Karl.Koffer@example.com' my %email_by_dn; foreach my $entry (@entries) { my $dn = $entry->dn(); # Hinweis: der DN wird nicht mit get_value ermittelt my $mail = $entry->get_value('mail'); $email_by_dn{$dn}=$mail; } # 2. Schritt: Alle Benutzer prüfen # und dabei die E-Mail des Managers ermitteln foreach my $entry (@entries) { my $samACC = $entry->get_value('samAccountName'); my $name = $entry->get_value('name'); my $descr = $entry->get_value('description'); my $mail = $entry->get_value('mail'); my $expired = readable_date($entry->get_value('accountExpires')); my $dn = $entry->dn(); my $manager = $entry->get_value('manager'); my $mgmt_mail = $email_by_dn{$manager}; print "USER='$samACC' Manager-mail='$mgmt_mail'\n"; } |