On 3/12/24 14:44, Diego Zuccato wrote:
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?
hai ragione, non lo puoi verificare e mi scuso, comunque ho risolto.
Questo codice ora funziona:
ldapsearch -LLL \
-D "$bind_ns" \
-w "$pwd_ns" \
-b "$baseaddress_ns" \
-H "ldaps://ad.mydomain.ext" \
'(&(objectClass=user)(!(isCriticalSystemObject=TRUE))(!(logonCount=0))(memberOf=CN=utenti,CN=Users,DC=ad,DC=mydomain,DC=ext))'
\
sAMAccountName displayName userPrincipalName | \
sed -e 's/userPrincipalName:/mail:/' \
-e "s/$container_ns/$container_ab/" \
-e "s/sAMAccountName:\ \(.*\)/cn: \1/" \
-e "s/displayName:[[:space:]]*\([[:print:]]*\)$/displayName:
\1\nsn: \1\nou: utenti\nobjectClass: top\nobjectClass: inetOrgPerson/">
$ldap_ns_path
in cui mi limito a prendere tutti i caratteri stampabili invece di
prendere tutti i caratteri dopo displayName:[[:space:]].
Ora l'utente incriminato viene restituito come:
dn: CN=enicolo,OU=UsersAndGroups,DC=ad,DC=mydomain,DC=ext
cn: enicolo
mail: enic...@mydomain.ext
displayName: : Tmljb2zDsiBFZG9hcmRv
sn: : Tmljb2zDsiBFZG9hcmRv
ou: utenti
objectClass: top
objectClass: inetOrgPerson
Mi rimane solo da decodificare displayName e sn, stringhe in bas64...
per fortuna ldapsearch aggiunge ":" alle stringhe codificate in bas64
così supponendo che non ci siano ":" nei campi restituiti da ldapsearch
(sAMAccountName, displayName e userPrincipalName) l'ho risolto così:
ifs=$IFS
IFS="
"
for r in $(grep displayName $ldap_ns_path); do
dn64=$(echo $r | cut -f3 -d: | grep -o "[^[:space:]]*")
[ -z "$dn64" ] && continue
dn=$(echo $dn64 | base64 -i --decode)
sed -i "s/: $dn64/$dn/" $ldap_ns_path
done
IFS=$ifs
Grazie per la pazienza
Piviul