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
|