* This is true if any of the 'grant' clauses in the capability match the
* requested path + op.
*/
-bool MDSAuthCaps::is_capable(const std::string &path, uid_t uid, unsigned mask) const
+bool MDSAuthCaps::is_capable(const std::string &inode_path,
+ uid_t inode_uid, gid_t inode_gid, unsigned inode_mode,
+ uid_t uid, unsigned mask) const
{
for (std::vector<MDSCapGrant>::const_iterator i = grants.begin();
i != grants.end();
++i) {
- if (i->match.match(path, uid) &&
+ if (i->match.match(inode_path, uid) &&
i->spec.allows(mask & (MAY_READ|MAY_EXECUTE), mask & MAY_WRITE)) {
+ // check unix permissions?
+ if (i->match.uid != MDS_AUTH_UID_ANY) {
+
+ // WRITE ME
+
+ }
return true;
}
}
bool parse(const std::string &str, std::ostream *err);
bool allow_all() const;
- bool is_capable(const std::string &path, uid_t uid, unsigned mask) const;
+ bool is_capable(const std::string &inode_path,
+ uid_t inode_uid, gid_t inode_gid, unsigned inode_mode,
+ uid_t uid, unsigned mask) const;
friend std::ostream &operator<<(std::ostream &out, const MDSAuthCaps &cap);
};
ASSERT_TRUE(cap.parse("allow *", NULL));
ASSERT_TRUE(cap.allow_all());
- ASSERT_TRUE(cap.is_capable("/foo/bar", 0, MAY_READ | MAY_WRITE));
+ ASSERT_TRUE(cap.is_capable("/foo/bar", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
}
TEST(MDSAuthCaps, AllowUid) {
MDSAuthCaps cap;
ASSERT_TRUE(cap.parse("allow * uid=10", NULL));
ASSERT_FALSE(cap.allow_all());
- ASSERT_TRUE(cap.is_capable("/foo", 10, MAY_READ | MAY_WRITE));
- ASSERT_FALSE(cap.is_capable("/foo", -1, MAY_READ | MAY_WRITE));
- ASSERT_FALSE(cap.is_capable("/foo", 0, MAY_READ | MAY_WRITE));
+ ASSERT_TRUE(cap.is_capable("/foo", 0, 0, 0777, 10, MAY_READ | MAY_WRITE));
+ ASSERT_FALSE(cap.is_capable("/foo", 0, 0, 0777, -1, MAY_READ | MAY_WRITE));
+ ASSERT_FALSE(cap.is_capable("/foo", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
}
TEST(MDSAuthCaps, AllowPath) {
MDSAuthCaps cap;
ASSERT_TRUE(cap.parse("allow * path=/sandbox", NULL));
ASSERT_FALSE(cap.allow_all());
- ASSERT_TRUE(cap.is_capable("/sandbox/foo", 0, MAY_READ | MAY_WRITE));
- ASSERT_TRUE(cap.is_capable("/sandbox", 0, MAY_READ | MAY_WRITE));
- ASSERT_FALSE(cap.is_capable("/sandboxed", 0, MAY_READ | MAY_WRITE));
- ASSERT_FALSE(cap.is_capable("/foo", 0, MAY_READ | MAY_WRITE));
+ ASSERT_TRUE(cap.is_capable("/sandbox/foo", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
+ ASSERT_TRUE(cap.is_capable("/sandbox", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
+ ASSERT_FALSE(cap.is_capable("/sandboxed", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
+ ASSERT_FALSE(cap.is_capable("/foo", 0, 0, 0777, 0, MAY_READ | MAY_WRITE));
}
TEST(MDSAuthCaps, OutputParsed) {