kio: use acl_get_file() to determine if filesystem supports ACL

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-09-02 21:22:15 +03:00
parent db6e2344a3
commit c3f8cfe6d2
3 changed files with 13 additions and 20 deletions

View file

@ -21,7 +21,7 @@ build_script:
sudo apt-get install -qq cmake katie-dev libenchant-dev \ sudo apt-get install -qq cmake katie-dev libenchant-dev \
libmagick++-dev libmpv-dev xorg-dev mesa-common-dev \ libmagick++-dev libmpv-dev xorg-dev mesa-common-dev \
libavahi-common-dev krb5-multidev libwebp-dev libudev-dev \ libavahi-common-dev krb5-multidev libwebp-dev libudev-dev \
liblzma-dev libexiv2-dev libbz2-dev libattr1-dev libacl1-dev \ liblzma-dev libexiv2-dev libbz2-dev libacl1-dev \
libcdio-dev strigi libdbusmenu-katie media-player-info \ libcdio-dev strigi libdbusmenu-katie media-player-info \
krb5-config shared-mime-info media-player-info xdg-utils ccache krb5-config shared-mime-info media-player-info xdg-utils ccache

View file

@ -10,26 +10,22 @@
include(CheckIncludeFiles) include(CheckIncludeFiles)
check_include_files(attr/libattr.h HAVE_ATTR_LIBATTR_H)
check_include_files(sys/xattr.h HAVE_SYS_XATTR_H)
check_include_files(sys/acl.h HAVE_SYS_ACL_H) check_include_files(sys/acl.h HAVE_SYS_ACL_H)
check_include_files(acl/libacl.h HAVE_ACL_LIBACL_H) check_include_files(acl/libacl.h HAVE_ACL_LIBACL_H)
if(HAVE_ATTR_LIBATTR_H AND HAVE_SYS_XATTR_H AND HAVE_SYS_ACL_H AND HAVE_ACL_LIBACL_H) if(HAVE_SYS_ACL_H AND HAVE_ACL_LIBACL_H)
set(ACL_HEADERS_FOUND TRUE) set(ACL_HEADERS_FOUND TRUE)
endif() endif()
if (ACL_HEADERS_FOUND) if (ACL_HEADERS_FOUND)
find_library(ACL_LIBS NAMES acl ) find_library(ACL_LIBS NAMES acl)
find_library(ATTR_LIBS NAMES attr )
endif() endif()
if(ACL_HEADERS_FOUND AND ACL_LIBS AND ATTR_LIBS) if(ACL_HEADERS_FOUND AND ACL_LIBS)
set(ACL_FOUND TRUE) set(ACL_FOUND TRUE)
set(ACL_LIBS ${ACL_LIBS} ${ATTR_LIBS}) set(ACL_LIBS ${ACL_LIBS})
message(STATUS "Found ACL support: ${ACL_LIBS}") message(STATUS "Found ACL support: ${ACL_LIBS}")
endif() endif()
mark_as_advanced(ACL_LIBS ATTR_LIBS) mark_as_advanced(ACL_LIBS)

View file

@ -75,9 +75,7 @@ extern "C" {
#include <QtCore/qvarlengtharray.h> #include <QtCore/qvarlengtharray.h>
#ifdef HAVE_POSIX_ACL #ifdef HAVE_POSIX_ACL
extern "C" { #include <sys/acl.h>
# include <sys/xattr.h>
}
#endif #endif
#include <kauthorized.h> #include <kauthorized.h>
@ -1846,13 +1844,12 @@ KFilePermissionsPropsPlugin::KFilePermissionsPropsPlugin( KPropertiesDialog *_pr
static bool fileSystemSupportsACL( const QByteArray& path ) static bool fileSystemSupportsACL( const QByteArray& path )
{ {
bool fileSystemSupportsACLs = false; bool fileSystemSupportsACLs = false;
#if defined(Q_OS_FREEBSD) || defined(Q_OS_DRAGONFLY) errno = 0;
struct statfs buf; acl_t aclresult = acl_get_file(path.constData(), ACL_TYPE_ACCESS);
fileSystemSupportsACLs = ( statfs( path.data(), &buf ) == 0 ) && ( buf.f_flags & MNT_ACLS ); if (aclresult) {
#else fileSystemSupportsACLs = (errno != ENOTSUP);
fileSystemSupportsACLs = acl_free(aclresult);
getxattr( path.data(), "system.posix_acl_access", NULL, 0 ) >= 0 || errno == ENODATA; }
#endif
return fileSystemSupportsACLs; return fileSystemSupportsACLs;
} }
#endif #endif