usr/src/uts/common/sys/fs/ufs_acl.h
author Casper H.S. Dik <Casper.Dik@Sun.COM>
Wed, 28 Apr 2010 10:01:37 +0200
changeset 12273 63678502e95e
parent 5058 97ac9f0ef0f9
permissions -rw-r--r--
PSARC 2009/377 In-kernel pfexec implementation. PSARC 2009/378 Basic File Privileges PSARC 2010/072 RBAC update: user attrs from profiles 4912090 pfzsh(1) should exist 4912093 pfbash(1) should exist 4912096 pftcsh(1) should exist 6440298 Expand the basic privilege set in order to restrict file access 6859862 Move pfexec into the kernel 6919171 cred_t sidesteps kmem_debug; we need to be able to detect bad hold/free when they occur 6923721 The new SYS_SMB privilege is not backward compatible 6937562 autofs doesn't remove its door when the zone shuts down 6937727 Zones stuck on deathrow; netstack_zone keeps a credential reference to the zone 6940159 Implement PSARC 2010/072
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
5058
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 5058
diff changeset
    22
 * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
#ifndef	_SYS_FS_UFS_ACL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#define	_SYS_FS_UFS_ACL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#include <sys/cred.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#include <sys/vfs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <sys/acl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <sys/fs/ufs_fs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 * On-disk UFS ACL structure
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
typedef struct ufs_acl {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
		uint32_t 	acl_next;	/* Pad for old structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
		ushort_t	acl_tag;	/* Entry type */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
	} acl_un;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
	o_mode_t	acl_perm;		/* Permission bits */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
	uid_t		acl_who;		/* User or group ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
} ufs_acl_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#define	acl_tag acl_un.acl_tag
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
#define	acl_next acl_un.acl_next
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 * In-core UFS ACL structure
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
typedef struct ufs_ic_acl {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	struct ufs_ic_acl	*acl_ic_next;	/* Next ACL for this inode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	o_mode_t		acl_ic_perm;	/* Permission bits */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
	uid_t			acl_ic_who;	/* User or group ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
} ufs_ic_acl_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
 * In-core ACL mask
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
typedef struct ufs_aclmask {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	short		acl_ismask;	/* Is mask defined? */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	o_mode_t	acl_maskbits;	/* Permission mask */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
} ufs_aclmask_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 * full acl
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
typedef struct ic_acl {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	ufs_ic_acl_t	*owner;		/* owner object */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	ufs_ic_acl_t	*group;		/* group object */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	ufs_ic_acl_t	*other;		/* other object */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	ufs_ic_acl_t	*users;		/* list of users */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	ufs_ic_acl_t	*groups;	/* list of groups */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	ufs_aclmask_t	mask;		/* mask */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
} ic_acl_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 * In-core shadow inode
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
typedef	struct si {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	struct si *s_next;		/* signature hash next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	struct si *s_forw;		/* inode hash next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	struct si *s_fore;		/* unref'd list next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	int	s_flags;		/* see below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	ino_t	s_shadow;		/* shadow inode number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
	dev_t	s_dev;			/* device (major,minor) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	int	s_signature;		/* signature for all ACLs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	int 	s_use;			/* on disk use count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	int	s_ref;			/* in core reference count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	krwlock_t s_lock;		/* lock for this structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	ic_acl_t  s_a;			/* acls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	ic_acl_t  s_d;			/* def acls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
} si_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
#define	aowner	s_a.owner
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
#define	agroup	s_a.group
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
#define	aother	s_a.other
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#define	ausers	s_a.users
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
#define	agroups	s_a.groups
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
#define	aclass	s_a.mask
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
#define	downer	s_d.owner
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
#define	dgroup	s_d.group
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	dother	s_d.other
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
#define	dusers	s_d.users
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
#define	dgroups	s_d.groups
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#define	dclass	s_d.mask
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
#define	s_prev	s_forw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
 * s_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
#define	SI_CACHED 0x0001		/* Is in si_cache */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
 * Header to identify data on disk
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
typedef struct ufs_fsd {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	int	fsd_type;		/* type of data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	int	fsd_size;		/* size in bytes of ufs_fsd and data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	char	fsd_data[1];		/* data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
} ufs_fsd_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
 * Data types  (fsd_type)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
#define	FSD_FREE	(0)		/* Free entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
#define	FSD_ACL		(1)		/* Access Control Lists */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
#define	FSD_DFACL	(2)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
#define	FSD_RESERVED3	(3)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
#define	FSD_RESERVED4	(4)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
#define	FSD_RESERVED5	(5)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
#define	FSD_RESERVED6	(6)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
#define	FSD_RESERVED7	(7)		/* reserved for future use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
 * FSD manipulation macros
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
 * The FSD macros are aligned on integer boundary even if the preceeding
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
 * record had a byte aligned length. So the record length is always
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
 * integer length. All increments of the data pointers must use the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
 * FSD_RECSZ macro.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
#define	FSD_TPSZ(fsdp)		(sizeof (fsdp->fsd_type))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
#define	FSD_TPMSK(fsdp)		(FSD_TPSZ(fsdp) - 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
#define	FSD_RECSZ(fsdp, size)	((size + FSD_TPMSK(fsdp)) & ~FSD_TPMSK(fsdp))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
 * flags for acl_validate
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	ACL_CHECK	0x01
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
#define	DEF_ACL_CHECK	0x02
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 5058
diff changeset
   162
#define	MODE_CHECK(O, M, PERM, C, I) \
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 5058
diff changeset
   163
    secpolicy_vnode_access2(C, ITOV(I), O, (PERM), M)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
 * Check that the file type is one that accepts ACLs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
#define	CHECK_ACL_ALLOWED(MODE) (((MODE) == IFDIR) || ((MODE) == IFREG) || \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
				((MODE) == IFIFO) || ((MODE) == IFCHR) || \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
				((MODE) == IFBLK) || ((MODE) == IFATTRDIR))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
5058
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   172
/*
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   173
 * Get ACL group permissions if the mask is not present, and the ACL
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   174
 * group permission intersected with the mask if the mask is present
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   175
 */
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   176
#define	MASK2MODE(ACL)							\
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   177
	((ACL)->aclass.acl_ismask ?					\
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   178
		((((ACL)->aclass.acl_maskbits &				\
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   179
			(ACL)->agroup->acl_ic_perm) & 07) << 3) :	\
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   180
		(((ACL)->agroup->acl_ic_perm & 07) << 3))
97ac9f0ef0f9 6519314 acl not being set properly
prabahar
parents: 0
diff changeset
   181
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
#define	MODE2ACL(P, MODE, CRED)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	ASSERT((P));						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	(P)->acl_ic_next = NULL;				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	(P)->acl_ic_perm &= ((MODE) & 7);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	(P)->acl_ic_who = (CRED);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
#define	ACL_MOVE(P, T, B)					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
{								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	ufs_ic_acl_t *acl;					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	for (acl = (P); acl; acl = acl->acl_ic_next) {		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
		(B)->acl_tag = (T);				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
		(B)->acl_perm = acl->acl_ic_perm;		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
		(B)->acl_who = acl->acl_ic_who;			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
		(B)++;						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
	}							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
#endif	/* _SYS_FS_UFS_ACL_H */