/usr/include/glusterfs/glusterfs-acl.h is in glusterfs-common 3.7.6-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | /*
Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com>
This file is part of GlusterFS.
This file is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3 or
later), or the GNU General Public License, version 2 (GPLv2), in all
cases as published by the Free Software Foundation.
*/
#ifndef _GLUSTERFS_ACL_H
#define _GLUSTERFS_ACL_H
/* WARNING: Much if this code is restricted to Linux usage.
*
* It would be much cleaner to replace the code with something that is based on
* libacl (or its libc implementation on *BSD).
*
* Initial work for replacing this Linux specific implementation has been
* started as part of the "Improve POSIX ACLs" feature. Functionality for this
* feature has been added to the end of this file.
*/
#include <stdint.h>
#include <sys/types.h> /* For uid_t */
#include "locking.h" /* For gf_lock_t in struct posix_acl_conf */
#define ACL_PROGRAM 100227
#define ACLV3_VERSION 3
#define POSIX_ACL_MINIMAL_ACE_COUNT 3
#define POSIX_ACL_READ (0x04)
#define POSIX_ACL_WRITE (0x02)
#define POSIX_ACL_EXECUTE (0x01)
#define POSIX_ACL_UNDEFINED_TAG (0x00)
#define POSIX_ACL_USER_OBJ (0x01)
#define POSIX_ACL_USER (0x02)
#define POSIX_ACL_GROUP_OBJ (0x04)
#define POSIX_ACL_GROUP (0x08)
#define POSIX_ACL_MASK (0x10)
#define POSIX_ACL_OTHER (0x20)
#define POSIX_ACL_UNDEFINED_ID (-1)
#define POSIX_ACL_XATTR_VERSION (0x02)
#define POSIX_ACL_ACCESS_XATTR "system.posix_acl_access"
#define POSIX_ACL_DEFAULT_XATTR "system.posix_acl_default"
struct posix_acl_xattr_entry {
uint16_t tag;
uint16_t perm;
uint32_t id;
};
struct posix_acl_xattr_header {
uint32_t version;
struct posix_acl_xattr_entry entries[];
};
typedef struct posix_acl_xattr_entry posix_acl_xattr_entry;
typedef struct posix_acl_xattr_header posix_acl_xattr_header;
static inline size_t
posix_acl_xattr_size (unsigned int count)
{
return (sizeof(posix_acl_xattr_header) +
(count * sizeof(posix_acl_xattr_entry)));
}
static inline ssize_t
posix_acl_xattr_count (size_t size)
{
if (size < sizeof(posix_acl_xattr_header))
return (-1);
size -= sizeof(posix_acl_xattr_header);
if (size % sizeof(posix_acl_xattr_entry))
return (-1);
return (size / sizeof(posix_acl_xattr_entry));
}
struct posix_ace {
uint16_t tag;
uint16_t perm;
uint32_t id;
};
struct posix_acl {
int refcnt;
int count;
struct posix_ace entries[];
};
struct posix_acl_ctx {
uid_t uid;
gid_t gid;
mode_t perm;
struct posix_acl *acl_access;
struct posix_acl *acl_default;
};
struct posix_acl_conf {
gf_lock_t acl_lock;
uid_t super_uid;
struct posix_acl *minimal_acl;
};
/* Above this comment, the legacy POSIX ACL support is kept until it is not
* used anymore. Below you will find the more portable version to support POSIX
* ACls based on the implementation of libacl (see sys/acl.h). */
/* virtual xattrs passed over RPC, not stored on disk */
#define GF_POSIX_ACL_ACCESS "glusterfs.posix.acl"
#define GF_POSIX_ACL_DEFAULT "glusterfs.posix.default_acl"
#define GF_POSIX_ACL_REQUEST(key) \
(!strncmp(key, GF_POSIX_ACL_ACCESS, strlen(GF_POSIX_ACL_ACCESS)) || \
!strncmp(key, GF_POSIX_ACL_DEFAULT, strlen(GF_POSIX_ACL_DEFAULT)))
#ifdef HAVE_SYS_ACL_H /* only NetBSD does not support POSIX ACLs */
#include <sys/acl.h>
static inline const char*
gf_posix_acl_get_key (const acl_type_t type)
{
char *acl_key = NULL;
switch (type) {
case ACL_TYPE_ACCESS:
acl_key = GF_POSIX_ACL_ACCESS;
break;
case ACL_TYPE_DEFAULT:
acl_key = GF_POSIX_ACL_DEFAULT;
break;
default:
errno = EINVAL;
}
return acl_key;
}
static inline const acl_type_t
gf_posix_acl_get_type (const char *key)
{
acl_type_t type = 0;
if (!strncmp (key, GF_POSIX_ACL_ACCESS, strlen (GF_POSIX_ACL_ACCESS)))
type = ACL_TYPE_ACCESS;
else if (!strncmp (key, GF_POSIX_ACL_DEFAULT,
strlen (GF_POSIX_ACL_DEFAULT)))
type = ACL_TYPE_DEFAULT;
else
errno = EINVAL;
return type;
}
#endif /* HAVE_SYS_ACL_H */
#endif /* _GLUSTERFS_ACL_H */
|