fuse: Specify format of disks (RHBZ#642934,CVE-2010-3851).
[libguestfs.git] / inspector / virt-inspector
index a7a6514..bfaa50e 100755 (executable)
@@ -27,6 +27,7 @@ use Pod::Usage;
 use Getopt::Long;
 use Data::Dumper;
 use XML::Writer;
+use String::ShellQuote qw(shell_quote);
 use Locale::TextDomain 'libguestfs';
 
 # Optional:
@@ -199,7 +200,15 @@ if ($version) {
 pod2usage (__"virt-inspector: no image or VM names given") if @ARGV == 0;
 
 my $rw = 0;
+
+# XXX This is a bug: Originally we intended to open the guest with
+# rw=>1 in order to tell Sys::Guestfs::Lib that we should disallow
+# active domains.  However this also has the effect of opening the
+# disk image in write mode, and in any case we don't use this option
+# in guestfish any more since we moved all the inspection code into
+# the core library.  We should drop the fish output modes completely.
 $rw = 1 if $output eq "fish";
+
 my $g;
 my @images;
 if ($uri) {
@@ -298,13 +307,17 @@ if ($output eq "fish" || $output eq "ro-fish") {
         print "--ro ";
     }
 
-    print "-a $_ " foreach @images;
+    foreach (@images) {
+        printf "-a %s ", shell_quote ($_);
+    }
 
     my $mounts = $oses->{$root_dev}->{mounts};
     # Have to mount / first.  Luckily '/' is early in the ASCII
     # character set, so this should be OK.
     foreach (sort keys %$mounts) {
-        print "-m $mounts->{$_}:$_ " if $_ ne "swap" && $_ ne "none";
+        if ($_ ne "swap" && $_ ne "none") {
+            printf "-m %s ", shell_quote ("$mounts->{$_}:$_");
+        }
     }
     print "\n"
 }
@@ -316,7 +329,7 @@ elsif ($output eq "perl") {
 
 # YAML output
 elsif ($output eq "yaml") {
-    die __"virt-inspector: no YAML support\n"
+    die __"virt-inspector: no YAML support, try installing perl-YAML or libyaml-perl\n"
         unless exists $INC{"YAML/Any.pm"};
 
     print Dump(%$oses);
@@ -838,6 +851,13 @@ sub output_query_kernel_arch
 
 =back
 
+=head1 SHELL QUOTING
+
+Libvirt guest names can contain arbitrary characters, some of which
+have meaning to the shell such as C<#> and space.  You may need to
+quote or escape these characters on the command line.  See the shell
+manual page L<sh(1)> for details.
+
 =head1 SEE ALSO
 
 L<guestfs(3)>,
@@ -847,9 +867,9 @@ L<Sys::Guestfs::Lib(3)>,
 L<Sys::Virt(3)>,
 L<http://libguestfs.org/>.
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-Richard W.M. Jones L<http://et.redhat.com/~rjones/>
+Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 Matthew Booth L<mbooth@redhat.com>