-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« Linux Journal pubblica "An Introduction to perl-ldap" | Home | YAPC::EU::2005: I video dei talk »

LDAP da Perl: si può ed è semplice
30.09.05

In questa puntata analizziamo un interessante, e non sufficientemente conosciuta, distribuzione di moduli Perl, e cioè quelli che permettono di utilizzare il protocollo LDAP. In particolare verrà mostrato un esempio di utilizzo del modulo Net::LDAP.

LDAP da Perl: si può ed è semplice

Se avete avuto a che fare con un Directory Server basato sul protocollo LDAP e vi è sembrato che le cose fossero più complicate del dovuto, rilassatevi, forse avevate solo sbagliato linguaggio. Quelli basati su LDAP sono database non relazionali particolarmente efficienti in lettura e vengono largamente utilizzati per mantenere dati relativi ad utenze, ad esempio di posta o di sistema, ed informazioni relative ad organizzazioni o aziende. Perl dispone di un ottimo modulo, e cioè Net::LDAP, che fa parte della distribuzione perl-ldap, che permette non solo di accedere a database online ma anche di manipolare dump di DB LDAP nel classico formato ldif, e di accedere allo schema di un database. Vedremo un breve esempio di utilizzo del modulo per creare una classe utente che si appoggi ad un LDAP per la memorizzazione dei dati, che mostrerà quanto sia semplice con poche righe di codice accedere ad un simile backend.

Il codice visbile in Listato 1 mostra il codice della classe User, da memorizzare in un file User.pm Alla linea 2 viene importato il modulo Net::LDAP. Le linee 6-26 sono il costruttore della classe che prende come parametro lo username. Dopo aver ottenuto una connessione al DB con le credenziali del caso, si esegue una query per ottenere i dati relativi all'utente, linee 14-18. La query specifica come parametri il nodo di partenza della ricerca, ricordiamo che i DB LDAP organizzano le informazioni in una struttura ad albero, lo scope della ricerca, ovvero sul nodo stesso, sui figli diretti o su tutto il sottoalbero, il filtro della ricerca che specifica condizioni sugli attributi del nodo, ed infine la lista degli attributi da recuperare, nel nostro caso non specificata. Le linee 22-23 memorizzano in uno hash tutti gli attributi dell'utente per poi inserirli in un data member dell'oggetto nelle linee successive. Infine la linea 25 crea la struttura dell'oggetto utente (su base hash) e lo "benedice", come si dice in Perl, nel tipo User o in quello di una classe derivata a seconda di come viene invocato il costruttore. Quanto riportato in Listato 2 è uno stralcio di codice applicativo che crea un oggetto della classe utente, linea 3, e lo utilizza per verificare la sua password, linee 4-5.

Lo spazio a nostra disposizione non consente di approfondire oltre, ma vi invito a sperimentare; scoprirete che l'accoppiata Perl+LDAP grazie alla bontà del modulo ed alla naturalezza con cui in Perl si utilizza LDAP è vincente.

Listato 1

 1  use strict;
 2  use Net::LDAP;
 3
 4  package User;
 5
 6  sub new {
 7      my $class = shift;
 8      my $username = shift;
 9
10      my $ldap = Net::LDAP->new('server:port', onerror => 'die') or die "$@";
11      $ldap->bind('uid=admin,ou=Admins,dc=MyCompany,dc=it',
12                  password => 'mypasswd') or die "$@";
13
14      my $result = $ldap->search(
15                         base   => "uname=$username,ou=Users,dc=MyCompany,dc=it",
16                         scope  => 'base',
17                         filter => 'objectclass=*',
18                       );
19      my $entry = [$result->all_entries]->[0];
20      $ldap->unbind;
21
22      my %attrs;
23      $attrs{$_} = $entry->get_value($_) foreach ($entry>attributes);
24
25      bless { _attrs => \%attrs }, $class;
26  }
27
28  sub check_password {
29      my $self = shift;
30      my $passwd = shift;
31      return $self->{'_attrs'}->{'password'} eq $passwd;
32  }
33
34  1;

Listato 2

1   use User;
2   ...
3   my $user = User->new("mario");
4   if ($user->check_password("test")) {
5       print "Password corretta\n";
6   ...

Inviato da larsen il 30.09.05 16:03
Ti è piaciuto questo articolo? Iscriviti al feed!

Inviato da Gioachino Bisconti il 05.05.06 14:47

Ottimo articolo. Si potrebbe dire di più in particolar modo all'uso di LDAP e Active Directory di Windows.

Uso LDAP da anni e mi ha sempre dato ottimi risultati. Ora sto cercando di capirne la logica con active directory.

Se qualcuno ha già affrontato l'argomento sarò ben lieto di leggere qualche riga di codice ;)

Buona giornata










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google