rajout doc
mise au point password.pl qui prend une branche en parametre mise au point add_attribute.pl qui rajoute l'OC le cas echeant
This commit is contained in:
72
add_attribute.pl
Normal file
72
add_attribute.pl
Normal file
@@ -0,0 +1,72 @@
|
||||
#/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use Net::LDAP;
|
||||
use Text::CSV;
|
||||
|
||||
my $ldapserver = "localhost";
|
||||
my $binddn = "cn=manager,o=od";
|
||||
my $bindpw = "123Soleil" ;
|
||||
|
||||
my $ldap = Net::LDAP->new( $ldapserver ) or die "$@" ;
|
||||
|
||||
my $mesg = $ldap->bind( $binddn,
|
||||
password => $bindpw
|
||||
);
|
||||
|
||||
$mesg->code and die $mesg->error; # check for errors
|
||||
my $csv = Text::CSV->new({ sep_char => ';' }) ;
|
||||
my $file = $ARGV[0] or die "Need to get CSV file on the command line\n" ;
|
||||
|
||||
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
|
||||
my @cols = @{$csv->getline ($data)};
|
||||
foreach my $c (@cols){
|
||||
print "column: ". $c ."\t" ;
|
||||
}
|
||||
print "\n" ;
|
||||
my $row = {} ;
|
||||
$csv->bind_columns (\@{$row}{@cols});
|
||||
while ($csv->getline ($data)) {
|
||||
my $dn = $row->{dn} ;
|
||||
if ( $dn =~ /^dn / ) { next ; }
|
||||
my $idTechnique = $row->{idTechnique} ? $row->{idTechnique} : "UNDEFINED" ;
|
||||
my $question1 = $row->{question1} ? $row->{question1} : "UNDEFINED" ;
|
||||
my $question2 = $row->{question2} ? $row->{question2} : "UNDEFINED" ;
|
||||
my $question3 = $row->{question3} ? $row->{question3} : "UNDEFINED" ;
|
||||
my $reponse1 = $row->{reponse1} ? $row->{reponse1} : "UNDEFINED" ;
|
||||
my $reponse2 = $row->{reponse2} ? $row->{reponse2} : "UNDEFINED" ;
|
||||
my $reponse3 = $row->{reponse3} ? $row->{reponse3} : "UNDEFINED" ;
|
||||
my $siren = $row->{siren} ? $row->{siren} : "UNDEFINED" ;
|
||||
my $civilite = $row->{civilite} ? $row->{civilite} : "UNDEFINED" ;
|
||||
my $userPassword = $row->{userPassword} ;
|
||||
my $userPassword = `slappasswd -n -s $userPassword` ;
|
||||
|
||||
my $mesg = $ldap -> search(
|
||||
scope => 'base',
|
||||
attrs => ['1.1'],
|
||||
filter => '(objectClass=klesiaentreprise)',
|
||||
base => $dn,
|
||||
);
|
||||
if( $mesg-> count() == 0 ) {
|
||||
my $mesg = $ldap-> modify( $dn,
|
||||
add => {
|
||||
objectClass => 'klesiaentreprise',
|
||||
});
|
||||
}else{
|
||||
warn $dn . " already of type klesia\n" ;
|
||||
my $mesg = $ldap-> modify( $dn,
|
||||
changes=> [
|
||||
replace => [ 'idTechnique' => $idTechnique ],
|
||||
replace => [ 'question1' => $question1 ],
|
||||
replace => [ 'question2' => $question2 ],
|
||||
replace => [ 'question3' => $question3 ],
|
||||
replace => [ 'reponse1' => $reponse1 ],
|
||||
replace => [ 'reponse2' => $reponse2 ],
|
||||
replace => [ 'reponse3' => $reponse3 ],
|
||||
replace => [ 'siren' => $siren],
|
||||
replace => [ 'civilite' => $civilite],
|
||||
replace => [ 'userPassword' => $userPassword ],
|
||||
]
|
||||
) ;
|
||||
$mesg->code and warn $dn."\t".$mesg->error; }
|
||||
}
|
||||
50
doc.md
Normal file
50
doc.md
Normal file
@@ -0,0 +1,50 @@
|
||||
##### Documentation
|
||||
|
||||
#### Définition des nouveaux attributs
|
||||
|
||||
Avant de pouvoir ajouter les nouveaux attributs aux objets ldap existants, il
|
||||
faut rajouter leur définition auprès du serveur LDAP.
|
||||
|
||||
Cela se fait en injectant le fichier **klesia_entreprise_schema.ldif** via la
|
||||
commande:
|
||||
```bash
|
||||
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f klesia_entreprise_schema.ldif
|
||||
|
||||
Il faut ensuite rajouter l'attribut objectClass avec la valeur klesiaentreprise
|
||||
à tous les objets à qui on souhaite ajouter les attributs.
|
||||
```
|
||||
|
||||
#### Script 1 : add_attributes.pl
|
||||
|
||||
Ce script est responsable de l'ajout de la classe d'objet décrit ci-dessus d'une
|
||||
part, et de l'ajout des attributs supplémentaires d'autre part.
|
||||
|
||||
Il attend en entrée un fichier csv ayant la structure suivante:
|
||||
dn de l'entrée à modifier
|
||||
nom attribut 1
|
||||
valeur attribut 1
|
||||
...
|
||||
nom attribut n
|
||||
valeur attribut n
|
||||
|
||||
Chaque champ étant séparé par un ;
|
||||
|
||||
|
||||
Pour chaque ligne du fichier csv:
|
||||
- vérification de la présence de l'attribut objectClass=klesiaEntreprise
|
||||
- rajout de cet attribut le cas échéant.
|
||||
- pour chaque attribut:
|
||||
- mise à jour de l'attribut avec la valeur correspondante
|
||||
|
||||
|
||||
#### Script 2 : password.pl
|
||||
|
||||
Ce script va modifier toutes les entrées d'une branche ldap donnée ayant un
|
||||
attribut **userPassword** non déjà hashé.
|
||||
|
||||
Il prend en entrée le dn de la branche à modifier.
|
||||
|
||||
Ex d'utilisation:
|
||||
```
|
||||
perl password.pl ou=PeopleEnt,o=od
|
||||
```
|
||||
16
password.pl
16
password.pl
@@ -9,7 +9,9 @@ use Net::LDAP;
|
||||
my $ldapserver = "localhost";
|
||||
my $binddn = "cn=manager,o=od";
|
||||
my $bindpw = "123Soleil" ;
|
||||
my $base = 'ou=peopleEnt,o=od' ;
|
||||
|
||||
|
||||
my $base = $ARGV[0] or die 'gimme a valid ldap base\n' ;
|
||||
|
||||
my $ldap = Net::LDAP->new( $ldapserver ) or die "$@" ;
|
||||
|
||||
@@ -19,6 +21,18 @@ my $mesg = $ldap->bind( $binddn,
|
||||
|
||||
$mesg->code and die $mesg->error; # check for errors
|
||||
|
||||
$mesg = $ldap->search(
|
||||
scope => 'base',
|
||||
attrs => ['1.1'],
|
||||
base => $base ,
|
||||
filter=> '(objectClass=*)',
|
||||
);
|
||||
die $mesg->error if $mesg->code ;
|
||||
|
||||
if( $mesg -> count() ==0 ) {
|
||||
die( "Wrong base or unknown error\n") ;
|
||||
}
|
||||
|
||||
$mesg = $ldap->search(
|
||||
base=> $base,
|
||||
filter=>"(&(objectClass=person)(userpassword=*))",
|
||||
|
||||
67
test.pl
67
test.pl
@@ -1,67 +0,0 @@
|
||||
#/usr/bin/perl
|
||||
|
||||
# on abandonne python pour perl
|
||||
# ce script est capable de rajouter l'attribut description avec une valeur issue
|
||||
# d'un fichier csv passé en argument
|
||||
use strict;
|
||||
use Net::LDAP;
|
||||
use Text::CSV;
|
||||
|
||||
my $ldapserver = "localhost";
|
||||
my $binddn = "cn=manager,o=od";
|
||||
my $bindpw = "123Soleil" ;
|
||||
|
||||
my $ldap = Net::LDAP->new( $ldapserver ) or die "$@" ;
|
||||
|
||||
my $mesg = $ldap->bind( $binddn,
|
||||
password => $bindpw
|
||||
);
|
||||
|
||||
$mesg->code and die $mesg->error; # check for errors
|
||||
my $csv = Text::CSV->new({ sep_char => ';' }) ;
|
||||
my $file = $ARGV[0] or die "Need to get CSV file on the command line\n" ;
|
||||
|
||||
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
|
||||
my @cols = @{$csv->getline ($data)};
|
||||
foreach my $c (@cols){
|
||||
print "columne: ". $c ."\t" ;
|
||||
}
|
||||
my $row = {} ;
|
||||
$csv->bind_columns (\@{$row}{@cols});
|
||||
while ($csv->getline ($data)) {
|
||||
my $dn = $row->{dn} ;
|
||||
# my $mesg = $ldap-> search(
|
||||
# base=> $dn,
|
||||
# scope=> "base",
|
||||
# filter=> "(description=".$attr1.")") ;
|
||||
# print $mesg->count() ;
|
||||
# if ($mesg->count() != 0) { next ; }
|
||||
my $idTechnique = $row->{idTechnique} ? $row->{idTechnique} : "xx" ;
|
||||
my $question1 = $row->{question1} ? $row->{question1} : "xx" ;
|
||||
my $question2 = $row->{question2} ? $row->{question2} : "xx" ;
|
||||
my $question3 = $row->{question3} ? $row->{question3} : "_" ;
|
||||
my $reponse1 = $row->{reponse1} ? $row->{reponse1} : "_" ;
|
||||
my $reponse2 = $row->{reponse2} ? $row->{reponse2} : "_" ;
|
||||
my $reponse3 = $row->{reponse3} ? $row->{reponse3} : "_" ;
|
||||
my $siren = $row->{siren} ? $row->{siren} : "" ;
|
||||
my $civilite = $row->{civilite} ? $row->{civilite} : "" ;
|
||||
my $userPassword = $row->{userPassword} ;
|
||||
my $userPassword = `slappasswd -n -s $userPassword` ;
|
||||
print $dn."\t >>".$question3 ."<<\n";
|
||||
my $mesg = $ldap-> modify( $dn,
|
||||
changes=> [
|
||||
replace => [ 'objectClass' => 'klesiaentreprise' ],
|
||||
replace => [ 'idTechnique' => $idTechnique ],
|
||||
replace => [ 'question1' => $question1 ],
|
||||
replace => [ 'question2' => $question2 ],
|
||||
replace => [ 'question3' => $question3 ],
|
||||
replace => [ 'reponse1' => $reponse1 ],
|
||||
replace => [ 'reponse2' => $reponse2 ],
|
||||
replace => [ 'reponse3' => $reponse3 ],
|
||||
replace => [ 'siren' => $siren],
|
||||
replace => [ 'civilite' => $civilite],
|
||||
replace => [ 'userPassword' => $userPassword ],
|
||||
]
|
||||
) ;
|
||||
$mesg->code and warn $mesg->error; # check for errors
|
||||
}
|
||||
Reference in New Issue
Block a user