Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] wwsympa et Perl 5.14.2 : « segmentation fault »

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Benoit Mercier <adresse@cachée>
  • To: adresse@cachée, Emmanuel Bouthenot <adresse@cachée>
  • Subject: Re: [sympa-fr] wwsympa et Perl 5.14.2 : « segmentation fault »
  • Date: Sat, 05 May 2012 12:22:46 -0400

Bonjour Emmanuel,

Je viens de tester ta correction et je te confirme que cela semble
fonctionner parfaitement bien sur mon serveur Ubuntu 12.04 LTS (Precise),
Sympa 6.1.9 et Perl 5, version 14, subversion 2 (v5.14.2) built for
x86_64-linux-gnu-thread-multi (with 53 registered patches, see perl -V for
more detail), Apache 2.2.22-1ubuntu1 et libapache2-mod-fcgid 1:2.3.6-1.1

wwsympa est maintenant capable d'envoyer des courriels!

J'avais commencé à essayer de faire disparaître les messages d'erreurs du
type '*Insecure dependency in*' en jouant dans le code de Sympa et en me
basant sur la manière dont Sympa le fait dans d'autres situations. N'étant
pas développeur Perl, je me suis retrouvé face à des situations où je ne
savais comment faire. L'utilisation de FCGID n'avait rien changé non plus.

Quoiqu'il en soit MERCI infiniment à tout ceux qui se sont penchés sur le
problème pour arriver à cette solution. Je pense toutefois que le mode
'tainted' a sa raison d'être et qu'il serait bon que Sympa puisse fonctionner
avec lui.

Merci encore!

Benoit

On 2012-05-05 03:02, Emmanuel Bouthenot wrote:
>
> On Fri, May 04, 2012 at 09:57:56AM +0200, Eric Duval wrote:
>> Effectivement ça a l'air d'être un problème
>> lié à la version de Perl.
>> Tu as raison le fait d'ajouter du code modifie la pile
>> et de fait déplace le problème.
> C'est ce que je supposais ayant pas mal joué à emabarquer perl dans des
> prog en C et vu la non joie que j'avais avec l'API C de perl, sa pile
> interne et la magie autour des macros SV* ...
>
>> Je suis en cours de migration sur :
>>
>> Debian Squeeze
>> sympa 6.1.7
>> (perl --version)
>> This is perl, v5.10.1 (*) built for x86_64-linux-
>> gnu-thread-multi (with 56 registered patches, see perl
>> -V for more detail)
>> Apache/2.2.16 (Debian)
>> mod_fcgid/2.3.6
>> mod_perl/2.0.4
>> Perl/v5.10.1
>>
>> Avec cette version de perl pour le moment en phase de tests
>> aucun problème.
> oui car Perl<= 5.12.4
>
>> as tu la possibilité de faire un test avec cette version de perl ?
> En fait, j'ai installé 3 versions de Perl en // depuis les sources:
> 5.12.4, 5.14.2 et 5.15.9
>
> Pas de pb en 5.12.4 mais ça plantait avec les 2 autres. gdb étant mon
> ami, j'ai réussi en apprendre plus sur le segfault, et je suis tombé sur
> un thread[1] à propos du même problème dans fedora 16.
>
> http://www.nntp.perl.org/group/perl.perl5.porters/2012/01/msg181404.html
>
> Erik Olson est entré en discussion avec les développeurs Perl et ils ont
> investigué tant bien que mal sans trouver le problème de fond. Mais le
> thread est très intéressant car j'en ai appris un peu plus sur pourquoi
> le pb existait chez moi avec fastcgi mais pas en ligne de commande.
>
> C'est à cause du 'tainted mode' (une sorte de mode de sécurité renforcé)
> de perl (options -t ou -T) qui s'il est actif affiche tout un tas de
> warnings à propos d'éventuelles failles.
>
> Le truc c'est que le cgi de sympa (wwsympa.fcgi) est activé avec
> l'option -U (dans le shebang) qui active de fait le tainted mode.
>
> Finalement la correction est triviale :
> - Il faut supprimer le -U du shebang de wwsympa.fcgi
> - Modifier le wrapper en C pour qu'il change l'effective user/group en
> amont de l'exécution du cgi
>
> Pour ceux qui souhaite essayer de tester la correction:
>
> (en admettant que le le cgi et le wrapper se trouve dans
> /usr/lib/cgi-bin/sympa/, sinon il faut adapter chemin selon votre
> installation)
>
> Créer un fichier avec /tmp/wwsympa-wrapper.fcgi.c avec le contenu suivant :
>
> --8<-----------------------------------
> #include<unistd.h>
>
> int main(int argn, char **argv, char **envp) {
> setreuid(geteuid(),geteuid());
> setregid(getegid(),getegid());
> argv[0] = "/usr/lib/cgi-bin/sympa/wwsympa.fcgi";
> execve("/usr/lib/cgi-bin/sympa/wwsympa.fcgi",argv,envp);
> }
> ----------------------------------->8--
>
> (j'ai juste ajouté les lignes setre*id())
>
> # gcc -Wall /tmp/wwsympa-wrapper.fcgi.c -o
> /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
> # chown sympa:sympa /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
> # chmod ug+s /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
>
> Restart de apache ou de votre web server préféré au besoin:
> # invoke-rc.d apache2 restart
>
> Par effet de bord cette correction supprime également toutes les erreurs du
> type '*Insecure dependency in*' qui sont affiché sur la sortie erreur par
> perl
> et qui se retrouve dans les logs erreurs du serveur web.
>
>> Sur quel distribution tu travailles ?
> Debian unstable.
>
>
> Ceci étant dit le bug perl est bien réél mais s'il est assez compliqué a
> tracer, si j'ai un peu de temps j'essayerais de fournir un chroot minimal au
> dev perl pour qu'ils puissent reproduire et investigué le pb.
>
>
> David, si tu nous lis et si la correction te va, ce serait jouable de
> l'avoir
> dans la 6.1.10 ? Je crois que pas mal de distro seraient intéressées par la
> correction de ce pb :)
>
>
> Merci.
>
> M.
>



Archives gérées par MHonArc 2.6.19+.

Haut de le page