Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145078745
D40603.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D40603.diff
View Options
diff --git a/bin/getfacl/getfacl.1 b/bin/getfacl/getfacl.1
--- a/bin/getfacl/getfacl.1
+++ b/bin/getfacl/getfacl.1
@@ -75,6 +75,11 @@
Do not write commented information about file name and ownership.
This is
useful when dealing with filenames with unprintable characters.
+.It Fl s , Fl -skip-base
+Skip files that only have a trivial ACL, as defined by
+.Xr acl_is_trivial_np 3 .
+Notably, files with POSIX.1e ACLs that only represent the owner, group and other
+to match the mode of the file will be skipped.
.It Fl v
For NFSv4 ACLs, display access mask and flags in a verbose form.
Ignored for POSIX.1e ACLs.
diff --git a/bin/getfacl/getfacl.c b/bin/getfacl/getfacl.c
--- a/bin/getfacl/getfacl.c
+++ b/bin/getfacl/getfacl.c
@@ -52,6 +52,7 @@
{ "default", no_argument, NULL, 'd' },
{ "numeric", no_argument, NULL, 'n' },
{ "omit-header", no_argument, NULL, 'q' },
+ { "skip-base", no_argument, NULL, 's' },
{ NULL, no_argument, NULL, 0 },
};
@@ -90,7 +91,7 @@
static int
print_acl(char *path, acl_type_t type, int hflag, int iflag, int nflag,
- int qflag, int vflag)
+ int qflag, int vflag, int sflag)
{
struct stat sb;
acl_t acl;
@@ -122,25 +123,49 @@
return (-1);
}
+ if (hflag)
+ acl = acl_get_link_np(path, type);
+ else
+ acl = acl_get_file(path, type);
+
+ if (!acl && errno != EOPNOTSUPP) {
+ warn("%s", path);
+ return(-1);
+ }
+
+ if (sflag) {
+ int trivial;
+
+ /*
+ * With the -s flag, we shouldn't synthesize a trivial ACL if
+ * they aren't supported as we do below.
+ */
+ if (!acl)
+ return(0);
+
+ /*
+ * We also shouldn't render anything for this path if it's a
+ * trivial ACL. If we error out, we'll issue a warning but
+ * proceed with this file to err on the side of caution.
+ */
+ error = acl_is_trivial_np(acl, &trivial);
+ if (error != 0) {
+ warn("%s: acl_is_trivial_np failed", path);
+ } else if (trivial) {
+ (void)acl_free(acl);
+ return(0);
+ }
+ }
+
if (more_than_one)
printf("\n");
else
more_than_one++;
-
if (!qflag)
printf("# file: %s\n# owner: %s\n# group: %s\n", path,
getuname(sb.st_uid), getgname(sb.st_gid));
- if (hflag)
- acl = acl_get_link_np(path, type);
- else
- acl = acl_get_file(path, type);
if (!acl) {
- if (errno != EOPNOTSUPP) {
- warn("%s", path);
- return(-1);
- }
- errno = 0;
if (type == ACL_TYPE_DEFAULT)
return(0);
acl = acl_from_mode_np(sb.st_mode);
@@ -176,7 +201,7 @@
static int
print_acl_from_stdin(acl_type_t type, int hflag, int iflag, int nflag,
- int qflag, int vflag)
+ int qflag, int vflag, int sflag)
{
char *p, pathname[PATH_MAX];
int carried_error = 0;
@@ -185,7 +210,7 @@
if ((p = strchr(pathname, '\n')) != NULL)
*p = '\0';
if (print_acl(pathname, type, hflag, iflag, nflag,
- qflag, vflag) == -1) {
+ qflag, vflag, sflag) == -1) {
carried_error = -1;
}
}
@@ -199,14 +224,15 @@
acl_type_t type = ACL_TYPE_ACCESS;
int carried_error = 0;
int ch, error, i;
- int hflag, iflag, qflag, nflag, vflag;
+ int hflag, iflag, qflag, nflag, sflag, vflag;
hflag = 0;
iflag = 0;
qflag = 0;
nflag = 0;
+ sflag = 0;
vflag = 0;
- while ((ch = getopt_long(argc, argv, "+dhinqv", long_options,
+ while ((ch = getopt_long(argc, argv, "+dhinqsv", long_options,
NULL)) != -1)
switch(ch) {
case 'd':
@@ -224,6 +250,9 @@
case 'q':
qflag = 1;
break;
+ case 's':
+ sflag = 1;
+ break;
case 'v':
vflag = 1;
break;
@@ -236,19 +265,19 @@
if (argc == 0) {
error = print_acl_from_stdin(type, hflag, iflag, nflag,
- qflag, vflag);
+ qflag, vflag, sflag);
return(error ? 1 : 0);
}
for (i = 0; i < argc; i++) {
if (!strcmp(argv[i], "-")) {
error = print_acl_from_stdin(type, hflag, iflag, nflag,
- qflag, vflag);
+ qflag, vflag, sflag);
if (error == -1)
carried_error = -1;
} else {
error = print_acl(argv[i], type, hflag, iflag, nflag,
- qflag, vflag);
+ qflag, vflag, sflag);
if (error == -1)
carried_error = -1;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 16, 5:55 PM (13 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28785487
Default Alt Text
D40603.diff (3 KB)
Attached To
Mode
D40603: getfacl: implement --skip-base (-s)
Attached
Detach File
Event Timeline
Log In to Comment