[Dresden-pm] Frage zu Net::LDAP::LDIF

Hans-Dietrich Kirmse hd.kirmse at gmx.de
Sa Aug 4 06:32:48 PDT 2007


Hallo,

euer Zaungast aus Thüringen braucht wiedermal Hilfe ;)

Ich habe den LDAP-Workshop durchgeackert und da dieser sehr verständlich 
geschrieben ist, erschließt sich mir trotz fehlender Englischkenntnisse 
auch die (bei weitem nicht so eingängige) Doku zu anderen LDAP-Modulen.

Mein Problem: ich möchte den LDAP nach etwas abfragen und das Ergebnis 
der Abfrage in ein LDIF-File schreiben bzw. auf die Standardausgabe.
Das mit den LDIF-File gelingt problemlos (ob das besser geht, weiss ich 
nicht, wäre aber für Hinweise dankbar), aber mein eigentliches Problem 
ist: wie schreibe ich das auf die Standardausgabe?

was bei mir auch nicht geklappt hat, dass in dem LDIF-File dann die
Version steht. will sagen, eine Zeile wie:

     $ldif->write_version();

geht bei mir nicht. :(


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/perl -w
use strict;

use Net::LDAP;
use Net::LDAP::LDIF;

my $myfile = '/home/schueler_daten.ldif';
my $filter = 'uid=*';

my (@daten, $ldap_base, $ldap, $mesg, $ldif);

# wir oeffnen die die ldap.conf
open DATEI, '<', '/etc/ldap.conf'
   or die "konnte ldap.conf nicht oeffnen, $!\n";

# wir lesen solange Zeilen ein, bis wir die Suchbasis ($ldap_base) haben
while (my $zeile = <DATEI>) {
   if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/) {
     $ldap_base = $1;
     last;
   }
}

# wir schliessen die Datei
close DATEI;


# wir verbinden uns mit den LDAP
$ldap = Net::LDAP->new('127.0.0.1',version => 3) or die "$@";
$ldap->bind or die "konnte mich nicht mit dem Server verbinden";

# wir holen uns von den Schuelern die Daten (in denen das Login steht)
$mesg = $ldap->search(base => "ou=SCHUELER, o=SCHULE, $ldap_base",
                       filter => $filter );
$mesg->code and die $mesg->error;

# wir trennen uns vom LDAP
$ldap->unbind;

# wir schreiben die Datensaetze in das File
$ldif = Net::LDAP::LDIF->new( $myfile, "w", onerror => 'undef' );
$ldif->write_entry($mesg->entries);
$ldif->done();

__END__


Für eure Hinweise im Voraus meinen Dank

Mit freundlichen Grüßen
Hans-Dietrich