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:
2019-10-22 19:16:18 +02:00
parent 0a0aeb3a9b
commit f58797b35e
4 changed files with 137 additions and 68 deletions

72
add_attribute.pl Normal file
View 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
View 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
```

View File

@@ -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
View File

@@ -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
}