usr/src/uts/common/fs/zfs/sys/zfs_acl.h
author ahrens
Mon, 31 Oct 2005 11:33:35 -0800
changeset 789 b348f31ed315
child 905 920e9b2e0899
permissions -rw-r--r--
PSARC 2002/240 ZFS 6338653 Integrate ZFS PSARC 2004/652 - DKIOCFLUSH 5096886 Write caching disks need mechanism to flush cache to physical media
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 * with the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    22
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#ifndef	_SYS_FS_ZFS_ACL_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
#define	_SYS_FS_ZFS_ACL_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#ifdef _KERNEL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <sys/isa_defs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include <sys/types32.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#include <sys/acl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#include <sys/dmu.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
struct znode_phys;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
#define	ACCESS_UNDETERMINED	-1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
#define	ACE_SLOT_CNT	6
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
typedef struct zfs_znode_acl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
	uint64_t	z_acl_extern_obj;	  /* ext acl pieces */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
	uint32_t	z_acl_count;		  /* Number of ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
	uint16_t	z_acl_version;		  /* acl version */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
	uint16_t	z_acl_state;		  /* goop */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
	ace_t		z_ace_data[ACE_SLOT_CNT]; /* 6 standard ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
} zfs_znode_acl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
#define	ACL_DATA_ALLOCED	0x1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
 * Max ACL size is prepended deny for all entries + the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
 * canonical six tacked on * the end.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
#define	MAX_ACL_SIZE	(MAX_ACL_ENTRIES * 2 + 6)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
typedef struct zfs_acl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
	int		z_slots;	/* number of allocated slots for ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
	int		z_acl_count;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
	uint_t		z_state;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
	ace_t		*z_acl;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
} zfs_acl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    71
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
#define	ZFS_ACL_SIZE(aclcnt)	(sizeof (ace_t) * (aclcnt))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
 * Property values for acl_mode and acl_inherit.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
 * acl_mode can take discard, noallow, groupmask and passthrough.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
 * whereas acl_inherit has secure instead of groupmask.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
#define	DISCARD		0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
#define	NOALLOW		1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
#define	GROUPMASK	2
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
#define	PASSTHROUGH	3
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
#define	SECURE		4
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
struct znode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
#ifdef _KERNEL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
void zfs_perm_init(struct znode *, struct znode *, int, vattr_t *,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
    dmu_tx_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
int zfs_getacl(struct znode *, vsecattr_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
int zfs_mode_update(struct znode *, uint64_t, dmu_tx_t  *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
int zfs_setacl(struct znode *, vsecattr_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
void zfs_acl_rele(void *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
void zfs_ace_byteswap(ace_t *, int);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
extern int zfs_zaccess(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
extern int zfs_zaccess_rwx(struct znode *, mode_t, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
extern int zfs_acl_access(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
int zfs_acl_chmod_setattr(struct znode *, uint64_t, dmu_tx_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   101
int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   102
int zfs_zaccess_rename(struct znode *, struct znode *,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   103
    struct znode *, struct znode *, cred_t *cr);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   104
int zfs_zaccess_v4_perm(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   105
void zfs_acl_free(zfs_acl_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   106
zfs_acl_t *zfs_acl_node_read(struct znode *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   107
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   108
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   109
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   110
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   111
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   112
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   113
#endif	/* _SYS_FS_ZFS_ACL_H */