[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: aktuelles ldap-query-Programm für Mutt



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


Reply to: