X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=data%2FPVE%2FTools.pm;h=78d7b9f2140026d4d6d1d4142773a768a05b017d;hp=4f85564a5a51aa885558a5040e86a07f13d12156;hb=762e32238687f0bb7a2687e39fb7145502fadf40;hpb=776fbfa8bde32e28297bcb74d042c8ce7a1a3d7c diff --git a/data/PVE/Tools.pm b/data/PVE/Tools.pm index 4f85564..78d7b9f 100644 --- a/data/PVE/Tools.pm +++ b/data/PVE/Tools.pm @@ -225,6 +225,15 @@ sub run_command { local $ENV{LVM_SUPPRESS_FD_WARNINGS} = "1"; $pid = open3($writer, $reader, $error, @$cmd) || die $!; + + # if we pipe fron STDIN, open3 closes STDIN, so we we + # a perl warning "Filehandle STDIN reopened as GENXYZ .. " + # as soon as we open a new file. + # to avoid that we open /dev/null + if (!ref($writer) && !defined(fileno(STDIN))) { + POSIX::close(0); + open(STDIN, "add($reader); + $select->add($reader) if ref($reader); $select->add($error); my $outlog = ''; @@ -676,4 +687,26 @@ sub random_ether_addr { return $mac; } +sub shellquote { + my $str = shift; + + return "''" if !defined ($str) || ($str eq ''); + + die "unable to quote string containing null (\\000) bytes" + if $str =~ m/\x00/; + + # from String::ShellQuote + if ($str =~ m|[^\w!%+,\-./:@^]|) { + + # ' -> '\'' + $str =~ s/'/'\\''/g; + + $str = "'$str'"; + $str =~ s/^''//; + $str =~ s/''$//; + } + + return $str; +} + 1;