mirror of
https://github.com/containers/fuse-overlayfs.git
synced 2025-09-10 15:56:25 -04:00
main: check that ACLs are supported in the lower layers
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2180118 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
25db5be78a
commit
2666df2a49
11
direct.c
11
direct.c
@ -206,6 +206,16 @@ direct_num_of_layers (const char *opaque, const char *path)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
direct_support_acls (struct ovl_layer *l)
|
||||||
|
{
|
||||||
|
char value[32];
|
||||||
|
|
||||||
|
return fgetxattr (l->fd, ACL_XATTR, value, sizeof (value)) >= 0
|
||||||
|
|| errno != ENOTSUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct data_source direct_access_ds =
|
struct data_source direct_access_ds =
|
||||||
{
|
{
|
||||||
.num_of_layers = direct_num_of_layers,
|
.num_of_layers = direct_num_of_layers,
|
||||||
@ -221,4 +231,5 @@ struct data_source direct_access_ds =
|
|||||||
.getxattr = direct_getxattr,
|
.getxattr = direct_getxattr,
|
||||||
.listxattr = direct_listxattr,
|
.listxattr = direct_listxattr,
|
||||||
.readlinkat = direct_readlinkat,
|
.readlinkat = direct_readlinkat,
|
||||||
|
.support_acls = direct_support_acls,
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
# include <stdbool.h>
|
# include <stdbool.h>
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
|
|
||||||
|
# define ACL_XATTR "system.posix_acl_default"
|
||||||
|
|
||||||
typedef struct hash_table Hash_table;
|
typedef struct hash_table Hash_table;
|
||||||
|
|
||||||
struct ovl_ino
|
struct ovl_ino
|
||||||
@ -151,6 +153,7 @@ struct data_source
|
|||||||
int (*listxattr)(struct ovl_layer *l, const char *path, char *buf, size_t size);
|
int (*listxattr)(struct ovl_layer *l, const char *path, char *buf, size_t size);
|
||||||
int (*getxattr)(struct ovl_layer *l, const char *path, const char *name, char *buf, size_t size);
|
int (*getxattr)(struct ovl_layer *l, const char *path, const char *name, char *buf, size_t size);
|
||||||
ssize_t (*readlinkat)(struct ovl_layer *l, const char *path, char *buf, size_t bufsiz);
|
ssize_t (*readlinkat)(struct ovl_layer *l, const char *path, char *buf, size_t bufsiz);
|
||||||
|
bool (*support_acls)(struct ovl_layer *l);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* passthrough to the file system. */
|
/* passthrough to the file system. */
|
||||||
|
8
main.c
8
main.c
@ -66,8 +66,6 @@
|
|||||||
#include <utils.h>
|
#include <utils.h>
|
||||||
#include <plugin.h>
|
#include <plugin.h>
|
||||||
|
|
||||||
#define ACL_XATTR "system.posix_acl_default"
|
|
||||||
|
|
||||||
#ifndef TEMP_FAILURE_RETRY
|
#ifndef TEMP_FAILURE_RETRY
|
||||||
#define TEMP_FAILURE_RETRY(expression) \
|
#define TEMP_FAILURE_RETRY(expression) \
|
||||||
(__extension__ \
|
(__extension__ \
|
||||||
@ -5764,6 +5762,12 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
lo.layers = layers;
|
lo.layers = layers;
|
||||||
|
|
||||||
|
for (tmp_layer = layers; !lo.noacl && tmp_layer; tmp_layer = tmp_layer->next)
|
||||||
|
{
|
||||||
|
if (! tmp_layer->ds->support_acls (tmp_layer))
|
||||||
|
lo.noacl = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lo.upperdir)
|
if (lo.upperdir)
|
||||||
{
|
{
|
||||||
if (lo.xattr_permissions)
|
if (lo.xattr_permissions)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user