PERFORCE change 144480 for review
Edward Tomasz Napierala
trasz at FreeBSD.org
Wed Jul 2 11:09:46 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=144480
Change 144480 by trasz at trasz_traszkan on 2008/07/02 11:09:31
Add support for the new ACLs to ls(1).
Affected files ...
.. //depot/projects/soc2008/trasz_nfs4acl/bin/ls/print.c#2 edit
Differences ...
==== //depot/projects/soc2008/trasz_nfs4acl/bin/ls/print.c#2 (text+ko) ====
@@ -616,9 +616,8 @@
aclmode(char *buf, const FTSENT *p, int *haveacls)
{
char name[MAXPATHLEN + 1];
- int entries, ret;
+ int type = ACL_TYPE_ACCESS, ret;
acl_t facl;
- acl_entry_t ae;
/*
* Add a + after the standard rwxrwxrwx mode if the file has an
@@ -638,29 +637,34 @@
*haveacls = 1;
return;
}
- if ((ret = pathconf(name, _PC_ACL_EXTENDED)) <= 0) {
- if (ret < 0 && errno != EINVAL)
- warn("%s", name);
- else
- *haveacls = 0;
+
+ *haveacls = 0;
+
+ ret = pathconf(name, _PC_ACL_EXTENDED);
+ if (ret > 0) {
+ type = ACL_TYPE_ACCESS;
+ *haveacls = 1;
+ } else if (ret < 0 && errno != EINVAL) {
+ warn("%s", name);
+ return;
+ }
+
+ ret = pathconf(name, _PC_EXTENDED_SECURITY_NP);
+ if (ret > 0) {
+ type = ACL_TYPE_NFS4;
+ *haveacls = 1;
+ } else if (ret < 0 && errno != EINVAL) {
+ warn("%s", name);
return;
}
- *haveacls = 1;
- if ((facl = acl_get_file(name, ACL_TYPE_ACCESS)) != NULL) {
- if (acl_get_entry(facl, ACL_FIRST_ENTRY, &ae) == 1) {
- entries = 1;
- while (acl_get_entry(facl, ACL_NEXT_ENTRY, &ae) == 1)
- if (++entries > 3)
- break;
- /*
- * POSIX.1e requires that ACLs of type ACL_TYPE_ACCESS
- * must have at least three entries (owner, group,
- * and other). So anything with more than 3 ACLs looks
- * interesting to us.
- */
- if (entries > 3)
- buf[10] = '+';
- }
+
+ if (*haveacls == 0)
+ return;
+
+ if ((facl = acl_get_file(name, type)) != NULL) {
+ if (!acl_is_trivial_np(facl))
+ buf[10] = '+';
+
acl_free(facl);
} else
warn("%s", name);
More information about the p4-projects
mailing list