From 18a83f09cf080cbc3a40f6e4334becb318518d32 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 16 Mar 2008 23:45:10 +0000 Subject: [PATCH] Root is allowed to cd into any directory, regardless of the directory permissions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24417 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/Inode.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp b/src/add-ons/kernel/file_systems/bfs/Inode.cpp index af4e40587c..dc14ea56cb 100644 --- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp @@ -446,9 +446,14 @@ Inode::CheckPermissions(int accessMode) const if (accessMode & W_OK && fVolume->IsReadOnly()) return B_READ_ONLY_DEVICE; - // root users always have full access (but they can't execute anything) - if (user == 0 && !((accessMode & X_OK) && (Mode() & S_IXUSR) == 0)) - return B_OK; + // root users always have full access (but they can't execute files without + // any execute permissions set) + if (user == 0) { + if (!((accessMode & X_OK) != 0 && (Mode() & S_IXUSR) == 0) + || (Mode() & S_DIRECTORY) != 0) { + return B_OK; + } + } // shift mode bits, to check directly against accessMode mode_t mode = Mode();