Enable file-level permissions check.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Sat, 19 Oct 2013 19:15:58 +0000 (21:15 +0200)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Sun, 23 Feb 2014 13:16:19 +0000 (14:16 +0100)
src/VfsNs.cpp
src/VfsNs.h

index bf0882e..dc272ac 100644 (file)
@@ -102,6 +102,7 @@ void VfsCatalog::setSecurityContext(const SecurityContext* ctx) throw (DmExcepti
   std::string subj = ctx->credentials.clientName;
   secCtx_ = ctx;
 
+  debug("'%s'", subj.c_str());
   this->clientName = subj;
 
   this->allowCurrent = vfsEvalRegex(this->allowRegex, this->denyRegex, subj.c_str());
@@ -337,6 +338,9 @@ ExtendedStat VfsCatalog::extendedStat(const std::string& path, bool follow) thro
   // use the retrieved xattrs
   vfsUpdateExtendedStat(meta, xattrs);
 
+  if (checkPermissions(this->secCtx_, meta.acl, meta.stat, S_IREAD) != 0)
+    vfsThrow(EACCES, "not enough permissions for '%s' to read '%s'", clientName.c_str(), meta.name.c_str());
+
 #if 0
   // XXX: black magic
   //      dmlite tests require proper count in st_nlink,
@@ -1281,15 +1285,6 @@ int VfsCatalog::vfsCheckPermissions(const std::string& path, mode_t mode) {
 
 
 ///
-/// override all permission checks - no file-level permissions in zero version
-///
-int VfsCatalog::checkPermissions(const SecurityContext *context, const Acl &acl, const struct stat &stat, mode_t mode) {
-  return 0;
-}
-
-
-
-///
 /// Get extended attributes.
 ///
 /// @param path    local disk namespace path
index 7f830d5..ba05e9c 100644 (file)
@@ -125,8 +125,6 @@ namespace dmlite {
     std::string prefix_;
 
    private:
-    int checkPermissions(const SecurityContext *context, const Acl &acl, const struct stat &stat, mode_t mode);
-
     regex_t *allowRegex, *denyRegex, *allowWriteRegex, *denyWriteRegex;
     bool allowCurrent, allowWriteCurrent;
     std::string clientName;