On Thu, Oct 28, 2010 at 02:55:16PM +0100, Matthew Booth wrote:
I'm not entirely sure removing all the output methods except XML
with no warning is an entirely good idea. This is an interface,
after all, and it's being removed with no warning. Instead, I would
recommend updating all the output methods except XML to display (to
STDERR) a warning that this function is deprecated and will be
removed in the next stable release.
This is definitely a new program, not particularly related to the old
one. I was thinking about calling it 'virt-inspector2' at one point.
(I should say for readers that we don't guarantee the inputs and
outputs of these programs, only the C API).
This would identify RHEL 3 and RHEL 4 as using yum, which they
don't. I suggest looking for /usr/bin/yum and /usr/bin/up2date
instead.
Good point, will fix.
>+ eval {
>+ my ($fh, $filename) = tempfile (UNLINK => 1);
>+ my $fddev = "/dev/fd/" . fileno ($fh);
>+ $g->download ("/var/lib/rpm/Name", $fddev);
>+ close $fh or die "close: $!";
>+
>+ # Read the database with the Berkeley DB dump tool.
>+ my $cmd = "db_dump -p '$filename'";
>+ open PIPE, "$cmd |" or die "close: $!";
The code should gracefully handle the case that db_dump returns an
error, because the DB is corrupt.
Well it does sort of ... If the DB is corrupt or cannot be downloaded
then the eval { } around the whole thing will mean that no
<applications> section is produced.
>+ # First character on each data line is a space.
>+ if (length $_> 0&& substr ($_, 0, 1) eq ' ') {
Weird spacing.
Indeed, but not in my original :-)
>+ # Name should never contain non-printable chars.
>+ die "name contains non-printable chars" if /\\/;
>+ push @applications, $_;
This will fail to inspect a guest with a corrupt rpm database. The
XML library will take care of escaping this properly, so you should
just pass through whatever is received. The only potential exception
could be a maximum length on the string.
No, because db_dump does its own escaping.
RPM names with non-printable characters should die here. The die is
caught by the surrounding eval { } and no <applications> section is
produced, but apart from that virt-inspector continues running.
>+ if (!$@&& @applications> 0) {
Weird spacing.
Yeah, don't know what is going on, because that is not in the original
patch I posted either.
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/