Anthony Liguori
2006-Mar-23 16:24 UTC
[Xen-devel] Re: [Xen-changelog] Added exception handler for ProtocolError.
Xen patchbot -unstable wrote:> # HG changeset patch > # User emellor@leeni.uk.xensource.com > # Node ID c1bb4eb565296bdb00aed84fcc877befbcebd8e9 > # Parent b55ca95fdc846a5db9f30ba1c5d065fe898f88e7 > Added exception handler for ProtocolError. > > Signed-off-by: Ewan Mellor <ewan@xensource.com> > > diff -r b55ca95fdc84 -r c1bb4eb56529 tools/python/xen/xm/main.py > --- a/tools/python/xen/xm/main.py Thu Mar 23 10:55:56 2006 > +++ b/tools/python/xen/xm/main.py Thu Mar 23 10:58:19 2006 > @@ -1102,6 +1102,12 @@ > else: > err("Error connecting to xend: %s." % ex[1]) > sys.exit(1) > + except xmlrpclib.ProtocolError, ex: > + if os.geteuid() != 0: > + err("Most commands need root access. Please try again as root.") > + else: > + err("Error connecting to xend: %s." % ex.errmsg) > + sys.exit(1) > except SystemExit: > sys.exit(1) > except xmlrpclib.Fault, ex: >Hi Ewan, ProtocolError''s shouldn''t happen. The case where os.geteuid() != 0 is a possibility (although I thought we had a check earlier for that?). However, if we are getting them for another reason, something''s wrong. What commands were you seeing this with? There may be a latent bug in the dispatch code that marshals exceptions... Regards, Anthony Liguori> _______________________________________________ > Xen-changelog mailing list > Xen-changelog@lists.xensource.com > http://lists.xensource.com/xen-changelog >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ewan Mellor
2006-Mar-23 16:47 UTC
Re: [Xen-devel] Re: [Xen-changelog] Added exception handler for ProtocolError.
On Thu, Mar 23, 2006 at 10:24:42AM -0600, Anthony Liguori wrote:> Xen patchbot -unstable wrote: > ># HG changeset patch > ># User emellor@leeni.uk.xensource.com > ># Node ID c1bb4eb565296bdb00aed84fcc877befbcebd8e9 > ># Parent b55ca95fdc846a5db9f30ba1c5d065fe898f88e7 > >Added exception handler for ProtocolError. > > > >Signed-off-by: Ewan Mellor <ewan@xensource.com> > > > >diff -r b55ca95fdc84 -r c1bb4eb56529 tools/python/xen/xm/main.py > >--- a/tools/python/xen/xm/main.py Thu Mar 23 10:55:56 2006 > >+++ b/tools/python/xen/xm/main.py Thu Mar 23 10:58:19 2006 > >@@ -1102,6 +1102,12 @@ > > else: > > err("Error connecting to xend: %s." % ex[1]) > > sys.exit(1) > >+ except xmlrpclib.ProtocolError, ex: > >+ if os.geteuid() != 0: > >+ err("Most commands need root access. Please try again as > >root.") > >+ else: > >+ err("Error connecting to xend: %s." % ex.errmsg) > >+ sys.exit(1) > > except SystemExit: > > sys.exit(1) > > except xmlrpclib.Fault, ex: > > > > Hi Ewan, > > ProtocolError''s shouldn''t happen. The case where os.geteuid() != 0 is a > possibility (although I thought we had a check earlier for that?). > However, if we are getting them for another reason, something''s wrong.I wasn''t sure whether you''d get a ProtocolError or an IOError if you tried to connect to the socket as non-root, so I just threw the geteuid test in -- if we can confirm that it''s not needed (i.e. you are guaranteed to get an IOError) then we can do without that. The ProtocolErrors in general were being thrown whenever an exception made it all the way back to the top of a function registered with the server (i.e. any of our message handlers). These exceptions would get translated to a 500 Internal Server Error which would appear at the client as a ProtocolError. I don''t know whether it is any exception that causes this, or only ones that inherit from StandardError or something like that. One particular trigger was XMLRPCServer.dispatch, which wasn''t checking the return value from lookup. This caused it to try and call None as a function whenever the user specified a domain that did not exist. Ewan. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Anthony Liguori
2006-Mar-23 16:59 UTC
Re: [Xen-devel] Re: [Xen-changelog] Added exception handler for ProtocolError.
Ewan Mellor wrote:> On Thu, Mar 23, 2006 at 10:24:42AM -0600, Anthony Liguori wrote: > >> Hi Ewan, >> >> ProtocolError''s shouldn''t happen. The case where os.geteuid() != 0 is a >> possibility (although I thought we had a check earlier for that?). >> However, if we are getting them for another reason, something''s wrong. >> > > I wasn''t sure whether you''d get a ProtocolError or an IOError if you tried to > connect to the socket as non-root, so I just threw the geteuid test in -- if > we can confirm that it''s not needed (i.e. you are guaranteed to get an > IOError) then we can do without that. > > The ProtocolErrors in general were being thrown whenever an exception made it > all the way back to the top of a function registered with the server (i.e. any > of our message handlers).Yeah, in xen.util.xmlrpclib2:TCPXMLRPCServer::_marshaled_dispatch() we should catch any exception and convert it to a proper xmlrpclib.Fault. If exceptions are getting past that, there''s something wrong. I''ll look at it today and see if I can''t figure out what''s happening. Thanks for all your effort in merging this stuff Ewan! Regards, Anthony Liguori> These exceptions would get translated to a 500 > Internal Server Error which would appear at the client as a ProtocolError. I > don''t know whether it is any exception that causes this, or only ones that > inherit from StandardError or something like that. One particular trigger was > XMLRPCServer.dispatch, which wasn''t checking the return value from lookup. > This caused it to try and call None as a function whenever the user specified > a domain that did not exist. > > Ewan. >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel