86 lines
2.9 KiB
Diff
86 lines
2.9 KiB
Diff
|
# HG changeset patch
|
||
|
# Parent 8b93ac0c93f3fb8a140b4688ba71841ac927d4e3
|
||
|
xenstore-chmod: handle arbitrary number of perms rather than MAX_PERMS constant
|
||
|
|
||
|
Constant MAX_PERMS 16 is too small to use in some occasions, e.g. if
|
||
|
there are more than 16 domU(s) on one hypervisor (it's easy to
|
||
|
achieve) and one wants to do xenstore-chmod PATH to all domU(s). So,
|
||
|
remove MAX_PERMS limitation and make it as arbitrary number of perms.
|
||
|
|
||
|
Signed-off-by: Chunyan Liu <cyliu@suse.com>
|
||
|
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||
|
|
||
|
diff -r 8b93ac0c93f3 tools/xenstore/xenstore_client.c
|
||
|
--- a/tools/xenstore/xenstore_client.c Tue Nov 13 11:19:17 2012 +0000
|
||
|
+++ b/tools/xenstore/xenstore_client.c Mon Nov 26 11:33:38 2012 +0800
|
||
|
@@ -25,7 +25,6 @@
|
||
|
#define PATH_SEP '/'
|
||
|
#define MAX_PATH_LEN 256
|
||
|
|
||
|
-#define MAX_PERMS 16
|
||
|
|
||
|
enum mode {
|
||
|
MODE_unknown,
|
||
|
@@ -407,44 +406,41 @@ perform(enum mode mode, int optind, int
|
||
|
output("%s\n", list[i]);
|
||
|
}
|
||
|
free(list);
|
||
|
- optind++;
|
||
|
- break;
|
||
|
- }
|
||
|
- case MODE_ls: {
|
||
|
- do_ls(xsh, argv[optind], 0, prefix);
|
||
|
- optind++;
|
||
|
- break;
|
||
|
+ optind++;
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ case MODE_ls: {
|
||
|
+ do_ls(xsh, argv[optind], 0, prefix);
|
||
|
+ optind++;
|
||
|
+ break;
|
||
|
}
|
||
|
case MODE_chmod: {
|
||
|
- struct xs_permissions perms[MAX_PERMS];
|
||
|
- int nperms = 0;
|
||
|
/* save path pointer: */
|
||
|
char *path = argv[optind++];
|
||
|
- for (; argv[optind]; optind++, nperms++)
|
||
|
+ int nperms = argc - optind;
|
||
|
+ struct xs_permissions perms[nperms];
|
||
|
+ int i;
|
||
|
+ for (i = 0; argv[optind]; optind++, i++)
|
||
|
{
|
||
|
- if (MAX_PERMS <= nperms)
|
||
|
- errx(1, "Too many permissions specified. "
|
||
|
- "Maximum per invocation is %d.", MAX_PERMS);
|
||
|
-
|
||
|
- perms[nperms].id = atoi(argv[optind]+1);
|
||
|
+ perms[i].id = atoi(argv[optind]+1);
|
||
|
|
||
|
switch (argv[optind][0])
|
||
|
{
|
||
|
case 'n':
|
||
|
- perms[nperms].perms = XS_PERM_NONE;
|
||
|
+ perms[i].perms = XS_PERM_NONE;
|
||
|
break;
|
||
|
case 'r':
|
||
|
- perms[nperms].perms = XS_PERM_READ;
|
||
|
+ perms[i].perms = XS_PERM_READ;
|
||
|
break;
|
||
|
case 'w':
|
||
|
- perms[nperms].perms = XS_PERM_WRITE;
|
||
|
+ perms[i].perms = XS_PERM_WRITE;
|
||
|
break;
|
||
|
case 'b':
|
||
|
- perms[nperms].perms = XS_PERM_READ | XS_PERM_WRITE;
|
||
|
+ perms[i].perms = XS_PERM_READ | XS_PERM_WRITE;
|
||
|
break;
|
||
|
default:
|
||
|
errx(1, "Invalid permission specification: '%c'",
|
||
|
- argv[optind][0]);
|
||
|
+ argv[optind][0]);
|
||
|
}
|
||
|
}
|
||
|
|