Index: lib/MDK/Common/System.pm =================================================================== --- lib/MDK/Common/System.pm (révision 241898) +++ lib/MDK/Common/System.pm (copie de travail) @@ -368,21 +368,22 @@ setVarsInShMode($file, 0777 ^ umask(), $l, @fields); } +sub quoteForSh { + my ($val) = @_; + if ($val =~ /["`\$]/) { + $val =~ s/(')/$1\\$1$1/g; + $val = qq('$val'); + } elsif ($val =~ /[\(\)'|\s\\;<>&#\[\]~{}*?]/) { + $val = qq("$val"); + } + $val; +} + sub setVarsInShMode { my ($file, $mod, $l, @fields) = @_; @fields = keys %$l unless @fields; my $string = join('', - map { - my $val = $l->{$_}; - if ($val =~ /["`\$]/) { - $val =~ s/(')/\\$1/g; - $val = qq('$val'); - } elsif ($val =~ /['|\s\\]/) { - $val =~ s/(["\\])/\\$1/g; - $val = qq("$val"); - } - "$_=$val\n"; - } grep { $l->{$_} } @fields + map { "$_=" . quoteForSh($l->{$_}) . "\n" } grep { $l->{$_} } @fields ); if ($file =~ m!^/home/!) { MDK::Common::File::secured_output($file, $string); @@ -398,7 +399,7 @@ @fields = keys %$l unless @fields; MDK::Common::File::output($file, - (map { $l->{$_} ? "$_=$l->{$_}\n" : () } @fields), + (map { $l->{$_} ? "$_=" . quoteForSh($l->{$_}) . "\n" : () } @fields), @fields ? "export " . join(" ", @fields) . "\n" : (), ); } @@ -407,7 +408,7 @@ my ($file, $l, @fields) = @_; @fields = keys %$l unless @fields; - MDK::Common::File::output($file, map { $l->{$_} ? "setenv $_ $l->{$_}\n" : () } @fields); + MDK::Common::File::output($file, map { $l->{$_} ? "setenv $_ " . quoteForSh($l->{$_}) . "\n" : () } @fields); } sub template2file {