summaryrefslogtreecommitdiffstats
path: root/source3/lib/sysacls.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-08-10 20:48:25 +0000
committerJeremy Allison <jra@samba.org>2001-08-10 20:48:25 +0000
commit16afd6d2bcb1aa2241919f0c7a6cc953cba8b2e6 (patch)
treebb18ec41d11594898eb725285587c0c179af5b51 /source3/lib/sysacls.c
parent4b2016305b7c43c61198f25175531d149db5e989 (diff)
downloadsamba-16afd6d2bcb1aa2241919f0c7a6cc953cba8b2e6.tar.gz
samba-16afd6d2bcb1aa2241919f0c7a6cc953cba8b2e6.tar.xz
samba-16afd6d2bcb1aa2241919f0c7a6cc953cba8b2e6.zip
Added Mike Davidsons Tru64 ACL patch.
Jeremy. (This used to be commit 8c5e5f8c84cab4273ca28d6b5f543dd5d5b464fb)
Diffstat (limited to 'source3/lib/sysacls.c')
-rw-r--r--source3/lib/sysacls.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/source3/lib/sysacls.c b/source3/lib/sysacls.c
index 98f0617d44c..424e7057553 100644
--- a/source3/lib/sysacls.c
+++ b/source3/lib/sysacls.c
@@ -191,8 +191,17 @@ int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype)
return acl_free(qual);
}
-#elif defined(HAVE_DRAFT13_POSIX_ACLS)
-
+#elif defined(HAVE_TRU64_ACLS)
+/*
+ * The interface to DEC/Compaq Tru64 UNIX ACLs
+ * is based on Draft 13 of the POSIX spec which is
+ * slightly different from the Draft 16 interface.
+ *
+ * Also, some of the permset manipulation functions
+ * such as acl_clear_perm() and acl_add_perm() appear
+ * to be broken on Tru64 so we have to manipulate
+ * the permission bits in the permset directly.
+ */
int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p)
{
SMB_ACL_ENTRY_T entry;
@@ -237,25 +246,26 @@ SMB_ACL_T sys_acl_get_fd(int fd)
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset)
{
- return acl_clear_perm(permset);
+ *permset = 0; /* acl_clear_perm() is broken on Tru64 */
+
+ return 0;
}
int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
{
- return acl_add_perm(permset, perm);
+ if (perm & ~(SMB_ACL_READ | SMB_ACL_WRITE | SMB_ACL_EXECUTE)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *permset |= perm; /* acl_add_perm() is broken on Tru64 */
+
+ return 0;
}
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
{
-#if defined(HAVE_ACL_GET_PERM_NP)
- return acl_get_perm_np(permset, perm);
-#else
- /*
- * if we don't have an acl_get_perm() interface
- * this will probably work for most implementations
- */
- return *permset & perm;
-#endif
+ return *permset & perm; /* Tru64 doesn't have acl_get_perm() */
}
char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen)