----- Original Message -----
From: "Edgar Bonet" <guilde@???>
To: "Liste Guilde" <guilde@???>
Sent: Tuesday, January 25, 2005 11:02 AM
Subject: Re: perlsec à l'aide
| Le mardi 25 janvier, anne aublanc a écrit :
| > J'essaie de mettre tous mes pgms perl avec l'option -T.
| >
| > dans perlsec :
| > open(FOO,"echo $arg|"); # Pas Ok, mais...
| > open(FOO,"-|") or exec 'echo', $arg; # Ok
| >
| > J'ai une ligne du style
| > open(FOO,"$cde $arg 2>&1 |"); # cde 1
| >
| > Je n'arrive pas à la transformer en
| > open(FOO,"-|") or exec $cde, $arg;
| > Je ne sais pas où mettre le 2>&1
|
| Ne la transforme pas, elle est très bien comme elle est. Le but de
| l'option -T n'est pas de te faire faire des contorsions syntaxiques,
| mais de t'inciter à nettoyer tes variables. Dans ton cas il faut
| nettoyer $cde, $arg et l'environnement ($ENV{PATH} et $ENV{IFS} au
| moins). Regarde l'exemple ci-dessous :
|
| #!/usr/bin/perl -T
|
| # $cde est propre : ça vient de ton programme
| $cde = "echo";
|
| # $arg est sale car il vient de l'utilisateur
| $arg = shift;
|
| # Nettoyons $arg
| unless ($arg =~ /^(\w+)$/) { die "Argument non conforme\n"; }
| $arg = $1;
|
| # Environnement propre, sinon on aurait « Insecure $ENV... »
| %ENV = {"PATH" => "/bin:/usr/bin"};
|
| # Maintenant c'est OK
| open(FOO,"$cde $arg 2>&1 |");
|
| # La preuve :
| print while <FOO>;
|
grrrr...
J'ai ajouté %ENV = {"PATH" => "mon path"};
et c'est ok!
Je l'avais mis au départ, je devais avoir un autre bug car je n'avais pas le
fameux msg : Insecure $ENV{PATH} !!!!
J'avais le msg "Insecure dependency...." donc j'avais complètement
transformé le pgm petit à petit!
Comme tu le dis si bien : Le but de l'option -T n'est pas de te faire faire
des contorsions syntaxiques...
Cela me faisait cette impression!
J'ai plusieurs questions...
J'ai réussi à faire fonctionner les pgms mais 1 ligne c'est transformé en x
lignes (quelques dizaines!) :
system "$g3topbm -f $fax_directory/$sfilename | $pnmtops >
$webtmpabs/$$.f.$tfilename.ps"; # (1)
cette ligne transforme un fichier g3 (fax) en ps en passant par un fichier
pbm
J'ai donc transformé cette ligne avec :
# g3 => pbm
open(LIRE,"-|") or exec ($g3topbm, "-f", "$fax_directory/$sfilename") or
die (print "<br> impossible d'exécuter $g3topbm $fax_directory/$sfilename
<br>\n");
sysopen(AJOUT, "$webtmpabs/$aleat1.f.$tfilename.pbm",
O_WRONLY|O_EXCL|O_CREAT ) or die (print "<br> pbm NON créé dans
$webtmpabs/$aleat1.f.$tfilename.pbm <br>\n");
while (<LIRE>)
{
print AJOUT $_;
}
close AJOUT;
close LIRE;
ect... (pbm => ps)
ma question : est-ce-que j'aurais pu continuer la cde 1...
Selon perlsec :
system "echo $arg"; # Non sûr
system "/bin/echo", $arg; # Sûr (n'utilise pas sh)
J'ai décortiqué la cde (1) en 2 cdes pour ne plus avoir le pipe
J'ai essayé :
system ("$g3topbm" "$fax_directory/$sfilename" >
$webtmpabs/$$.n.$tfilename.pbm );
system ("$g3topbm", "$fax_directory/$sfilename" >
$webtmpabs/$$.n.$tfilename.pbm );
J'ai fait beaucoup d'essais mais sans succès! ;o((
Insecure dependency in system avec cde (1)
syntax error....
Comment utiliser la cde system ou exec avec plusieurs paramètres ... des
pipes...
Comment faire des pipes : |
Comment écrire la sortie d'une cde dans un fichier
merci
anne