Portál AbcLinuxu, 9. května 2025 05:58
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.