Portál AbcLinuxu, 4. prosince 2025 20:03
pokouším se napsat malý skript v perlu, který by měl z LDAP databáze vrátit comon name jednoho uživatele, jehož uid je předáno funkci jako parametr. Využívám modul Net::LDAP, skript funguje, pokud při volání funkce metody search uvedu staticky uid=jmeno, ale pokud se pokusím zadat uid=$uid, pak se hledání neprovede. Kde tedy dělám chybu? Omlouvám se za kostrbatý zápis.
sub ldap_vypis{
my ($self, $uid) = @_;
my $ldap = Net::LDAP->new('127.0.0.1');
my $mesg = $ldap->bind("cn=uzivatel,ou=Lide_skupiny,dc=firma,dc=cz",password=>"heslo");
$mesg = $ldap->search(filter=>"uid=$uid",
base=>"ou=Lide_skupiny,dc=ferram,dc=cz",
scope=>"one");
my $pol = $mesg->entry(0);
my $data = $pol->get_value("cn");
return $data;
}
A zkontroloval sis to $uid, jestli je v nem to pozadovane "jmeno". Net::LDAP sice nepouzivam, ale v tom zapisu chybu nikde nevidim.
Norbert
na 100% je v tom $uid hodnota. několikrát jsem odzkoušel.
Pak me napada jeste jeden tip a to utf8 - nevim co pozaduje LDAP server a nevim jestli ten string je v utf8 a jestli je pouzita pragma use utf8 ... ale to hle me nekdy potrapi.
Norbert
no hodnoty, které jsou v proměnné $uid uložené, jsou vždy bez diakritiky, tak to snad nemá vliv
Pak bych zkusil takovou tu magii - dat hodnotu do $uid az v te funkci a pak pouzit ... ale to uz jsi asi zkousel. Takze asi nevim.
Norbert
Jinak ty jsi někdy řešil obdobný problém? Já jsem prvoplánově použil modul Net::LDAP, ale ještě je možnost využít DBD::LDAP. Který by byl podle tebe vhodnější?
Zdraví Ondra
Neresil. Ted jsem kouknul na CPAN a DBD::LDAP pouziva pro dotazovani SQL, kdezto Net::LDAP pouziva filtry podobne jako ldapsearch - to je myslim definovane v nejakem RFC. Zivejsi podle poctu verzi a cerstvosti mi prijde NET::LDAP - to casto znamena, ze je dany modul lepsi.
Norbert
sub ldap_vypis{
my ($self, $uid) = @_;
my $ldap = Net::LDAP->new('127.0.0.1:389');
my $mesg = $ldap->bind("cn=uzivatel,ou=Lide_skupiny,dc=firma,dc=cz",password=>"heslo");
$mesg = $ldap->search(filter=>"uid=$uid",
base=>"ou=Lide_skupiny,dc=ferram,dc=cz",
scope=>"sub",
attrs=>['cn']);
$mesg->code && die $mesg->error;
foreach my $zaznam (mesg->entry){
print $zaznam->get_value("cn")."\n";
}
}
$uid inicializovano? Podle toho kodu je uvedena rutina zrejme metodou objektu. Je mi ale divne, ze nikde dal $self nepouzijes... Principialne tam chybu nevidim. Melo by to fungovat pokud je funkce zavolana jednim z nasledujicich zpusobu
$objekt->ldap_vypis('jmeno');ldap_vypis($objekt, 'jmeno');
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.