Thread LDAP Daten Auslesen und weiter Verarbeiten (24 answers)
Opened by Rambo at 2018-08-08 09:02

thomas38
 2018-08-14 21:48
#188797 #188797
User since
2012-11-04
30 Artikel
BenutzerIn
[default_avatar]
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";
}

View full thread LDAP Daten Auslesen und weiter Verarbeiten