[Midnightbsd-cvs] src [8151] trunk/bin/setfacl/merge.c: Fix an error in setfacl(1) that manifested like this:

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Fri Sep 16 18:18:59 EDT 2016


Revision: 8151
          http://svnweb.midnightbsd.org/src/?rev=8151
Author:   laffer1
Date:     2016-09-16 18:18:59 -0400 (Fri, 16 Sep 2016)
Log Message:
-----------
Fix an error in setfacl(1) that manifested like this:

# setfacl -m u:trasz:rwx x
# setfacl -m u:root:rwx x
# getfacl x
# file: x
# owner: root
# group: wheel
user::rw-
user:root:rwx
user:trasz:rwx
group::r--
mask::rwx
other::r--
# setfacl -m u:root:rwx x
setfacl: x: acl_calc_mask() failed: Invalid argument
setfacl: x: failed to set ACL mask

For NFSv4 ACLs, this sort of situation would result in duplicated
entries.

Obtained from: FreeBSD

Modified Paths:
--------------
    trunk/bin/setfacl/merge.c

Modified: trunk/bin/setfacl/merge.c
===================================================================
--- trunk/bin/setfacl/merge.c	2016-09-16 22:18:15 UTC (rev 8150)
+++ trunk/bin/setfacl/merge.c	2016-09-16 22:18:59 UTC (rev 8151)
@@ -1,4 +1,4 @@
-/* $MidnightBSD: src/bin/setfacl/merge.c,v 1.2 2007/07/26 20:13:01 laffer1 Exp $ */
+/* $MidnightBSD$ */
 /*-
  * Copyright (c) 2001 Chris D. Faulhaber
  * All rights reserved.
@@ -95,7 +95,7 @@
 	acl_tag_t tag, tag_new;
 	acl_entry_type_t entry_type, entry_type_new;
 	acl_flagset_t flagset;
-	int entry_id, entry_id_new, have_entry, entry_number = 0;
+	int entry_id, entry_id_new, have_entry, had_entry, entry_number = 0;
 	int acl_brand, prev_acl_brand;
 
 	acl_get_brand_np(acl, &acl_brand);
@@ -117,6 +117,7 @@
 	while (acl_get_entry(acl, entry_id, &entry) == 1) {
 		entry_id = ACL_NEXT_ENTRY;
 		have_entry = 0;
+		had_entry = 0;
 
 		/* keep track of existing ACL_MASK entries */
 		if (acl_get_tag_type(entry, &tag) == -1)
@@ -188,7 +189,7 @@
 						err(1, "%s: acl_set_flagset_np() failed",
 						    filename);
 				}
-				have_entry = 1;
+				had_entry = have_entry = 1;
 				break;
 			default:
 				/* should never be here */
@@ -198,7 +199,7 @@
 		}
 
 		/* if this entry has not been found, it must be new */
-		if (have_entry == 0) {
+		if (had_entry == 0) {
 
 			/*
 			 * NFSv4 ACL entries must be prepended to the ACL.



More information about the Midnightbsd-cvs mailing list