[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Why xs_domain_open() in fs_backend



On Wed, 2010-10-13 at 14:18 +0100, Ian Campbell wrote:
> On Wed, 2010-10-13 at 13:57 +0100, Ian Campbell wrote:
> > 
> > I don't know how useful it is generally but it can be used to shows
> > that "xenstore-watch -s x" (i.e. xs_daemon_open) does appear to be
> > broken. 
> 
> Actually this is backwards and I seem to be seeing the exact opposite to
> you. IOW for me:
> 
> "xenstore-watch x"    -> xs_domain_open()     -- works
> "xenstore-watch -s x" -> xs_daemon_open()     -- does not work, XS_ERROR 
> reply from daemon
> 
> Can you confirm which version fails for you?
> 
> It also seems to be specific to the C xenstored, the ocaml oxenstored
> works fine.
> 
> Lastly it seems to be a problem with relative paths only, absolute paths
> seem to be ok.

This appears to be deliberate. xenstore clients connecting via the
socket interface have no implicit /local/domain/<domid> home directory.
(see xenstored_core.c:canonicalize and its use from
xenstored_watch.c:do_watch) and therefore must use absolute paths. The
ocaml xenstored works around this by assuming that socket connections
originate in domain 0, which is a little dubious if oxenstored is
running in a stub domain but in that case there is no userspace and
hence no clients using the socket interface, so it is fine.

The only problem I see is that it uses whatever random errno happens to
be current in the error message.

Ian.

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1286977342 -3600
# Node ID 78f2c9b4d902fa04f7055012c63d6dd24e823da0
# Parent  9a5a576bcc8ae17f19c9f89b73a026a0acfb5cf1
xenstored: return EINVAL for attempt to watch invalid path

errno is essentially random at this point.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 9a5a576bcc8a -r 78f2c9b4d902 tools/xenstore/xenstored_watch.c
--- a/tools/xenstore/xenstored_watch.c  Wed Oct 13 13:56:12 2010 +0100
+++ b/tools/xenstore/xenstored_watch.c  Wed Oct 13 14:42:22 2010 +0100
@@ -134,7 +134,7 @@ void do_watch(struct connection *conn, s
                relative = !strstarts(vec[0], "/");
                vec[0] = canonicalize(conn, vec[0]);
                if (!is_valid_nodename(vec[0])) {
-                       send_error(conn, errno);
+                       send_error(conn, EINVAL);
                        return;
                }
        }



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.