|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: Open code rw and ro node creation.
# HG changeset patch
# User Paul Durrant <paul.durrant@xxxxxxxxxx>
# Date 1324047253 0
# Node ID ef2264bbebe1d14666f3c61ca3cf4f1dd16a21b2
# Parent 9be0e68ae45fcc21e32585d9f0596554a0fff27a
libxl: Open code rw and ro node creation.
Use a new libxl__xs_mkdir() to do this and also clean up extraneous
node creation while in the neighbourhood. Checking 'xenstore-ls -fp'
output before and after shows that, as well as the disappearance of
error, drivers, messages and domid, the following perms change is also
present:
-device/suspend = "" (ndomU)
+device/suspend = "" (n0,rdomU)
I believe the new perms are more desirable than the old ones.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
diff -r 9be0e68ae45f -r ef2264bbebe1 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c Tue Jan 10 15:38:08 2012 +0000
+++ b/tools/libxl/libxl_create.c Fri Dec 16 14:54:13 2011 +0000
@@ -320,11 +320,8 @@
* on exit (even error exit), domid may be valid and refer to a domain */
{
libxl_ctx *ctx = libxl__gc_owner(gc);
- int flags, ret, i, rc;
+ int flags, ret, rc;
char *uuid_string;
- char *rw_paths[] = { "control/shutdown", "device",
"device/suspend/event-channel" , "data"};
- char *ro_paths[] = { "cpu", "memory", "device", "error", "drivers",
- "control", "attr", "messages" };
char *dom_path, *vm_path, *libxl_path;
struct xs_permissions roperm[2];
struct xs_permissions rwperm[1];
@@ -384,6 +381,7 @@
rc = ERROR_FAIL;
goto out;
}
+
noperm[0].id = 0;
noperm[0].perms = XS_PERM_NONE;
@@ -391,6 +389,7 @@
roperm[0].perms = XS_PERM_NONE;
roperm[1].id = *domid;
roperm[1].perms = XS_PERM_READ;
+
rwperm[0].id = *domid;
rwperm[0].perms = XS_PERM_NONE;
@@ -398,32 +397,42 @@
t = xs_transaction_start(ctx->xsh);
xs_rm(ctx->xsh, t, dom_path);
- xs_mkdir(ctx->xsh, t, dom_path);
- xs_set_permissions(ctx->xsh, t, dom_path, roperm, ARRAY_SIZE(roperm));
+ libxl__xs_mkdir(gc, t, dom_path, roperm, ARRAY_SIZE(roperm));
+
xs_rm(ctx->xsh, t, vm_path);
- xs_mkdir(ctx->xsh, t, vm_path);
- xs_set_permissions(ctx->xsh, t, vm_path, roperm, ARRAY_SIZE(roperm));
+ libxl__xs_mkdir(gc, t, vm_path, roperm, ARRAY_SIZE(roperm));
xs_rm(ctx->xsh, t, libxl_path);
- xs_mkdir(ctx->xsh, t, libxl_path);
- xs_set_permissions(ctx->xsh, t, libxl_path, noperm, ARRAY_SIZE(noperm));
+ libxl__xs_mkdir(gc, t, libxl_path, noperm, ARRAY_SIZE(noperm));
xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/vm", dom_path), vm_path,
strlen(vm_path));
rc = libxl__domain_rename(gc, *domid, 0, info->name, t);
if (rc)
goto out;
- for (i = 0; i < ARRAY_SIZE(rw_paths); i++) {
- char *path = libxl__sprintf(gc, "%s/%s", dom_path, rw_paths[i]);
- xs_mkdir(ctx->xsh, t, path);
- xs_set_permissions(ctx->xsh, t, path, rwperm, ARRAY_SIZE(rwperm));
- }
- for (i = 0; i < ARRAY_SIZE(ro_paths); i++) {
- char *path = libxl__sprintf(gc, "%s/%s", dom_path, ro_paths[i]);
- xs_mkdir(ctx->xsh, t, path);
- xs_set_permissions(ctx->xsh, t, path, roperm, ARRAY_SIZE(roperm));
- }
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/cpu", dom_path),
+ roperm, ARRAY_SIZE(roperm));
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/memory", dom_path),
+ roperm, ARRAY_SIZE(roperm));
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/device", dom_path),
+ roperm, ARRAY_SIZE(roperm));
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/control", dom_path),
+ roperm, ARRAY_SIZE(roperm));
+
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/control/shutdown", dom_path),
+ rwperm, ARRAY_SIZE(rwperm));
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/device/suspend/event-channel",
dom_path),
+ rwperm, ARRAY_SIZE(rwperm));
+ libxl__xs_mkdir(gc, t,
+ libxl__sprintf(gc, "%s/data", dom_path),
+ rwperm, ARRAY_SIZE(rwperm));
xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/uuid", vm_path), uuid_string,
strlen(uuid_string));
xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/name", vm_path), info->name,
strlen(info->name));
diff -r 9be0e68ae45f -r ef2264bbebe1 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Tue Jan 10 15:38:08 2012 +0000
+++ b/tools/libxl/libxl_internal.h Fri Dec 16 14:54:13 2011 +0000
@@ -206,6 +206,9 @@
_hidden char **libxl__xs_directory(libxl__gc *gc, xs_transaction_t t,
const char *path, unsigned int *nb);
/* On error: returns NULL, sets errno (no logging) */
+_hidden bool libxl__xs_mkdir(libxl__gc *gc, xs_transaction_t t,
+ const char *path, struct xs_permissions *perms,
+ unsigned int num_perms);
_hidden char *libxl__xs_libxl_path(libxl__gc *gc, uint32_t domid);
diff -r 9be0e68ae45f -r ef2264bbebe1 tools/libxl/libxl_xshelp.c
--- a/tools/libxl/libxl_xshelp.c Tue Jan 10 15:38:08 2012 +0000
+++ b/tools/libxl/libxl_xshelp.c Fri Dec 16 14:54:13 2011 +0000
@@ -122,6 +122,16 @@
return ret;
}
+bool libxl__xs_mkdir(libxl__gc *gc, xs_transaction_t t,
+ const char *path, struct xs_permissions *perms,
+ unsigned int num_perms)
+{
+ libxl_ctx *ctx = libxl__gc_owner(gc);
+ if (!xs_mkdir(ctx->xsh, t, path))
+ return false;
+ return xs_set_permissions(ctx->xsh, t, path, perms, num_perms);
+}
+
char *libxl__xs_libxl_path(libxl__gc *gc, uint32_t domid)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |