mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-28 08:02:54 +00:00
Improve ACL branding mismatch detection and reporting in some rare cases,
such as "setfacl -m ''".
This commit is contained in:
parent
48660452c1
commit
c93b62deca
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=201016
@ -100,11 +100,10 @@ merge_acl(acl_t acl, acl_t *prev_acl, const char *filename)
|
||||
acl_get_brand_np(acl, &acl_brand);
|
||||
acl_get_brand_np(*prev_acl, &prev_acl_brand);
|
||||
|
||||
if (acl_brand != prev_acl_brand) {
|
||||
if (branding_mismatch(acl_brand, prev_acl_brand)) {
|
||||
warnx("%s: branding mismatch; existing ACL is %s, "
|
||||
"entry to be merged is %s", filename,
|
||||
prev_acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e",
|
||||
acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e");
|
||||
brand_name(prev_acl_brand), brand_name(acl_brand));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@ -252,9 +251,10 @@ add_acl(acl_t acl, uint entry_number, acl_t *prev_acl, const char *filename)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (acl_brand != ACL_BRAND_NFS4) {
|
||||
if (branding_mismatch(acl_brand, ACL_BRAND_NFS4)) {
|
||||
warnx("%s: branding mismatch; existing ACL is NFSv4, "
|
||||
"entry to be added is POSIX.1e", filename);
|
||||
"entry to be added is %s", filename,
|
||||
brand_name(acl_brand));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
@ -53,11 +53,10 @@ remove_acl(acl_t acl, acl_t *prev_acl, const char *filename)
|
||||
acl_get_brand_np(acl, &acl_brand);
|
||||
acl_get_brand_np(*prev_acl, &prev_acl_brand);
|
||||
|
||||
if (acl_brand != prev_acl_brand) {
|
||||
if (branding_mismatch(acl_brand, prev_acl_brand)) {
|
||||
warnx("%s: branding mismatch; existing ACL is %s, "
|
||||
"entry to be removed is %s", filename,
|
||||
prev_acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e",
|
||||
acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e");
|
||||
brand_name(prev_acl_brand), brand_name(acl_brand));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
@ -71,6 +71,8 @@ void remove_ext(acl_t *prev_acl, const char *filename);
|
||||
int set_acl_mask(acl_t *prev_acl, const char *filename);
|
||||
/* util.c */
|
||||
void *zmalloc(size_t size);
|
||||
const char *brand_name(int brand);
|
||||
int branding_mismatch(int brand1, int brand2);
|
||||
|
||||
uint have_mask;
|
||||
uint need_mask;
|
||||
|
@ -43,3 +43,26 @@ zmalloc(size_t size)
|
||||
err(1, "calloc() failed");
|
||||
return (ptr);
|
||||
}
|
||||
|
||||
const char *
|
||||
brand_name(int brand)
|
||||
{
|
||||
switch (brand) {
|
||||
case ACL_BRAND_NFS4:
|
||||
return "NFSv4";
|
||||
case ACL_BRAND_POSIX:
|
||||
return "POSIX.1e";
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
branding_mismatch(int brand1, int brand2)
|
||||
{
|
||||
if (brand1 == ACL_BRAND_UNKNOWN || brand2 == ACL_BRAND_UNKNOWN)
|
||||
return (0);
|
||||
if (brand1 != brand2)
|
||||
return (1);
|
||||
return (1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user