Correctly handle RPMs with whitespace in their path

This commit is contained in:
Christopher Huhn
2013-08-15 10:32:20 +02:00
committed by Joey Hess
parent 7aee419bd2
commit dd38b4e86d

View File

@@ -161,11 +161,11 @@ sub unpack {
# Check if we need to use lzma to uncompress the cpio archive # Check if we need to use lzma to uncompress the cpio archive
my $decomp=''; my $decomp='';
if ($this->do("rpm2cpio ".$this->filename." | lzma -t -q > /dev/null 2>&1")) { if ($this->do("rpm2cpio '".$this->filename."' | lzma -t -q > /dev/null 2>&1")) {
$decomp = 'lzma -d -q |'; $decomp = 'lzma -d -q |';
} }
$this->do("rpm2cpio ".$this->filename." | (cd $workdir; $decomp cpio --extract --make-directories --no-absolute-filenames --preserve-modification-time) 2>&1") $this->do("rpm2cpio '".$this->filename."' | (cd $workdir; $decomp cpio --extract --make-directories --no-absolute-filenames --preserve-modification-time) 2>&1")
or die "Unpacking of '".$this->filename."' failed"; or die "Unpacking of '".$this->filename."' failed";
# cpio does not necessarily store all parent directories in an # cpio does not necessarily store all parent directories in an
@@ -174,7 +174,7 @@ sub unpack {
# Find those directories and make them mode 755, which is more # Find those directories and make them mode 755, which is more
# reasonable. # reasonable.
my %seenfiles; my %seenfiles;
open (RPMLIST, "rpm2cpio ".$this->filename." | $decomp cpio -it --quiet |") open (RPMLIST, "rpm2cpio '".$this->filename."' | $decomp cpio -it --quiet |")
or die "File list of '".$this->filename."' failed"; or die "File list of '".$this->filename."' failed";
while (<RPMLIST>) { while (<RPMLIST>) {
chomp; chomp;
@@ -184,7 +184,7 @@ sub unpack {
foreach my $file (`cd $workdir; find ./`) { foreach my $file (`cd $workdir; find ./`) {
chomp $file; chomp $file;
if (! $seenfiles{$file} && -d "$workdir/$file" && ! -l "$workdir/$file") { if (! $seenfiles{$file} && -d "$workdir/$file" && ! -l "$workdir/$file") {
$this->do("chmod 755 $workdir/$file"); $this->do("chmod 755 '$workdir/$file'");
} }
} }
@@ -248,7 +248,7 @@ sub unpack {
# postinst. # postinst.
my %owninfo = (); my %owninfo = ();
my %modeinfo = (); my %modeinfo = ();
open (GETPERMS, 'rpm --queryformat \'[%{FILEMODES} %{FILEUSERNAME} %{FILEGROUPNAME} %{FILENAMES}\n]\' -qp '.$this->filename.' |'); open (GETPERMS, 'rpm --queryformat \'[%{FILEMODES} %{FILEUSERNAME} %{FILEGROUPNAME} %{FILENAMES}\n]\' -qp \''.$this->filename.'\' |');
while (<GETPERMS>) { while (<GETPERMS>) {
chomp; chomp;
my ($mode, $owner, $group, $file) = split(/ /, $_, 4); my ($mode, $owner, $group, $file) = split(/ /, $_, 4);