[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xenstore-stat v2
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |