Re: strano problemino con stringhe base64
On 3/17/24 10:49, Davide Prina wrote: Piviul ha scritto: echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/" Purtroppo non funziona, restituisce l'errore "base64: input non valido" $ eval $(echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.* )$/echo \"\1 \$(echo \2 | base64 -i --decode)\"/") Grazie Davide! Piviul
Re: strano problemino con stringhe base64
Piviul ha scritto: > echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e > "s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/" > > Purtroppo non funziona, restituisce l'errore "base64: input non valido" $ eval $(echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.* )$/echo \"\1 \$(echo \2 | base64 -i --decode)\"/") Ciao Davide -- La mia privacy non è affar tuo https://noyb.eu/it - You do not have my permission to use this email to train an AI - If you use this to train your AI than you accept to distribute under AGPL license >= 3.0 all the model trained, all the source you have used to training your model and all the source of the program that use that model
Re: strano problemino con stringhe base64
Il Tue, Mar 12, 2024 at 10:18:21AM +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. > > 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: enic...@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: enic...@mydomain.ext > displayName: Tmljb2zDsiBFZG9hcmRv > sn: Tmljb2zDsiBFZG9hcmRv > ou: utenti > objectClass: top > objectClass: inetOrgPerson > > > Qualcuno ha qualche idea di cosa dabbia fastidio a sed? > > Grazie > > Piviul Non è una soluzione ma è relativo a questo problema in generale: There's No Such Thing As Plain Text • Dylan Beattie • YOW! 2023 https://www.youtube.com/watch?v=ajfb5LSbQVM -- Amike, Marco Ciampa
Re: strano problemino con stringhe base64
On 3/12/24 18:04, Giuseppe Sacco wrote: 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/" Grazie Giuseppe, hai ragione, che pataca! Grazie ancora, ora è proprio tutto risolto... anzi quasi... per caso in sed, nella sostituzione si possono inserire comandi... qualcosa tipo echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.*)$/\1 $(echo "\2" | base64 -i --decode)/" Purtroppo non funziona, restituisce l'errore "base64: input non valido" ma non capisco perché; questo però funziona echo "displayName:: Tmljb2zDsiBFZG9hcmRv" | sed -E -e "s/(displayName:): (.*)$/\1 $(echo "\2")/" e restituisce displayName: Tmljb2zDsiBFZG9hcmRv Quindi sembra non venga interpretato correttamente il pipe... hai qualche suggerimento? Piviul
Re: strano problemino con stringhe base64
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
Re: strano problemino con stringhe base64
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, Giuseppe
Re: strano problemino con stringhe base64
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? Diego Il 12/03/2024 10:18, 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. 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: enic...@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: enic...@mydomain.ext displayName: Tmljb2zDsiBFZG9hcmRv sn: Tmljb2zDsiBFZG9hcmRv ou: utenti objectClass: top objectClass: inetOrgPerson Qualcuno ha qualche idea di cosa dabbia fastidio a sed? Grazie Piviul -- Diego Zuccato DIFA - Dip. di Fisica e Astronomia Servizi Informatici Alma Mater Studiorum - Università di Bologna V.le Berti-Pichat 6/2 - 40127 Bologna - Italy tel.: +39 051 20 95786
strano problemino con stringhe base64
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: enic...@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: enic...@mydomain.ext displayName: Tmljb2zDsiBFZG9hcmRv sn: Tmljb2zDsiBFZG9hcmRv ou: utenti objectClass: top objectClass: inetOrgPerson Qualcuno ha qualche idea di cosa dabbia fastidio a sed? Grazie Piviul