On 22:11 Thu 14 Sep, Torsten Flammiger wrote: > Hallo zusammen, > > kennt- oder hat jemand von Euch ein anderes oder aktuelleres > Script für den Mutt im Einsatz als das vom 31.12.1999 ? > (URL: ftp://ftp.mutt.org/pub/mutt/contrib/mutt_ldap_query.+) > Das Ding funktioniert soweit eigentlich ganz gut, hat aber > das gleiche Manko, wie die Abfrage aus dem Thundebird: > Multivalue-Attribute werden nicht berücksichtigt bzw. es wird > nur der Index 0 zurück geliefert. Vor 7 Jahren mag es noch die > Regel gewesen zu sein, das jemand nur 1 Emailadresse hatte; heute > schaut das anders aus. ALSO: ich habe mir das lbdb auch noch angesehen. Darin ist sogar eine aktuellere Version von mutt_ldap_query enthalten aber auch hier Fehlanzeige. Es findet nur den ersten Wert eines Multivalue- Attributes. Nach einem Blick in den Quellcode ist mir auch klar warum. Der Author verwendet Scalare anstatt Listen (Arrays) beim auslesen aus dem Verzeichnis. Ich habe deshalb mal ein STARK vereinfachtes Perlscript geschrieben, welches mir die gewünschte Funktionalität bietet. Natürlich bietet es keine Konfigurationsdatei und man kann es bezüglich des Filters und der Attribute noch flexibilisieren, aber es tut :-) Verzeiht die überlangen Zeilen <code> #!/usr/bin/perl -w use strict; use Getopt::Long; use Net::LDAP; my @email; my @results; my ($ldap,$entry,$mesg,$sn,$givenName,$mail); my $arg = shift @ARGV; # keine Fehlerprüfung #################### Anpassen ######################## my $ldap_server = ''; my $ldap_search_base = ''; my $ldap_bind_dn = ''; my $ldap_bind_password = ''; my $filter = '(&(objectClass=*)(|(sn=' . $arg . '*)(givenName=' . $arg . '*)(mail=' . $arg . '*)))'; ################## End Config ######################## $ldap = Net::LDAP->new($ldap_server, Port => 389, Debug => 3) or die $@; $ldap->bind($ldap_bind_dn, password=> $ldap_bind_password); $mesg = $ldap->search( base => $ldap_search_base, filter => $filter, attrs => ['sn','givenName','mail'] ) or die $@; $mesg->code && die "Search failed. LDAP server returned an error : ", $mesg->code, ", description: ", $mesg->error; my @entries = $mesg->entries; foreach $entry (@entries) { @email = $entry->get_value("mail"); $sn = $entry->get_value("sn"); $givenName = $entry->get_value("givenName"); foreach(@email) { push(@results, $_ . "\t" . $givenName . " " . $sn . "\n"); } } $ldap->unbind(); # die Statusmeldung landet in der Statusleiste des Mutt # danach kommen die Resultate in das Ergebnisfenster print "LDAP query: found ", scalar(@results), "\n", @results; </code>
Attachment:
signature.asc
Description: Digital signature