Table of Contents

Fil Rouge

Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi Mémos : Perl / Python / Ruby

LDAP for the beginners - Perl

1

Se connecter au serveur LDAP

perl

 1: use Net::LDAP;
 2: use Data::Dumper ;
 3:
 4: use strict ;
 5:
 6: my $ldap = Net::LDAP->new( 'http://directory.example.com:10389',"onerror"=>"die" ) or die "$@";
 7: $ldap->bind(                         # bind avec un dn et un password
 8:              'uid=admin,ou=system',
 9:              password => 'secret'
10:            ) or die $! ;
11:
12: ...
13:
14: $ldap->unbind() ;

2

Créer une entrée de type organizationalUnit correspondant à votre laboratoire (ex : UMR9999), afin de travailler dans votre propre sous-arborescence.

perl

 1: my $my_ID=9999 ;
 2: my $my_OU = "ou=UMR$my_ID,ou=fil_rouge_ldap_1,dc=example,dc=com" ;
 3: my $result = $ldap->add(
 4:                       $my_OU,
 5:                       attr => [
 6:                                 'objectclass' => ['top',
 7:                                                   'organizationalUnit' ],
 8:                               ]
 9:                     );
10:
11: $result->code() && warn "failed to add entry: ", $result->error() ;

3

En dessous de votre entrée « UMR9999 », créer une entrée de type organizationalUnit que vous nommerez « groups ».

perl

 1: my $result = $ldap->add(
 2:                       'ou=groups,$my_OU
 3:                       , attr => [
 4:                                 'objectclass' => ['top',
 5:                                                   'organizationalUnit' ],
 6:                               ]
 7:                     );
 8:
 9: $result->code() && warn "failed to add entry: ", $result->error() ;

4

En dessous de votre entrée « UMR9999 », créer une entrée de type organizationalUnit que vous nommerez « users ».

perl

 1: my $result = $ldap->add(
 2:                         "ou=users,$my_OU"
 3:                       , attr => [
 4:                                 'objectclass' => ['top',
 5:                                                   'organizationalUnit' ],
 6:                               ]
 7:                     );
 8:
 9: $result->code() && warn "failed to add entry: ", $result->error() ;

5

En dessous de votre entrée « UMR9999 / groups », vous allez créer 10 entrées de type posixGroup.

perl

 1: for my $i (1..10)
 2: {
 3:   my $result = $ldap->add(
 4:                         "cn=group_$i,ou=groups,$my_OU"
 5:                       , attr => [
 6:                                 'objectclass' => ['top',
 7:                                                   'posixGroup' ],
 8:                                 'gidNumber' => $i
 9:                               ]
10:                     );
11:    $result->code() && warn "failed to add entry: ", $result->error() ;
12: }

6

Lister tous les groupes.

perl

 1: my $entries = $ldap->search(
 2:                                "base" => "ou=groups,$my_OU"
 3:                              , "scope" => "sub"
 4:                              , "filter" => "objectClass=posixGroup"
 5:                            ) ;
 6:
 7: for my $e ($entries->entries())
 8: {
 9:    print $e->get_value("cn") ;
10: }

7

En dessous de votre entrée « UMR9999 / users », vous allez créer 50 entrées de type posixAccount comportant les attributs uid, sn, uidNumber, gidNumber, mail et userPassword.

perl

 1: for my $i (1..50)
 2: {
 3:   my $result = $ldap->add(
 4:                         "cn=user$i,ou=users,$my_OU"
 5:                       , attr => [
 6:                                'objectclass' => ['top',
 7:                                                   "shadowAccount",
 8:                                                   "inetOrgPerson",
 9:                                                   "posixAccount"],
10:                                 'uid' => "user$i",
11:                                 'sn' => "User $i",
12:                                 'uidNumber' => "$i",
13:                                 'gidNumber' => $id,
14:                                 'homeDirectory' => "/home/user$i",
15:                                 'mail' => "user.$i\@example.com",
16:                                 'userPassword' => ''
17:                               ]
18:                     );
19:    $result->code() && warn "failed to add entry: ", $result->error() ;
20: }

8

Lister tous les utilisateurs.

perl

1: my $entries = $ldap->search(
2:                           "base" => "ou=users,$my_OU"
3:                         , "scope" => "sub"
4:                         , "filter" => "objectClass=inetOrgPerson"
5:                         ) ;
6: print join(",", map { $_->get_value("uid") ; } $entries->entries()) ;

9

Retirer les 25 derniers utilisateurs ajoutés.

perl

1: for my $i  (26..50)
2: {
3:   my $result = $ldap->delete("cn=user$i,ou=users,$my_OU") ;
4:   $result->code() && warn "failed to delete entry: ", $result->error() ;
5: }

10

Ajouter des utilisateurs dans les groupes.

perl

 1: for my $i (1..50)
 2: {
 3:   for my $j ( $i%10+1, ($i+1)%10+1 )
 4:   {
 5:     my $result = $ldap->modify(
 6:                      "cn=group_$j,ou=groups,$my_OU"
 7:                    , add => {
 8:                             'memberUid' => "user$i"
 9:                           }
10:                  );
11:     $result->code() && warn "failed to add attribute: ", $result->error() ;
12:   }
13: }

11

Lister tous les membres du groupe « groupe_10 ».

perl

 1: my $result = $ldap->search(
 2:                  "base" => "cn=group_10,ou=groups,$my_OU
 3:                , "scope" => "sub"
 4:                , "filter" => "objectClass=posixGroup"
 5:              ) ;
 6:
 7: for my $e ($result->entries())
 8: {
 9:   print join(", ", $e->get_value("memberUid")) ;
10: }

12

Lister tous les groupes auquels appartient l'utilisateur « user15 ».

perl

 1: my $entries = $ldap->search(
 2:                           "base" => "ou=groups,$my_OU",
 3:                         , "scope" => "sub"
 4:                         , "filter" => "memberUid=user15"
 5:                         ) ;
 6:
 7: for my $e ($entries->entries())
 8: {
 9:   printf("%s: %s\n",$e->get_value('cn')
10:                 ,join(", ", $e->get_value("memberUid"))) ;
11: }

13

Retirer des utilisateurs des groupes.

perl

 1: for my $i (1..10)
 2: {
 3:   my $entries = $ldap->search(
 4:                           "base" => "ou=groups,$my_OU",
 5:                         , "scope" => "sub"
 6:                         , "filter" => "objectClass=posixGroup"
 7:                         ) ;
 8:
 9: for my $e ($entries->entries())
10: {
11:   $e->delete('memberUid') ;
12:   $e->update($ldap) ;
13: }