acl-util: add new inode_type_can_acl() helper

This commit is contained in:
Lennart Poettering
2025-09-18 21:58:44 +02:00
parent 134749c1d0
commit c3b1aa6d73
4 changed files with 9 additions and 3 deletions
+4
View File
@@ -648,3 +648,7 @@ int fd_acl_make_writable_fallback(int fd) {
return 1;
}
int inode_type_can_acl(mode_t mode) {
return IN_SET(mode & S_IFMT, S_IFSOCK, S_IFREG, S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO);
}
+2
View File
@@ -53,3 +53,5 @@ static inline int fd_acl_make_writable(int fd) {
}
#endif
int inode_type_can_acl(mode_t mode);
+1 -1
View File
@@ -161,7 +161,7 @@ static int patch_acls(int fd, const char *name, const struct stat *st, uid_t shi
assert(st);
/* ACLs are not supported on symlinks, there's no point in trying */
if (S_ISLNK(st->st_mode))
if (!inode_type_can_acl(st->st_mode))
return 0;
r = get_acl(fd, name, ACL_TYPE_ACCESS, &acl);
+2 -2
View File
@@ -1459,8 +1459,8 @@ static int fd_set_acls(
"Refusing to set ACLs on hardlinked file %s while the fs.protected_hardlinks sysctl is turned off.",
path);
if (S_ISLNK(st->st_mode)) {
log_debug("Skipping ACL fix for symlink %s.", path);
if (!inode_type_can_acl(st->st_mode)) {
log_debug("Skipping ACL fix for '%s' (inode type does not support ACLs).", path);
return 0;
}