# echo Tmljb2zDsiBFZG9hcmRv | base64 --decode
Nicolò Edoardo
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.
-e "s/displayName:\ \(.*\)$/displayName: \1\nsn: \1\nou:[...]
utenti\nobjectClass: top\nobjectClass: inetOrgPerson/"> $ldap_ns_path
Mah, ma me pare che funzioni rimuovendo la parte '-e "s/$container_ns/$container_ab/"' che non posso testare in quanto non
so cosa ci sia nelle variabili container_ns e container_ab . Magari
c'è qualcosa di strano che interferisce?
Ciao Piviul,
Il giorno mar, 12/03/2024 alle 10.18 +0100, Piviul ha scritto:
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.
-e "s/displayName:\ \(.*\)$/displayName: \1\nsn: \1\nou:[...]
utenti\nobjectClass: top\nobjectClass: inetOrgPerson/"> $ldap_ns_path
Mi pare di capire che sed sostituisca solo le linee che contengono "displayName:" seguito da uno spazio. Nel tuo caso "displayName:" non è seguito da uno spazio, ma dal secondo ":", sicché sed non lo prende in considerazione. Forse dovresti cambiare l'espressione con le regex estese, così:
sed -E -e "s/displayName(:|::)\ (.*)$/displayName\1 \2/"
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
echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e
"s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/"
Purtroppo non funziona, restituisce l'errore "base64: input non valido"
Piviul ha scritto:
echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e$ eval $(echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.*
"s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/"
Purtroppo non funziona, restituisce l'errore "base64: input non valido"
)$/echo \"\1 \$(echo \2 | base64 -i --decode)\"/")
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 297 |
Nodes: | 16 (2 / 14) |
Uptime: | 06:26:18 |
Calls: | 6,666 |
Files: | 12,213 |
Messages: | 5,336,026 |