From 03a2985277308cd876dec79d8850edbb95f941b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 30 Aug 2006 23:15:52 +0000 Subject: [PATCH] * When releasing a vnode, it tried to trim down the allocation even if the file system was mounted read-only. * bfs_rename() did not check the access privileges of the directories involved. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18718 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/file_systems/bfs/kernel_interface.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index 270a4fa7c1..664751ddab 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -303,7 +303,7 @@ bfs_release_vnode(void *_ns, void *_node, bool reenter) // since a directory's size can be changed without having it opened, // we need to take care about their preallocated blocks here - if (inode->NeedsTrimming()) { + if (!volume->IsReadOnly() && inode->NeedsTrimming()) { Transaction transaction(volume, inode->BlockNumber()); if (inode->TrimPreallocation(transaction) == B_OK) @@ -932,11 +932,18 @@ bfs_rename(void *_ns, void *_oldDir, const char *oldName, void *_newDir, const c if (oldDirectory == newDirectory && !strcmp(oldName, newName)) return B_OK; + // are we allowed to do what we've been told? + status_t status = oldDirectory->CheckPermissions(W_OK); + if (status == B_OK) + status = newDirectory->CheckPermissions(W_OK); + if (status < B_OK) + return status; + RecursiveLocker locker(volume->Lock()); // get the directory's tree, and a pointer to the inode which should be changed BPlusTree *tree; - status_t status = oldDirectory->GetTree(&tree); + status = oldDirectory->GetTree(&tree); if (status < B_OK) RETURN_ERROR(status);