Matthew Booth
2011-Jan-25 14:09 UTC
[Libguestfs] [PATCH] Fix a Windows conversion error when C:\Temp exists in the guest
We were unconditionally creating /temp/v2v in the guest, and later using
case_sensitive_path to look the path up again. If C:\Temp already existed, this
would lead to unpredictable results.
Fixes RHBZ#672521
---
lib/Sys/VirtV2V/Converter/Windows.pm | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/lib/Sys/VirtV2V/Converter/Windows.pm
b/lib/Sys/VirtV2V/Converter/Windows.pm
index 3050f47..144782b 100644
--- a/lib/Sys/VirtV2V/Converter/Windows.pm
+++ b/lib/Sys/VirtV2V/Converter/Windows.pm
@@ -175,10 +175,6 @@ sub _preconvert
# Note: disks are already mounted by main virt-v2v script.
- # Create directory to store firstboot service temporarily.
- eval { $g->mkdir ("/temp"); };
- eval { $g->mkdir ("/temp/v2v"); };
-
_upload_files ($g, $tmpdir, $desc, $devices, $config);
_add_viostor_to_registry ($g, $tmpdir, $desc, $devices, $config);
_add_service_to_registry ($g, $tmpdir, $desc, $devices, $config);
@@ -451,9 +447,20 @@ sub _upload_files
$g->cp (File::Spec->catfile($files{virtio}, 'viostor.sys'),
$g->case_sensitive_path
("/windows/system32/drivers"));
- # Copy other files into a temp directory
- my $path = "/temp/v2v";
- $path = $g->case_sensitive_path ($path);
+ # Copy other files into a temp directory on the guest
+ # N.B. This directory must match up with the configuration of rhsrvany
+ my $path = '';
+ foreach my $d ('Temp', 'V2V') {
+ $path .= '/'.$d;
+
+ eval { $path = $g->case_sensitive_path($path) };
+
+ # case_sensitive_path will fail if the path doesn't exist
+ if ($@) {
+ $g->mkdir($path);
+ }
+ }
+
$g->cp ($files{firstboot}, $path);
$g->cp ($files{firstbootapp}, $path);
$g->cp ($files{rhsrvany}, $path);
--
1.7.3.5
Richard W.M. Jones
2011-Jan-25 14:54 UTC
[Libguestfs] [PATCH] Fix a Windows conversion error when C:\Temp exists in the guest
On Tue, Jan 25, 2011 at 02:09:09PM +0000, Matthew Booth wrote:> We were unconditionally creating /temp/v2v in the guest, and later using > case_sensitive_path to look the path up again. If C:\Temp already existed, this > would lead to unpredictable results. > > Fixes RHBZ#672521 > --- > lib/Sys/VirtV2V/Converter/Windows.pm | 21 ++++++++++++++------- > 1 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/lib/Sys/VirtV2V/Converter/Windows.pm b/lib/Sys/VirtV2V/Converter/Windows.pm > index 3050f47..144782b 100644 > --- a/lib/Sys/VirtV2V/Converter/Windows.pm > +++ b/lib/Sys/VirtV2V/Converter/Windows.pm > @@ -175,10 +175,6 @@ sub _preconvert > > # Note: disks are already mounted by main virt-v2v script. > > - # Create directory to store firstboot service temporarily. > - eval { $g->mkdir ("/temp"); }; > - eval { $g->mkdir ("/temp/v2v"); }; > - > _upload_files ($g, $tmpdir, $desc, $devices, $config); > _add_viostor_to_registry ($g, $tmpdir, $desc, $devices, $config); > _add_service_to_registry ($g, $tmpdir, $desc, $devices, $config); > @@ -451,9 +447,20 @@ sub _upload_files > $g->cp (File::Spec->catfile($files{virtio}, 'viostor.sys'), > $g->case_sensitive_path ("/windows/system32/drivers")); > > - # Copy other files into a temp directory > - my $path = "/temp/v2v"; > - $path = $g->case_sensitive_path ($path); > + # Copy other files into a temp directory on the guest > + # N.B. This directory must match up with the configuration of rhsrvany > + my $path = ''; > + foreach my $d ('Temp', 'V2V') { > + $path .= '/'.$d; > + > + eval { $path = $g->case_sensitive_path($path) }; > + > + # case_sensitive_path will fail if the path doesn't exist > + if ($@) { > + $g->mkdir($path); > + } > + } > + > $g->cp ($files{firstboot}, $path); > $g->cp ($files{firstbootapp}, $path); > $g->cp ($files{rhsrvany}, $path);Yes, I agree this patch looks like it should fix the problem. ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://et.redhat.com/~rjones/virt-df/
Maybe Matching Threads
- [PATCH] Install VirtIO storage and network drivers in Windows
- [PATCH 1/2] Allow absolute paths in virt-v2v.conf
- [PATCH] Windows: Display an error containing all missing when any are missing
- [PATCH] Fix error in Converter::Windows when there is no transfer iso
- [PATCH v2v] Pre-convert Windows guests.