X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/5f4f16c074be65639b5c3333441d48b1d418104c..b297c96099a08a9f2b7e20e80a8f43515fabd714:/lunaix-os/kernel/exe/exec.c?ds=sidebyside diff --git a/lunaix-os/kernel/exe/exec.c b/lunaix-os/kernel/exe/exec.c index cc7ae82..5ac00b3 100644 --- a/lunaix-os/kernel/exe/exec.c +++ b/lunaix-os/kernel/exe/exec.c @@ -202,6 +202,7 @@ exec_load(struct exec_host* container, struct v_file* executable) } save_process_cmd(proc, argv); + container->inode = executable->inode; errno = load_executable(&container->exe, executable); if (errno) { @@ -285,6 +286,7 @@ __DEFINE_LXSYSCALL3(int, envp[]) { int errno = 0; + int acl; struct exec_host container; if (!argv || !envp) { @@ -308,6 +310,15 @@ __DEFINE_LXSYSCALL3(int, signal_reset_context(¤t_thread->sigctx); signal_reset_registry(__current->sigreg); + acl = container.inode->acl; + if (fsacl_test(acl, suid)) { + current_set_euid(container.inode->uid); + } + + if (fsacl_test(acl, sgid)) { + current_set_egid(container.inode->gid); + } + done: // set return value store_retval(DO_STATUS(errno));