Archive for the ‘Non classé’ Category.

Sauvegarde Gmail avec OfflineIMAP

Comment sauvegarder les mails de son compte Gmail très simplement avec OfflineIMAP

Contenu de ~/.offlineimaprc

[general]
accounts = Gmail
maxsyncaccounts = 1
ui = Noninteractive.Basic

[Account Gmail]
localrepository = Local
remoterepository = Remote

[Repository Local]
type = Maildir
localfolders = /home/loic/gmail.backup

[Repository Remote]
type = Gmail
readonly = true
remotehost = imap.gmail.com
remoteuser = login@gmail.com
remotepass = password
ssl = yes
maxconnections = 1
realdelete = no
spamfolder = '[Gmail]/Spam]'
trashfolder = '[Gmail]/Corbeille]'
folderfilter = lambda foldername: foldername not in ['[Gmail]/Tous les messages']
nametrans = lambda foldername: re.sub('\[Gmail\]/Messages envoy.*', '[Gmail]/Messages_envoyes', foldername)

Détails

Pas vraiment de subtilités, le fichier exemple par défaut étant très complet, inutile de recopier les explications ici.

folderfilter me permet d’éviter de sauvegarder “Tous les messages”, qui évite de perdre de la place et du temps avec une copie intégrale de la boîte.

nametrans  corrige la curieuse interprétation qu’a OfflineIMAP de l’accent du mot “envoyés”, en renommant en local ce répertoire en “Messages_envoyes”

C’est peut-être un bug, à voir.

Au final, un OfflineIMAP régulièrement lancé couplé à une sauvegarde me garanti une copie complète de tous mes messages Gmail, parant à toute éventuelle perte de données

Graphviz: modifier l’orientation d’un graphe

Par défaut, un graphe de type dot est orienté haut-bas (noté TB pour Top Bottom dans la documentation).

Pour modifier ce comportement, il faut utiliser la propriété rankdir

Exemple concret :

digraph G {
  "init" -> "0";
  "0" -> "1" [label="a"];
  "1" -> "2" [label="b"];
  "2" -> "6" [label="b"];
  "2" -> "3" [label="c"];
  "2" -> "5" [label="a"];
  "3" -> "4" [label="d"];
  "5" -> "4" [label="a"];
  "6" -> "4" [label="e"];
  "4" -> "7" [label="b"];
  "7" -> "8" [label="a"];
  "8" [shape="doublecircle"];
  "init" [shape="none", label=""];
}

graphe_oriente_haut_bas

Et maintenant le même graphe, cette fois-ci orienté LR (Left-Right)

digraph G {
  rankdir=LR;
  "init" -> "0";
  "0" -> "1" [label="a"];
  "1" -> "2" [label="b"];
  "2" -> "6" [label="b"];
  "2" -> "3" [label="c"];
  "2" -> "5" [label="a"];
  "3" -> "4" [label="d"];
  "5" -> "4" [label="a"];
  "6" -> "4" [label="e"];
  "4" -> "7" [label="b"];
  "7" -> "8" [label="a"];
  "8" [shape="doublecircle"];
  "init" [shape="none", label=""];
}

VirtualBox : convertir une image raw en vdi

Pour utiliser un fichier image ‘raw’ (issu d’un dd par exemple) dans VirtualBox, il faut d’abord le convertir dans le format natif de VirtualBox à savoir vdi (VirtualBox Virtual Disk Image).

L’outil VBoxManage et sa commande convertfromraw permet de le faire :

$ VBoxManage convertfromraw usb.img usb.vdi
Sun VirtualBox Command Line Management Interface Version 3.1.6
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

Converting from raw image file="usb.img" to file="usb.vdi"...
Creating dynamic image with size 4026384384 bytes (3840MB)...

usb.vdi est maintenant utilisable dans VirtualBox.

Identifier le modèle d’une voiture d’après son type mine

Pour identifier à coup sûr le modèle d’une voiture à partir de son type mine (champ D.2.1 sur le certificat d’immatriculation),  plusieurs solutions :

  • Ce site, qui propose de chercher dans une base de données apparemment assez complète (menu Utile->identifier un véhicule)
  • Les multiples sites de vente en ligne de pièces d’occasion, qui permettent de chercher le modèle à partir des infos du certificat d’immatriculation.

A vous de croiser les résultats !

C’est notamment très pratique pour recherche les références des pièces de la voiture :)

Configuration xorg.conf dans une machine virtuelle Qemu

Après l’installation d’une Debian Lenny dans une machine virtuelle Qemu, la résolution graphique est par défaut très basse (640×480), ce qui n’est pas très pratique si l’on dispose d’une résolution d’écran bien plus élevée sur l’hôte.

La carte graphique émulée par défaut étant une cirrus, il faut modifier le xorg.conf pour utiliser le pilote cirrus, et forcer les caractéristiques de l’écran pour avoir accès à des résolutions plus élevées.

Voici un fichier xorg.conf minimaliste permettant d’atteindre des résolutions allant jusqu’à 1280×800 :

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"kbd"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"fr"
	Option		"XkbVariant"	"latin9"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
EndSection

Section "Device"
	Identifier	"Configured Video Device"
	Driver		"cirrus"
EndSection

Section "Monitor"
	Identifier	"Configured Monitor"
	HorizSync	28-64
	VertRefresh	60
EndSection

Section "Screen"
	Identifier	"Default Screen"
	Monitor		"Configured Monitor"
EndSection

La sortie d’un xrandr est maintenant:

Screen 0: minimum 640 x 480, current 1280 x 800, maximum 1280 x 800
default connected 1280x800+0+0 0mm x 0mm
   1280x800       60.0*
   1280x768       60.0
   1024x768       60.0
   800x600        60.0
   640x480        60.0

Il est sans doute possible de faire mieux, mais cela répondait à mes besoins.

Processeurs Intel et le support de la technologie de virtualisation Intel VT-x

Vous cherchez un processeur Intel supportant la technologie de virtualisation Intel VT-x ?

Pour ne pas se planter, il existe chez Intel des pages bien pratiques :

aMSN encrypted password security

aMSN is a free open source MSN Messenger clone, allowing users of others operating system to use this proprietary protocol.

It stores logins and passwords in a config.xml file, located in ~/.amsn/account_name/config.xml. The interesting entries are login and encpassword ones:

   <entry>
     <attribute>encpassword</attribute>
      <value>e11288adaa249d969f3a1b40fd644443</value>
   </entry>
   <entry>
      <attribute>login</attribute>
      <value>toto@hotmail.com</value>
   </entry>

It looks like the password is securely stored, but in fact, this is not the case, and it gives the user a false sense of security. (This is why pidging stores its passwords in clear text)

Let’s see how the password is decrypted.

The routine in charge of decrypting the password is in config.tcl file, from line 685 to line 695 :

685    #Get the encrypted password
686     if {[::config::getKey encpassword]!=""} {
687         set key [string range "[::config::getKey login]dummykey" 0 7]
688         set password [::config::getKey encpassword]
689         catch {set encpass [binary format h* [::config::getKey encpassword]]}
690         catch {set password [::des::decrypt $key $encpass]}
691         #puts "Password length is: [string first "\n" $password]\n"
692         set password [string range $password 0 [expr { [string first "\n" $password] -1 }]]
693         #puts "Password is: $password\nHi\n"
694         ::config::unsetKey encpassword
695     }

Basically, it retrieves from the config.xml file the 8 first characters of the login (line 687) and encrypted password (line 688) . Then the password is converted to a  binary form (line 689) and finally decrypted using DES algorithm (line 690) using login as  key. Line 692 seems to remove final end of line character.

Knowing that, it is now very easy to encrypt/decrypt a password found in a config.xml file. Using DES package from tcllib, it is even possible to write a one-liner program in tcl to decrypt encpassword value.

Please don’t rely on aMSN password obfuscation to protect your password ! Be sure to set correct permissions on this file to restrict accesses at most.

Envoyer une copie de mail avec Procmail

Cela se résume en une règle :

:0c
* ^From toto@foobar.fr
! bill@mail.com

Cette règle envoi une copie des mail en provenance de toto@foobar.fr à bill@mail.com

Explications :

:0 début de la règle, c utilisation d’une copie du mail (le mail originel sera donc traité par les règles suivantes) * ^From toto@foobar.fr filtre sur l’expéditeur toto@foobar.fr ! transfère le mail aux adresses spécifiées, à savoir bill@mail.com

Ip client à travers un reverse proxy

Je dispose de plusieurs serveurs web Apache, répartis dans des machines virtuelles. Afin d’aiguiller le traffic http selon certain critères (entête http Host: par exemple) vers ces divers serveurs, j’utilise un reverse proxy en frontal, à savoir Pound. (si vous cherchez un reverse proxy libre et léger, foncez !)

Un problème se pose: dans les logs des serveurs Apache, c’est l’ip du frontal qui apparaît, l’analyse des logs présente alors peu d’intérêt, car tout le trafic semble venir du frontal !

192.168.0.1 – - [07/Mar/2009:04:25:16 +0100] “GET / HTTP/1.0″ 200 31787 “-”

En fait, il est possible de faire apparaître l’ip du client à l’origine de la requête, au prix de quelques modifications autour du traitement de l’entête http X-Forwarded-for

Cette entête http permet d’identifier le client originel dont la requête est passée au travers d’un proxy ou d’un répartiteur de charge, et il se trouve que Pound rajoute cette entête avant de passer la requête aux serveurs web derrière lui.

La configuration par défaut des logs d’Apache ne récupérant pas cette entête, il faut se créer un LogFormat personnalisé récupérant cette information.

Voici le mien, que j’appelle combined_proxy:

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined_proxy

D’où ça sort ? Explications : c’est le LogFormat par défaut d’Apache que voici :

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined

dans lequel j’ai remplacé le %h qui est le remote host (plus d’infos ici) par une variable

%{Foobar}i

, où Foobar est une entête de la requête http. Comme ce n’est pas l’entête Foobar qui m’intéresse mais X-Forwarded-For, il suffit de remplacer :)

Maintenant dans votre configuration Apache, il faut utiliser ce LogFormat à la place du standard dans les directives CustomLog, ce qui donne ceci :

CustomLog /var/log/apache2/access.log combined_proxy

C’est tout ! Voici maintenant l’ip du client dans les logs des serveurs Apache:

72.14.221.104 – [07/Mar/2009:08:05:56 +0100] “GET / HTTP/1.0″ 200 31787 “-”

Dernière subtilité : que se passe-t-il si la requête venant au reverse proxy contient déjà l’entête X-Forwarded-For ? Eh bien Pound rajoute à l’entête l’ip du frontal, comme décrit dans la doc, les logs contiendront donc les 2 ip:

192.168.0.1, 72.14.221.104 – - [07/Mar/2009:09:03:57 +0100] “GET / HTTP/1.0″ 200 31787 “-”

Ici on comprend que le proxy 74.14.221.104 a fait transiter la requête du client 192.168.0.1

Comme ca ne m’intéresse pas de connaître la liste des proxy traversés par le client, le plus simple est, au niveau du frontal, du supprimer cette entête si elle existe déjà.

Avec Pound, la directive HeadRemove permet de supprimer des entêtes http. Elle se place dans la directive ListenHTTP :

ListenHTTP
Address 127.0.0.1
Port 80
HeadRemove “X-Forwarded-For”

Service
HeadRequire “Host: .*foo.com.*”
BackEnd
Address 192.168.0.1
Port 80
End
End
End

Maintenant, on retrouve dans les logs Apache les informations désirées :

72.14.221.104 – - [07/Mar/2009:09:03:57 +0100] “GET / HTTP/1.0″ 200 31787 “-”

Equivalents gratuits à dnsreport.com

Autrefois le site http://www.dnsreport.com permettait de manière totalement gratuite de dresser un “bilan de santé” de la configuration de son nom de domaine.

Maintenant il faut créer un compte pour faire des vérifications en nombre limité, ou payer.

Voici des sites gratuits offrant plus ou moins les mêmes services :

A coupler avec l’indispensable commande dig