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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| use MIME::Base64;
use warnings;
# Initialisation du programme
if(not defined $sn_exists){
$sn_exists = 0;
$cn_exists = 0;
# Chemin de la base LDAP ou seront stockés les contacts
$basedn=",ou=plopme,ou=carnets,dc=plopplop,dc=fr";
$unknown_index = 1;
}
if($_ =~ /^sn:/){
$sn_exists = 1;
}
if($_ =~ /^cn:/){
$cn_exists = 1;
}
if($_ =~ /^$/){
if($sn_exists == 0){
print "sn: not given\n";
}
# Si l'attribut "cn" n'existe pas, on doit en créer un
# sinon LDAP va compléter le champ avec LDAP_NAMING_VIOLATION
if($cn_exists == 0){
print "cn: " . $cn . "\n";
}
$sn_exists = 0;
$cn_exists = 0;
}
# On décode les lignes encodée en BASE64 pour notre substitution
if($_ =~ /^(\w+):: (.*)/){
$_ = sprintf("%s: %s\n", $1, decode_base64($2));
}
# On doit vérifier l'attribut "cn" de la ligne "dn" car certains contacts
# n'ont pas d'attribut "mail=" définit, on doit donc ajouter notre champ
# à la fin de la ligne
if($_ =~ /^(dn:+\s*)/){
$prefix = $1;
$cn = $_;
# On enlève le retour à la ligne
chop $cn;
# Extraction du champ cn de la ligne dn
$cn =~ s/^dn:+\s*cn=([^=]+)(,\s*mail=.*)??$/$1/;
# Si la ligne cn n'est pas renseignée, elle doit commencer par "dn:"
# on doit donc vérifier cela, et donner un nom unique pour cette entrée
if($cn =~ /^dn:/){
$cn = "NoName " . $unknown_index++;
}
# On effectue une vérification sur le champ cn (pas de virgules)
$cn =~ s/,/ /g;
# On créer un nouveau champ "dn"
$_ = $prefix . "cn=" . $cn . $basedn . "\n";
}
if($_ =~ /^(cn:+\s*)/){
$_ = $1 . $cn . "\n";
}
# Suppression ou modification des champs inutiles, et non reconnu par Iplanet Directory Server
s/^homeStreet:/mozillaHomeUrl:/;
s/^modifytimestamp.*\n//;
s/^xmozillausehtmlmail.*\n//;
s/^nsAIMid.*\n//;
# Modification des champs Objectclass et ajout du champ groupeunix (necessaire pour les ACL)
s/^objectclass: mozillaAbPersonObsolete.*\n//;
s/^objectclass: mozillaAbPersonAlpha.*\n//;
s/^objectclass: organizationalPerson.*\n//;
s/^objectclass: mozillaOrgPerson*\n//;
s/^objectclass: inetOrgPerson.*/groupeunix: ditiric/;
s/^objectclass: person.*/objectclass: extensibleObject/; |
Partager