La classe et la coquetterie

Dans la série, il ne faut pas confondre la classe et la coquetterie, je vous présente le manteau en fausse fourrure léopard avec des imprimés Mickey et Minnie :

Manteau de fourrure Mickey
Fourrure léopard avec imprimés Mickey

Il faut me croire sur parole, mais la petite tache rouge dans le pli sur la droite du manteau, c’est le ruban de Minnie qui est rouge comme il se doit.

PS : je m’excuse platement envers le groupe facebook des amateurs de fourrures Walt Disney mais j’ai du mal à comprendre leur passion.

Portrait d’un acheteur d’Office

Bon, la publicité Microsoft Office, j’en parle, j’en parle mais ais-je la preuve de son efficacité ? Ais-je par exemple vu quelqu’un ayant acheté Office ?

Et oui, voilà la photo :

Victime de la pub Office
Victime de la pub Office

L’écharpe OM autour du cou, le téléphone tactile dans une main et la boite Microsoft Office dans l’autre, dans le métro Ligne 14, voici mon premier exemplaire d’acheteur du pack Office.

Contribution au libre, 2009 commence fort.

Du côté de mes contributions au logiciel libre, l’année 2009 commence assez fort. Il semble que j’ai réussi à déclencher une petite révolution.

Le système de test de NuFW avait mis en évidence un crash rare, non reproductible facilement dans nuauth, le serveur d’authentification de NuFW. Les sorties de gdb ou valgrind révélaient un problème absurde dans la bibliothèque cyrus-sasl. NuFW l’utilise pour réaliser la phase d’authentification des utilisateurs. Le crash apparaissait lors d’un appel à sasl_dispose() qui est la fonction à appeler lorsque l’on a terminé la phase d’authentification. Après maintes vérifications et plusieurs dizaines d’heures de debug, j’étais convaincu que nuauth, le serveur d’authentification de NuFW, utilisait la bibliothèque de manière correcte et que le code environnant était correct.

Lorsque l’utilisation d’une bibliothèque est légitime et que l’on obtient un plantage, c’est que l’on a trouvé un bug. J’ai donc alors commencé à enquêter sur Cyrus-sasl. Cette bibliothèque est développée dans le cadre du projet cyrus (serveur de mail imap) par la Carnegie Mellon University. Elle est utilisée par un nombre conséquent de logiciels libres fameux (dont openldap, sendmail). Même si sendmail a une réputation sulfureuse de sécurité, il est connu pour sa stabilité. Et donc, en me lançant dans le debug de ce problème début septembre 2008, je savais que je m’attaquais à quelque chose de robuste car très utilisé. Le bug allait donc être complexe à trouver.

J’enchainais alors des séances de deboguage plus ou moins longues passant à certain moment plusieurs longues journées de travail (lire 14 ou 15 heures) sur ce problème. Je sortais tout de même victorieux de la confrontation et le 20 septembre 2008, j’envoyais un message à la liste de diffusion cyrus-sasl : [PATCH] Fix problem with sasl_set_mutex

NuFW utilise les bibliothèques cyrus-sasl et libldap_r et libldap_r utilise lui aussi cyrus-sasl. Elle s’en sert lors de la phase d’authentification sur la base LDAP. Comme, et libldap_r et NuFW sont multithreadés ou multithreadable, ils initient tous les deux la bibliothèque cyrus-sasl pour le support des threads. Il y a notamment un appel à sasl_set_mutex() qui définit l’implémentation de mutex à utiliser. NuFW appelle cette fonction avec ses propres paramètres et libldap_r fait de même (même lorsque l’on fait un bind simple, les connaisseurs apprécieront). Or sasl_set_mutex() ne détectait pas qu’une initilisation avait déjà été faite. On avait donc un conflit possible. Les fonctions de mutex sasl prennent des paramètres void* en entrée et travaille sur ces pointeurs. Il y donc potentiellement des casts dangereux.

Dans le cas de NuFW, le problème était beaucoup plus radical. L’initialisation de libldap_r se fait lors du chargement du module ldap de nuauth. Par conséquent, c’est la fonction ldap qui est utilisée après chargement du module. Or, nuauth peut changer de configuration et donc de modules à chaud. Il réalise notamment un déchargement des modules. Or, cela ne met pas à jour la fonction mutex de sasl qui appelle donc une fonction déchargée. Ceci conduit immanquablement au crash. Cette fonctionnalité de modification de configuration à chaud est massivement utilisé dans le système de tests de NuFW et c’est donc pour cette raison que le crash ne se produisait qu’à cet endroit.

J’aurais du déboguer plus rapidement ce problème. La piste que j’aurais du voir plus tôt était l’utilisation de fonctions stockées à des emplacements mémoires non valides. Cette information était donnée par gdb et j’aurais du lui faire d’avantage confiance.

Ma remontée de bug et mon patch ont rapidement été pris au sérieux et un patch implémentant mon idée a été commité dans les sources : Fixed sasl_set_mutex() to disallow changing mutex management functions once sasl_server_init/sasl_client_init is called

J’étais content de voir ce correctif appliqué, mais vu la criticité pour NuFW, j’aurais été satisfait de voir arriver une nouvelle version de cyrus-sasl fixant ce bug. Le problème étant déclenché par une utilisation précise de la bibliothèque, je n’étais pas en droit de remonter mon exigence. De plus, la dernière version de cyrus-sasl date du 19 mai 2006 et je me doutais donc que je n’allais pas être entendu.

Début janvier, un mail envoyé sur la liste a pointé le fait que le bug était reproductible en utilisant le stockage des mots de passe sasl dans ldap : En utilisant lui aussi la bibliothèque libldap_r cyrus-sasl se mordait la queue. Le bug était donc aussi interne à cyrus-sasl. Fort de cette conclusion, j’envoyais une réponse au message signalant le problème :

This made the bug self contained and not dependant of other applications. Given the fact that the effect of this bug is a crash of the calling program, it could be interesting to release a new version of the sasl library. (my 0.02$)

J’avais ainsi osé demandé une nouvelle version sur un logiciel où je n’avais pas écrit une ligne de code. À ma surprise, cela s’est conclu par ce message :  Next release of CMU SASL – call for favorite bugfixes où un membre de l’équipe de développement annonce l’arrivée probable, aux alentours du 15 février, d’une nouvelle version de la bibliothèque et demande quels sont les corrections de bugs que les utilisateurs voudraient voir figurer dans cette version.

Je commence donc l’année 2009, en réussissant à déclencher la sortie d’une nouvelle version d’une bibliothèque qui n’avait pas eu de nouvelles versions depuis près de trois ans !

Je conclus ce poste en plagiant pollux et en revoyant mes objectifs de contributions à la hausse pour l’an prochain :

En 2010, je déclenche une sortie de Debian.

“Offer office to your PC”, c’est moins cher

Parfois, on a l’impression d’être poursuivi.Si l’on en croit ce mail (publicité désastreuse de ms dans la rue : agissons !), la campagne pour l’offre promotionnelle Office semble avoir repris. Comme c’est l’époque des soldes, il n’y a rien de bien étonnant à cela. C’est facile pour Microsoft de casser les prix quand on fait plus de 90% de bénéfice sur un produit.

J’arrête là la digression. Je disais donc que je me sentais poursuivi. La raison en est la suivante. La campagne de publicité pour Office est mondiale (ce qui confirme que l’aire de répartition du pigeon est une des plus étendues). J’en tiens pour preuve qu’en me connectant innocemment à amazon.com, je suis tombé sur la version américaine de la publicité :

Pub Office sur amazon.com
Pub Office sur amazon.com

On peut donc faire des économies de fous en s’offrant Office à $74.99. Attendez ! $74.99 mais ça fait 54.73 €. Il fallait donc s’y attendre, l’offre magique de Microsoft en France est bien en deça de l’effort commercial consenti aux Etats-Unis. On pourrait donc modifier le slogan pour dire “Achetez en France et perdez 24,26 €”. D’un côté, au vu de la crise outre-atlantique un prix plus bas est peut-être nécessaire. Américain, américaine, courage, des solutions à la crise existent :

Why not to buy Office
Why not to buy Office