cb7a0bd3d6
26189-xenstore-chmod.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=217
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]);
|
|
}
|
|
}
|
|
|