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>;
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org