[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xenstore-stat v2
Ah, I see Ian beat me to it. Looking over your patch, it seems like your tool will produce something much prettier too. Patrick On 30 March 2011 09:04, Patrick Colp <pjcolp@xxxxxxxxx> wrote: > 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 |