[Libvir] [PATCH] check file format in virsh attach/detach-device
Masayuki Sunou
fj1826dm at aa.jp.fujitsu.com
Thu Aug 2 06:01:07 UTC 2007
Hi Daniel, Rich
Thanks for reviewing and suggestion.
I adopt (b) in consideration Daniel's suggestion.
--> Error message exists already.
This patch fixes virParseXMLDevice() for attach-device
and virDomainXMLDevID() for detach-device.
Thanks,
Masayuki Sunou.
----------------------------------------------------------------------
Index: src/xml.c
===================================================================
RCS file: /data/cvs/libvirt/src/xml.c,v
retrieving revision 1.86
diff -u -p -r1.86 xml.c
--- src/xml.c 31 Jul 2007 14:27:12 -0000 1.86
+++ src/xml.c 2 Aug 2007 05:41:21 -0000
@@ -1400,8 +1400,10 @@ virParseXMLDevice(virConnectPtr conn, ch
xml = xmlReadDoc((const xmlChar *) xmldesc, "domain.xml", NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
- if (xml == NULL)
+ if (xml == NULL) {
+ virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
goto error;
+ }
node = xmlDocGetRootElement(xml);
if (node == NULL)
goto error;
@@ -1457,8 +1459,10 @@ virDomainXMLDevID(virDomainPtr domain, c
xml = xmlReadDoc((const xmlChar *) xmldesc, "domain.xml", NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
- if (xml == NULL)
+ if (xml == NULL) {
+ virXMLError(NULL, VIR_ERR_XML_ERROR, NULL, 0);
goto error;
+ }
node = xmlDocGetRootElement(xml);
if (node == NULL)
goto error;
@@ -1499,6 +1503,9 @@ virDomainXMLDevID(virDomainPtr domain, c
goto error;
}
+ } else {
+ virXMLError(NULL, VIR_ERR_XML_ERROR, (const char *) node->name, 0);
+ goto error;
}
error:
ret = -1;
----------------------------------------------------------------------
In message <46AF1E04.2030703 at redhat.com>
"Re: [Libvir] [PATCH] check file format in virsh attach/detach-device"
""Richard W.M. Jones" <rjones at redhat.com>" wrote:
> Masayuki Sunou wrote:
> > Hi
> >
> > virsh attach/detach-devich does not check file format now.
> >
> > This patch checks config file format is XML or not.
> > (in virsh attach/detach-device)
> > If file format is not XML, just return the error with message.
>
> Hello Masayuki,
>
> To summarise what your patch does:
>
> (1) It changes the semantics of virDomainAttachDevice and
> virDomainDetachDevice so that returning -2 as an error (instead of -1)
> means "the XML is invalid".
>
> (2) It changes the implementation of the xenDaemon{Attach,Detach}Device
> functions in xend_internal.c so that it returns -2 instead of -1 if
> virParseXMLDevice fails.
>
> My problems are:
>
> (1) is an ABI change (and undocumented!). In particular some of my own
> code depends on -1 meaning error (not just < 0). Really we can't accept
> patches which make ABI changes like this. You'll have seen a patch
> which I submitted last week get rejected because it made an egregious
> ABI change.
>
> (2) isn't quite correct. The function virParseXMLDevice can fail for
> many reasons (eg. out of memory).
>
> So I think a better solution would look like either:
>
> (a) Make virsh parse the XML file and do some simple sanity checks on
> it. I realise that virsh cannot do a full check on the XML, but it can
> at least check things like: Is it an XML file? Is the root node <disk>
> or <interface>? That should be enough to catch simple command-line errors.
>
> or:
>
> (b) Fix the error handling in virParseXMLDevice so that it generates
> reasonable errors. At the moment the error handling is mostly missing,
> and so error don't get propagated back to the user.
>
> or:
>
> (c) Modify libvirt to add a virDomainVerifyDeviceXML call which returns
> 0 (correct) or -1 (error) depending on whether the Device XML passed is
> reasonable. Then virsh can do this call before it does the
> attach/detach call.
>
> I hope that is helpful.
>
> Rich.
>
> --
> Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
> Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
> Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in
> England and Wales under Company Registration No. 03798903
>
>
More information about the libvir-list
mailing list