# ------------------------------------------------------------------ # 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"; }