[Libguestfs] [PATCH] Fix a Windows conversion error when C:\Temp exists in the guest

Richard W.M. Jones rjones at redhat.com
Tue Jan 25 14:54:37 UTC 2011


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/




More information about the Libguestfs mailing list