From 062c8ffe82563c0bbb3f5b52dcad0a72d22bf670 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Thu, 9 Feb 2012 18:33:36 +0000 Subject: xenstored: add --priv-domid parameter This parameter identifies an alternative service domain which has superuser access to the xenstore database, which is currently required to set up a new domain's xenstore entries. Signed-off-by: Daniel De Graaf Acked-by: Ian Campbell Cc: Ian Jackson Cc: Stefano Stabellini Committed-by: Ian Jackson --- tools/xenstore/xenstored_core.c | 5 +++++ tools/xenstore/xenstored_core.h | 1 + tools/xenstore/xenstored_domain.c | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) (limited to 'tools/xenstore') diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 66584f51d2..a42f55291d 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -1752,6 +1752,7 @@ static struct option options[] = { { "event", 1, NULL, 'e' }, { "help", 0, NULL, 'H' }, { "no-fork", 0, NULL, 'N' }, + { "priv-domid", 1, NULL, 'p' }, { "output-pid", 0, NULL, 'P' }, { "entry-size", 1, NULL, 'S' }, { "trace-file", 1, NULL, 'T' }, @@ -1765,6 +1766,7 @@ static struct option options[] = { extern void dump_conn(struct connection *conn); int dom0_event = 0; +int priv_domid = 0; int main(int argc, char *argv[]) { @@ -1825,6 +1827,9 @@ int main(int argc, char *argv[]) case 'e': dom0_event = strtol(optarg, NULL, 10); break; + case 'p': + priv_domid = strtol(optarg, NULL, 10); + break; } } if (optind != argc) diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index e1c2be7a48..92c27ba92f 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -169,6 +169,7 @@ void dtrace_io(const struct connection *conn, const struct buffered_data *data, extern int event_fd; extern int dom0_event; +extern int priv_domid; /* Map the kernel's xenstore page. */ void *xenbus_map(void); diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_domain.c index fa9c8fe984..f8c822f46e 100644 --- a/tools/xenstore/xenstored_domain.c +++ b/tools/xenstore/xenstored_domain.c @@ -259,7 +259,7 @@ bool domain_can_read(struct connection *conn) bool domain_is_unprivileged(struct connection *conn) { - return (conn && conn->domain && conn->domain->domid != 0); + return (conn && conn->domain && conn->domain->domid != 0 && conn->domain->domid != priv_domid); } bool domain_can_write(struct connection *conn) -- cgit v1.2.3