mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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 <dgdegra@tycho.nsa.gov> Acked-by: Ian Campbell <ian.campbell@citrix.com> Cc: Ian Jackson <ian.jackson@eu.citrix.com> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
This commit is contained in:
1 parent
d0b276ee3b
commit
062c8ffe82
3 files changed
+7
-1
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||