mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xenstore: xenbus cannot be opened read-only
In order to read keys from xenstore, the xenstore libraries need to write the request to the xenbus socket. This means that the socket cannot be opened read-only. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
ebbd2561b4
commit
27be7560a5
1 file changed
+8
-10
+8
-10
@@ -182,15 +182,13 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int get_dev(const char *connect_to, unsigned long flags)
|
||||
static int get_dev(const char *connect_to)
|
||||
{
|
||||
if (flags & XS_OPEN_READONLY)
|
||||
return open(connect_to, O_RDONLY);
|
||||
else
|
||||
return open(connect_to, O_RDWR);
|
||||
/* We cannot open read-only because requests are writes */
|
||||
return open(connect_to, O_RDWR);
|
||||
}
|
||||
|
||||
static struct xs_handle *get_handle(const char *connect_to, unsigned long flags)
|
||||
static struct xs_handle *get_handle(const char *connect_to)
|
||||
{
|
||||
struct stat buf;
|
||||
struct xs_handle *h = NULL;
|
||||
@@ -202,7 +200,7 @@ static struct xs_handle *get_handle(const char *connect_to, unsigned long flags)
|
||||
if (S_ISSOCK(buf.st_mode))
|
||||
fd = get_socket(connect_to);
|
||||
else
|
||||
fd = get_dev(connect_to, flags);
|
||||
fd = get_dev(connect_to);
|
||||
|
||||
if (fd == -1)
|
||||
return NULL;
|
||||
@@ -258,12 +256,12 @@ struct xs_handle *xs_open(unsigned long flags)
|
||||
struct xs_handle *xsh = NULL;
|
||||
|
||||
if (flags & XS_OPEN_READONLY)
|
||||
xsh = get_handle(xs_daemon_socket_ro(), flags);
|
||||
xsh = get_handle(xs_daemon_socket_ro());
|
||||
else
|
||||
xsh = get_handle(xs_daemon_socket(), flags);
|
||||
xsh = get_handle(xs_daemon_socket());
|
||||
|
||||
if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
|
||||
xsh = get_handle(xs_domain_dev(), flags);
|
||||
xsh = get_handle(xs_domain_dev());
|
||||
|
||||
return xsh;
|
||||
}
|
||||
|
||||