1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 23:04:59 +00:00

Kernel: Add file permission checks to utime() syscall.

This commit is contained in:
Andreas Kling 2019-02-21 16:37:41 +01:00
parent f0a869ea50
commit a624fe06b8
3 changed files with 27 additions and 12 deletions

View file

@ -131,6 +131,29 @@ RetainPtr<FileDescriptor> VFS::open(RetainPtr<Device>&& device, int& error, int
return FileDescriptor::create(move(device));
}
bool VFS::utime(const String& path, int& error, Inode& base, time_t atime, time_t mtime)
{
auto descriptor = VFS::the().open(move(path), error, 0, 0, base);
if (!descriptor)
return false;
auto& inode = *descriptor->inode();
if (inode.fs().is_readonly()) {
error = -EROFS;
return false;
}
if (inode.metadata().uid != current->euid()) {
error = -EACCES;
return false;
}
error = inode.set_atime(atime);
if (error)
return false;
error = inode.set_mtime(mtime);
if (error)
return false;
return true;
}
bool VFS::stat(const String& path, int& error, int options, Inode& base, struct stat& statbuf)
{
auto inode_id = resolve_path(path, base.identifier(), error, options);