]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdcap: 'allow rwx pool foo' or 'allow pool foo rwx'
authorSage Weil <sage@inktank.com>
Thu, 14 Jun 2012 23:47:22 +0000 (16:47 -0700)
committerSage Weil <sage@inktank.com>
Thu, 14 Jun 2012 23:47:22 +0000 (16:47 -0700)
Make the match vs spec order not matter.

Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSDCap.cc
src/test/osd/osdcap.cc

index fb30c31ecbb176e4590161dad450c395d4731ae9..5d058ff5b15761a3ce6afc20cc628d7941cd6bd0 100644 (file)
@@ -176,7 +176,8 @@ struct OSDCapParser : qi::grammar<Iterator, OSDCap(), ascii::space_type>
                         str                          [_val = phoenix::construct<OSDCapSpec>(_1, string())] ));
 
     // grant := allow match capspec
-    grant = lit("allow") >> ((match >> capspec)       [_val = phoenix::construct<OSDCapGrant>(_1, _2)]);
+    grant = lit("allow") >> ((capspec >> match)       [_val = phoenix::construct<OSDCapGrant>(_2, _1)] |
+                            (match >> capspec)       [_val = phoenix::construct<OSDCapGrant>(_1, _2)]);
 
     // osdcap := grant [grant ...]
     osdcap %= (grant % (lit(';') | lit(',')))         [_val = phoenix::construct<OSDCap>(_1)];
index 0bcb613dd62100db28c798675c600a18253c3d6c..a3d9e9d5b835bf8145308418f5f747470040e6aa 100644 (file)
@@ -20,22 +20,38 @@ const char *parse_good[] = {
   "allow *",
   "allow r",
   "allow rwx",
+  "allow r pool foo ",
+  " allow wx pool taco",
   "allow pool foo r",
   "allow pool taco wx",
+  "allow wx pool taco object_prefix obj",
+  "allow wx pool taco object_prefix obj_with_underscores_and_no_quotes",
   "allow pool taco object_prefix obj wx",
   "allow pool taco object_prefix obj_with_underscores_and_no_quotes wx",
-  "allow pool 'weird name' rwx",
-  "allow pool \"weird name with ''s\" rwx",
+  "allow rwx pool 'weird name'",
+  "allow rwx pool \"weird name with ''s\"",
+  "allow rwx auid 123",
+  "allow rwx pool foo, allow r pool bar",
+  "allow rwx pool foo ; allow r pool bar",
+  "allow rwx pool foo ;allow r pool bar",
+  "allow rwx pool foo; allow r pool bar",
   "allow auid 123 rwx",
   "allow pool foo rwx, allow pool bar r",
   "allow pool foo rwx ; allow pool bar r",
   "allow pool foo rwx ;allow pool bar r",
   "allow pool foo rwx; allow pool bar r",
+  "  allow rwx pool foo; allow r pool bar  ",
+  "  allow   rwx   pool foo; allow r pool bar  ",
   "  allow pool foo rwx; allow pool bar r  ",
   "  allow     pool foo rwx; allow pool bar r  ",
   "allow pool data rw, allow pool rbd rwx, allow pool images class rbd foo",
   "allow class foo",
   "allow class clsname \"clsthingidon'tunderstand\"",
+
+
+  //  "allow  rw pool data, allow rwx pool rbd, allow pool images class rbd foo",
+  //"allow class foo",
+  //"allow class clsname \"clsthingidon'tunderstand\"",
   0
 };
 
@@ -51,15 +67,16 @@ TEST(OSDCap, ParseGood) {
 const char *parse_bad[] = {
   "ALLOW r",
   "allow rwx,",
-  "allow r pool foo",
-  "allow pool taco wwx",
-  "allow pool taco^funny&chars wwx",
-  "allow pool 'weird name'' rwx",
-  "allow object_prefix \"beforepool\" pool weird rwx",
-  "allow auid 123 pool asdf rwx",
-  "allow pool foo xrwx,, allow pool bar r",
-  ";allow pool foo rwx ; allow pool bar r",
-  "allow pool foo rwx ;allow pool bar r gibberish",
+  "allow rwx x",
+  "allow r pool foo r",
+  "allow wwx pool taco",
+  "allow wwx pool taco^funny&chars",
+  "allow rwx pool 'weird name''",
+  "allow rwx object_prefix \"beforepool\" pool weird",
+  "allow rwx auid 123 pool asdf",
+  "allow xrwx pool foo,, allow r pool bar",
+  ";allow rwx pool foo rwx ; allow r pool bar",
+  "allow rwx pool foo ;allow r pool bar gibberish",
   0
 };
 
@@ -84,7 +101,7 @@ TEST(OSDCap, AllowAll) {
 
 TEST(OSDCap, AllowPool) {
   OSDCap cap;
-  bool r = cap.parse("allow pool foo rwx", NULL);
+  bool r = cap.parse("allow rwx pool foo", NULL);
   ASSERT_TRUE(r);
 
   ASSERT_TRUE(cap.is_capable("foo", 0, "", true, true, true));
@@ -93,7 +110,7 @@ TEST(OSDCap, AllowPool) {
 
 TEST(OSDCap, AllowPools) {
   OSDCap cap;
-  bool r = cap.parse("allow pool foo rwx, allow pool bar r", NULL);
+  bool r = cap.parse("allow rwx pool foo, allow r pool bar", NULL);
   ASSERT_TRUE(r);
 
   ASSERT_TRUE(cap.is_capable("foo", 0, "", true, true, true));
@@ -104,7 +121,7 @@ TEST(OSDCap, AllowPools) {
 
 TEST(OSDCap, AllowPools2) {
   OSDCap cap;
-  bool r = cap.parse("allow r, allow pool foo rwx", NULL);
+  bool r = cap.parse("allow r, allow rwx pool foo", NULL);
   ASSERT_TRUE(r);
 
   ASSERT_TRUE(cap.is_capable("foo", 0, "", true, true, true));
@@ -114,7 +131,7 @@ TEST(OSDCap, AllowPools2) {
 
 TEST(OSDCap, ObjectPrefix) {
   OSDCap cap;
-  bool r = cap.parse("allow object_prefix foo rwx", NULL);
+  bool r = cap.parse("allow rwx object_prefix foo", NULL);
   ASSERT_TRUE(r);
 
   ASSERT_TRUE(cap.is_capable("bar", 0, "foo", true, true, true));
@@ -128,7 +145,7 @@ TEST(OSDCap, ObjectPrefix) {
 
 TEST(OSDCap, ObjectPoolAndPrefix) {
   OSDCap cap;
-  bool r = cap.parse("allow pool bar object_prefix foo rwx", NULL);
+  bool r = cap.parse("allow rwx pool bar object_prefix foo", NULL);
   ASSERT_TRUE(r);
 
   ASSERT_TRUE(cap.is_capable("bar", 0, "foo", true, true, true));