From 3f5a64015c34e525c73ccda17d5e300c58ee7505 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 8 Jun 2008 20:33:08 +0200 Subject: Add support for AIX ACLs. --- lib/set-mode-acl.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'lib/set-mode-acl.c') diff --git a/lib/set-mode-acl.c b/lib/set-mode-acl.c index c25c5fe3d8..7ef39cfa2d 100644 --- a/lib/set-mode-acl.c +++ b/lib/set-mode-acl.c @@ -357,6 +357,31 @@ qset_acl (char const *name, int desc, mode_t mode) } return 0; +# elif HAVE_ACLX_GET && 0 /* AIX */ + + /* TODO: use aclx_fput or aclx_put, respectively */ + +# elif HAVE_STATACL /* older AIX */ + + union { struct acl a; char room[128]; } u; + int ret; + + u.a.acl_len = (char *) &u.a.acl_ext[0] - (char *) &u.a; /* no entries */ + u.a.acl_mode = mode & ~(S_IXACL | 0777); + u.a.u_access = (mode >> 6) & 7; + u.a.g_access = (mode >> 3) & 7; + u.a.o_access = mode & 7; + + if (desc != -1) + ret = fchacl (desc, &u.a, u.a.acl_len); + else + ret = chacl (name, &u.a, u.a.acl_len); + + if (ret < 0 && errno == ENOSYS) + return chmod_or_fchmod (name, desc, mode); + + return ret; + # else /* Unknown flavor of ACLs */ return chmod_or_fchmod (name, desc, mode); # endif -- cgit v1.2.1