/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace Kernel { KResultOr Process::sys$fchown(int fd, uid_t uid, gid_t gid) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); REQUIRE_PROMISE(chown); auto description = fds().file_description(fd); if (!description) return EBADF; return description->chown(uid, gid); } KResultOr Process::sys$chown(Userspace user_params) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); REQUIRE_PROMISE(chown); Syscall::SC_chown_params params; if (!copy_from_user(¶ms, user_params)) return EFAULT; auto path = get_syscall_path_argument(params.path); if (path.is_error()) return path.error(); return VirtualFileSystem::the().chown(path.value()->view(), params.uid, params.gid, current_directory()); } }