auto& match = grant.match;
if (match.is_match_all()) {
return true;
- } else if (pool_name != nullptr && match.auid < 0 &&
+ } else if (pool_name != nullptr &&
!match.pool_namespace.pool_name.empty() &&
match.pool_namespace.pool_name == *pool_name) {
return true;
ostream& operator<<(ostream& out, const OSDCapMatch& m)
{
- if (m.auid != -1LL) {
- out << "auid " << m.auid << " ";
- }
-
if (!m.pool_namespace.pool_name.empty() || m.pool_namespace.nspace) {
out << m.pool_namespace;
}
bool OSDCapMatch::is_match_all() const
{
- if (auid >= 0) {
- return false;
- } else if (!pool_namespace.is_match_all()) {
+if (!pool_namespace.is_match_all()) {
return false;
} else if (!pool_tag.is_match_all()) {
return false;
if (profile.name == "rbd") {
// RBD read-write grant
- profile_grants.emplace_back(OSDCapMatch({}, "rbd_children"),
+ profile_grants.emplace_back(OSDCapMatch(string(), "rbd_children"),
OSDCapSpec(osd_rwxa_t(OSD_CAP_CLS_R)));
- profile_grants.emplace_back(OSDCapMatch({}, "rbd_mirroring"),
+ profile_grants.emplace_back(OSDCapMatch(string(), "rbd_mirroring"),
OSDCapSpec(osd_rwxa_t(OSD_CAP_CLS_R)));
profile_grants.emplace_back(OSDCapMatch(profile.pool_namespace),
OSDCapSpec(osd_rwxa_t(OSD_CAP_R |
>> (lit('=') | spaces)
>> estr >> -char_('*'));
- // match := [pool[=]<poolname> [namespace[=]<namespace>] | auid <123>] [object_prefix <prefix>]
- auid %= (spaces >> lit("auid") >> spaces >> int_);
+ // match := [pool[=]<poolname> [namespace[=]<namespace>]] [object_prefix <prefix>]
object_prefix %= -(spaces >> lit("object_prefix") >> spaces >> str);
pooltag %= (spaces >> lit("tag")
>> spaces >> str // application
match = (
pooltag [_val = phoenix::construct<OSDCapMatch>(_1)] |
(nspace >> pooltag) [_val = phoenix::construct<OSDCapMatch>(_1, _2)] |
- (auid >> object_prefix) [_val = phoenix::construct<OSDCapMatch>(_1, _2)] |
(pool_name >> nspace >> object_prefix) [_val = phoenix::construct<OSDCapMatch>(_1, _2, _3)] |
(pool_name >> object_prefix) [_val = phoenix::construct<OSDCapMatch>(_1, _2)]
);
qi::rule<Iterator, string()> unquoted_word;
qi::rule<Iterator, string()> str, estr, network_str;
qi::rule<Iterator, string()> wildcard;
- qi::rule<Iterator, int()> auid;
qi::rule<Iterator, string()> class_name;
qi::rule<Iterator, string()> method_name;
qi::rule<Iterator, OSDCapSpec()> capspec;
struct OSDCapMatch {
typedef std::map<std::string, std::map<std::string, std::string> > app_map_t;
- // auid and pool_name/nspace are mutually exclusive
- int64_t auid = CEPH_AUTH_UID_DEFAULT;
OSDCapPoolNamespace pool_namespace;
OSDCapPoolTag pool_tag;
std::string object_prefix;
OSDCapMatch(const std::string& pl, const std::string& ns,
const std::string& pre)
: pool_namespace(pl, ns), object_prefix(pre) {}
- OSDCapMatch(uint64_t auid, const std::string& pre)
- : auid(auid), object_prefix(pre) {}
OSDCapMatch(const std::string& dummy, const std::string& app,
const std::string& key, const std::string& val)
: pool_tag(app, key, val) {}
*
* @param pool_name pool name
* @param nspace_name namespace name
- * @param pool_auid pool's auid
* @param object object name
* @return true if we match, false otherwise
*/
"allow pool taco object_prefix obj_with_underscores_and_no_quotes wx",
"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.froo.foo rwx, allow pool bar r",
"allow pool foo rwx ; allow pool bar r",
" allow pool foo rwx; allow pool bar r ",
" allow wx pool taco",
"\tallow\nwx\tpool \n taco\t",
- "allow r pool foo object_prefix blah ; allow w auid 5",
"allow class-read object_prefix rbd_children, allow pool libvirt-pool-test rwx",
"allow class-read object_prefix rbd-children, allow pool libvirt_pool_test rwx",
"allow pool foo namespace nfoo rwx, allow pool bar namespace=nbar r",
"allow rwx auid 123 namespace asdf",
"allow wwx pool ''",
"allow rwx tag application key value",
+ "allow rwx auid 123",
+ "allow auid 123 rwx",
+ "allow r pool foo object_prefix blah ; allow w auid 5",
0
};