You can just use:
xenstore-ls -p
You'll get output like this:
tool = "" . . . . . . . . . . . . . . . . . . . . . . . . . (n0)
xenstored = "" . . . . . . . . . . . . . . . . . . . . . . (n0)
vm = "" . . . . . . . . . . . . . . . . . . . . . . . . . . (n0)
59809a69-1c6d-48f1-bbbe-ed08e3d69b36 = "" . . . . . . . . . (n0,r4)
uuid = "59809a69-1c6d-48f1-bbbe-ed08e3d69b36" . . . . . . (n0,r4)
name = "domU" . . . . . . . . . . . . . . . . . . . . . . (n0,r4)
pool_name = "Pool-0" . . . . . . . . . . . . . . . . . . . (n0,r4)
image = "" . . . . . . . . . . . . . . . . . . . . . . . . (n0,r4)
ostype = "linux" . . . . . . . . . . . . . . . . . . . . (n0,r4)
kernel = "/boot/vmlinuz-domU" . . . . . . . . . . . . . . (n0,r4)
ramdisk = "/boot/initrd.img-domU" . . . . . . . . . . . . (n0,r4)
.
.
.
Patrick
On 30 March 2011 05:23, Frank Pan <frankpzh@xxxxxxxxx> wrote:
> The entries in xenstore have permission attributes. The
> attributes can be easily altered by xenstore-chmod, however,
> I cannot find a easy way to see them.
>
> I've modified xenstore_client.c to raise a new utility.
> The utility checks the permission and makes an easy-look output.
>
> Please tell me any suggestions.
> Thanks.
>
> Signed-off-by: Frank Pan <frankpzh@xxxxxxxxx>
> ---
> tools/xenstore/Makefile | 2 +-
> tools/xenstore/xenstore_client.c | 58
> ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+), 1 deletions(-)
>
> diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile
> index 35e68d0..ca57e9c 100644
> --- a/tools/xenstore/Makefile
> +++ b/tools/xenstore/Makefile
> @@ -9,7 +9,7 @@ CFLAGS += -I.
> CFLAGS += $(CFLAGS_libxenctrl)
>
> CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm
> xenstore-chmod
> -CLIENTS += xenstore-write xenstore-ls xenstore-watch
> +CLIENTS += xenstore-write xenstore-ls xenstore-watch xenstore-stat
>
> XENSTORED_OBJS = xenstored_core.o xenstored_watch.o
> xenstored_domain.o xenstored_transaction.o xs_lib.o talloc.o utils.o
> tdb.o hashtable.o
>
> diff --git a/tools/xenstore/xenstore_client.c
> b/tools/xenstore/xenstore_client.c
> index 94b82b9..cd8b4d8 100644
> --- a/tools/xenstore/xenstore_client.c
> +++ b/tools/xenstore/xenstore_client.c
> @@ -37,6 +37,7 @@ enum mode {
> MODE_rm,
> MODE_write,
> MODE_watch,
> + MODE_stat,
> };
>
> static char *output_buf = NULL;
> @@ -99,6 +100,9 @@ usage(enum mode mode, int incl_mode, const char *progname)
> case MODE_watch:
> mstr = incl_mode ? "watch " : "";
> errx(1, "Usage: %s %s[-h] [-n NR] key", progname, mstr);
> + case MODE_stat:
> + mstr = incl_mode ? "stat " : "";
> + errx(1, "Usage: %s %s[-h] [-s] key [...]", progname, mstr);
> }
> }
>
> @@ -286,6 +290,52 @@ do_watch(struct xs_handle *xsh, int max_events)
> }
> }
>
> +static const char *
> +perm_type_str(int perm_type)
> +{
> + switch (perm_type) {
> + case XS_PERM_WRITE:
> + return "-w";
> + case XS_PERM_READ:
> + return "r-";
> + case XS_PERM_READ|XS_PERM_WRITE:
> + return "rw";
> + case XS_PERM_NONE:
> + return "--";
> + default:
> + return "uu";
> + }
> +}
> +
> +static void
> +do_stat(struct xs_handle *xsh, xs_transaction_t xth, char *path)
> +{
> + unsigned int i, nperms;
> + struct xs_permissions *perms;
> +
> + perms = xs_get_permissions(xsh, xth, path, &nperms);
> + if (!perms)
> + errx(1, "Unable to get permission on %s\n", path);
> +
> + if (!nperms) {
> + free(perms);
> + errx(1, "Cannot determine owner of %s\n", path);
> + }
> +
> + output("Path:\t\t\t%s\n", path);
> + output("Owner:\t\t\t%d\n", perms[0].id);
> + output("Default permission:\t%s\n", perm_type_str(perms[0].perms));
> + output("Permissions:\t\t");
> + for (i = 1; i < nperms; i++) {
> + output("%d: %s", perms[i].id,
> + perm_type_str(perms[i].perms));
> + if (i < nperms - 1)
> + output(" ");
> + }
> + output("\n");
> + free(perms);
> +}
> +
> static int
> perform(enum mode mode, int optind, int argc, char **argv, struct
> xs_handle *xsh,
> xs_transaction_t xth, int prefix, int tidy, int upto, int
> recurse, int nr_watches)
> @@ -459,6 +509,12 @@ perform(enum mode mode, int optind, int argc,
> char **argv, struct xs_handle *xsh
> errx(1, "Unable to add watch on %s\n", w);
> }
> do_watch(xsh, nr_watches);
> + break;
> + }
> + case MODE_stat: {
> + do_stat(xsh, xth, argv[optind]);
> + optind++;
> + break;
> }
> }
> }
> @@ -486,6 +542,8 @@ static enum mode lookup_mode(const char *m)
> return MODE_read;
> else if (strcmp(m, "watch") == 0)
> return MODE_watch;
> + else if (strcmp(m, "stat") == 0)
> + return MODE_stat;
>
> errx(1, "unknown mode %s\n", m);
> return 0;
> --
> 1.7.1
>
> --
> 潘震皓, Frank Pan
>
> Computer Science and Technology
> Tsinghua University
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|