Portál AbcLinuxu, 9. května 2025 05:58

Dotaz: Perl a Net::LDAP

6.2.2009 22:17 aquilegia | skóre: 4
Perl a Net::LDAP
Přečteno: 354×
Odpovědět | Admin

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;
    }
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.2.2009 22:38 Norbert Volf | skóre: 8 | blog: norbert
Rozbalit Rozbalit vše Re: Perl a Net::LDAP
Odpovědět | | Sbalit | Link | Blokovat | Admin

A zkontroloval sis to $uid, jestli je v nem to pozadovane "jmeno". Net::LDAP sice nepouzivam, ale v tom zapisu chybu nikde nevidim.

Norbert

6.2.2009 22:46 aquilegia | skóre: 4
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

na 100%  je v tom $uid hodnota. několikrát jsem odzkoušel.

6.2.2009 23:01 Norbert Volf | skóre: 8 | blog: norbert
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

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

 

6.2.2009 23:11 aquilegia | skóre: 4
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

no hodnoty, které jsou v proměnné $uid uložené, jsou vždy bez diakritiky, tak to snad nemá vliv

6.2.2009 23:18 Norbert Volf | skóre: 8 | blog: norbert
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

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

6.2.2009 23:00 aquilegia | skóre: 4
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

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

6.2.2009 23:09 Norbert Volf | skóre: 8 | blog: norbert
Rozbalit Rozbalit vše Re: Perl a Net::LDAP

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

20.7.2011 14:44 pogomaniak
Rozbalit Rozbalit vše Re: Perl a Net::LDAP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já bych to zkusil takto:
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";
    }
}
28.7.2011 11:57 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Perl a Net::LDAP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Urcite je $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

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.