Mar 26 2011

Evolution, GPG e gli errori con gli hash SHA256


by pandafunk

Non riuscite a spiegarvi perché Sylpheed o Thunderbird riescono tranquillamente a firmare e cifrare email con la vostra chiave DSA 2048 ed Evolution non ne vuole sapere nemmeno a pagarlo mostrandovi sempre l’errore riportato di seguito?

Impossibile creare il messaggio.

Because "gpg: scrittura in `-'
gpg: la chiave DSA AB2CB45C richiede un hash di 256 bit
o più grande
gpg: signing failed: errore generale
", you may need to select different mail options.

Sappiate che stavolta non è colpa nostra, è un bug di qualche anno fa! Sembrerebbe che ci sia anche una patch pronta ma bloccata da altre questioni di compatibilità che, a quanto si legge nelle mailing list, dovrebbero essere risolte nella versione 2.32… ad oggi Ubuntu 10.10 maverick offre ancora Evolution 2.30.3.

Sostanzialmente il problema è che Evolution forza GPG ad usare l’algoritmo di hashing SHA1 anche se la chiave utilizzata ne richiede un altro, tra l’altro il parametro che viene passato a GPG (--digest-algo=SHA1) è hard coded: praticamente l’unica soluzione in attesa della di quella ufficiale è utilizzare un piccolo wrapper a gpg che strippi quel parametro all’ignaro -e permettetemi non così evoluto- Evolution.

Il wrapper indicato nel bug report che ho appena linkato funziona… ma è un tantino invasivo perché bisogna rinominare /usr/bin/gpg in /usr/bin/gpg.real e salvare il wrapper come /bin/gpg. Non che sia nulla di tremendamente pericoloso, nel peggiore dei casi un aggiornamento di GPG lo sovrascriverebbe lasciando un gpg.real orfano e riportando l’errore in Evolution.

Io ne propongo una versione leggermente modificata e meno invasiva che va messa in /usr/local/bin, perché nella maggiorparte degli ambienti i percorsi di ricerca ($PATH) /local/ hanno la precedenza, quindi se salviamo il nostro wrapper in /usr/local/bin/gpg verrà trovato ed usato prima di /usr/bin/gpg.

Il codice è questo:

#!/bin/bash

if ls -l /proc/$PPID/exe | fgrep -e /usr/bin/evolution >/dev/null; then
declare -a newopt
for opt in "$@"; do
if [ "$opt" != "--digest-algo=SHA1" ]; then
newopt[${#newopt[@]}]="$opt"
fi
done
exec /usr/bin/gpg "${newopt[@]}"
else
exec /usr/bin/gpg "$@"
fi

Copiamolo,

sudo gedit /usr/local/bin/gpg

incolliamolo, salviamo e chiudiamo gedit e diamo un

sudo chmod +x /usr/local/bin/gpg.

Quando il bug sarà risolto (speriamo presto) potremo tranquillamente cancellare /usr/local/bin/gpg.


Mar 22 2011

Tweettare da linea di comando il brano che stiamo ascoltando su Banshee


by pandafunk

Sinceramente non mi sono messo a cercare approfonditamente se esistesse già un sistema per twettare il brano che sto ascoltando su Banshee… non ho trovato un plugin, non uso last.fm o  altri servizi che permettono di farlo e sicuramente era più divertente farmelo da me:

gnome-open “http://twitter.com/share?text=%23nowplaying $(echo -n `banshee –query-name | cut -d \: -f 2` – `banshee –query-artist | cut -d \: -f 2` | perl -pe’s/([^-_.~A-Za-z0-9])/sprintf(“%%%02X”, ord($1))/seg’)”

La parte più interessante è sicuramente la piccola porzione in perl (quella in grassetto) che permette l’URL encoding per evitare che qualche carattere strano tronchi la riga, tipo & spesso presente nei titoli o negli artisti e che è anche utilizzato per separare le variabili POST.

Ho provato ad incollare la riga in un launcher personalizzato sul pannello di GNOME ma credo che ci siano troppe sostituzioni e non funziona… visto che è abbastanza lunga è anche più logico metterlo in uno script bash e lanciarlo da li, ad esempio /usr/local/bin/nowplaying.sh.

I più pigri possono scaricarlo qui: nowplaying.sh.gz.

‘njoy 😉


Mar 11 2011

Virtual Guru Meditation


by pandafunk

Ieri provavo una VM che non ne voleva sapere quando mi sono accorto che VirtualBox era andato in “Guru Meditation”…
Vi ricorda qualcosa?