Ciao a tutti, ho uno script che interroga (ldapsearch) alcuni campi di
un db ldap e aggiunge alcuni altri ammenicoli che poi importa in un
altro db sempre ldap.
In particolare nello script ad un certo punto ho questo codice:
ldapsearch -LLL \
-D "$bind_ns" \
-w "$pwd_ns" \
-b "$baseaddress_ns" \
-H "ldaps://ad.csaricerche.com" \
'(&(objectClass=user)(!(isCriticalSystemObject=TRUE))(!(logonCount=0))(memberOf=CN=utenti,CN=Users,DC=ad,DC=csaricerche,DC=com))' \
sAMAccountName displayName userPrincipalName | \
sed -e 's/userPrincipalName:/mail:/' \
-e "s/$container_ns/$container_ab/" \
-e "s/sAMAccountName:\ \(.*\)/cn: \1/" \
-e "s/displayName:\ \(.*\)$/displayName: \1\nsn: \1\nou:
utenti\nobjectClass: top\nobjectClass: inetOrgPerson/"> $ldap_ns_path
che in altre parole vorrebbe semplicemente interrogare sAMAccountName
displayName userPrincipalName ed aggiungere sn con la stessa cosa che
trova in userPrincipalName e poi altri ammenicoli necessari per
l'importazione successiva in un altro db.
Il tutto ha funzionato bene per anni ma ora in displayName di un record
è stata inserita un'accentata e questo fa si che il comando sopra, al
record contenente un'accentata, non venga aggiunto né sn né gli altri
ammenicoli mentre compaioni : aggiuntivi al displayName.
In altre parole per il record in questione viene restituito come
dn: CN=enicolo,OU=UsersAndGroups,DC=ad,DC=mydomain,DC=ext
cn: enicolo
mail: enicolo@mydomain.ext
displayName:: Tmljb2zDsiBFZG9hcmRv
dove Tmljb2zDsiBFZG9hcmRv è la stringa contenente una o accentata
codificata in base64:
# echo Tmljb2zDsiBFZG9hcmRv | base64 --decode
Nicolò Edoardo
Invece sed avrebbe dovuto restituire
dn: CN=enicolo,OU=UsersAndGroups,DC=ad,DC=mydomain,DC=ext
cn: enicolo
mail: enicolo@mydomain.ext
displayName: Tmljb2zDsiBFZG9hcmRv
sn: Tmljb2zDsiBFZG9hcmRv
ou: utenti
objectClass: top
objectClass: inetOrgPerson
Qualcuno ha qualche idea di cosa dabbia fastidio a sed?
Grazie
Piviul