From: Fabian Grünbichler Date: Wed, 24 Jul 2019 11:37:14 +0000 (+0200) Subject: tools: add fchownat syscall X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=6cf6b40469e5cbd63c04f075ce1399f3a1ad3574;hp=6bd0783c11f72019ffe222f7088ba408fc407278 tools: add fchownat syscall and constant AT_EMPTY_PATH for chowning a directory/file opened via openat(2), for example when walking/creating a directory tree without following symlinks. Signed-off-by: Fabian Grünbichler --- diff --git a/src/PVE/Syscall.pm b/src/PVE/Syscall.pm index a2903b7..99e43e7 100644 --- a/src/PVE/Syscall.pm +++ b/src/PVE/Syscall.pm @@ -14,6 +14,7 @@ BEGIN { mkdirat => &SYS_mkdirat, faccessat => &SYS_faccessat, setresuid => &SYS_setresuid, + fchownat => &SYS_fchownat, ); }; diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm index 676647e..550da09 100644 --- a/src/PVE/Tools.pm +++ b/src/PVE/Tools.pm @@ -85,6 +85,8 @@ use constant {CLONE_NEWNS => 0x00020000, use constant {O_PATH => 0x00200000, O_TMPFILE => 0x00410000}; # This includes O_DIRECTORY +use constant {AT_EMPTY_PATH => 0x1000}; + sub run_with_timeout { my ($timeout, $code, @param) = @_; @@ -1556,6 +1558,11 @@ sub mkdirat($$$) { return syscall(PVE::Syscall::mkdirat, $dirfd, $name, $mode) == 0; } +sub fchownat($$$$$) { + my ($dirfd, $pathname, $owner, $group, $flags) = @_; + return syscall(PVE::Syscall::fchownat, $dirfd, $pathname, $owner, $group, $flags) == 0; +} + my $salt_starter = time(); sub encrypt_pw {