usr/src/uts/common/fs/zfs/sys/zfs_acl.h
author eschrock
Tue, 05 Sep 2006 11:37:36 -0700
changeset 2676 5cee47eddab6
parent 1544 938876158511
child 5331 3047ad28a67b
permissions -rw-r--r--
PSARC 2006/486 ZFS canmount property PSARC 2006/497 ZFS create time properties PSARC 2006/502 ZFS get all datasets PSARC 2006/504 ZFS user properties 6269805 properties should be set via an nvlist. 6281585 user defined properties 6349494 'zfs list' output annoying for even moderately long dataset names 6366244 'canmount' option for container-like functionality 6367103 create-time properties 6416639 RFE: provide zfs get -a 6437808 ZFS module version should match on-disk version 6454551 'zfs create -b blocksize filesystem' should fail. 6457478 unrecognized character in error message with 'zpool create -R' command 6457865 missing device name in the error message of 'zpool clear' command 6458571 zfs_ioc_set_prop() doesn't validate input 6458614 zfs ACL #defines should use prefix 6458638 get_configs() accesses bogus memory 6458678 zvol functions should be moved out of zfs_ioctl.h 6458683 zfs_cmd_t could use more cleanup 6458691 common routines to manage zfs_cmd_t nvlists 6460398 zpool import cores on zfs_prop_get 6461029 zpool status -x noexisting-pool has incorrect error message. 6461223 index translations should live with property definitions 6461424 zpool_unmount_datasets() has some busted logic 6461427 zfs_realloc() would be useful 6461757 'zpool status' can report the wrong number of persistent errors 6461784 recursive zfs_snapshot() leaks memory
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
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 905
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 905
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 905
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#ifndef	_SYS_FS_ZFS_ACL_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#define	_SYS_FS_ZFS_ACL_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#ifdef _KERNEL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#include <sys/isa_defs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <sys/types32.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#include <sys/acl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#include <sys/dmu.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
struct znode_phys;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
#define	ACCESS_UNDETERMINED	-1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
#define	ACE_SLOT_CNT	6
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
typedef struct zfs_znode_acl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
	uint64_t	z_acl_extern_obj;	  /* ext acl pieces */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
	uint32_t	z_acl_count;		  /* Number of ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
	uint16_t	z_acl_version;		  /* acl version */
905
920e9b2e0899 6347134 zfs_zaccess() is killing ZFS stat() performance
marks
parents: 789
diff changeset
    52
	uint16_t	z_acl_pad;		  /* pad */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
	ace_t		z_ace_data[ACE_SLOT_CNT]; /* 6 standard ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
} zfs_znode_acl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
#define	ACL_DATA_ALLOCED	0x1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
 * Max ACL size is prepended deny for all entries + the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
 * canonical six tacked on * the end.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
#define	MAX_ACL_SIZE	(MAX_ACL_ENTRIES * 2 + 6)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
typedef struct zfs_acl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
	int		z_slots;	/* number of allocated slots for ACEs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
	int		z_acl_count;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
	uint_t		z_state;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
	ace_t		*z_acl;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
} zfs_acl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    71
#define	ZFS_ACL_SIZE(aclcnt)	(sizeof (ace_t) * (aclcnt))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
 * Property values for acl_mode and acl_inherit.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
 * acl_mode can take discard, noallow, groupmask and passthrough.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
 * whereas acl_inherit has secure instead of groupmask.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 1544
diff changeset
    80
#define	ZFS_ACL_DISCARD		0
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 1544
diff changeset
    81
#define	ZFS_ACL_NOALLOW		1
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 1544
diff changeset
    82
#define	ZFS_ACL_GROUPMASK	2
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 1544
diff changeset
    83
#define	ZFS_ACL_PASSTHROUGH	3
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 1544
diff changeset
    84
#define	ZFS_ACL_SECURE		4
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
struct znode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
#ifdef _KERNEL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
void zfs_perm_init(struct znode *, struct znode *, int, vattr_t *,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
    dmu_tx_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
int zfs_getacl(struct znode *, vsecattr_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
int zfs_mode_update(struct znode *, uint64_t, dmu_tx_t  *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
int zfs_setacl(struct znode *, vsecattr_t *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
void zfs_acl_rele(void *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
void zfs_ace_byteswap(ace_t *, int);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
extern int zfs_zaccess(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
extern int zfs_zaccess_rwx(struct znode *, mode_t, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
extern int zfs_acl_access(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
int zfs_acl_chmod_setattr(struct znode *, uint64_t, dmu_tx_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   101
int zfs_zaccess_rename(struct znode *, struct znode *,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   102
    struct znode *, struct znode *, cred_t *cr);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   103
int zfs_zaccess_v4_perm(struct znode *, int, cred_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   104
void zfs_acl_free(zfs_acl_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   105
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   106
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   107
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   108
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   109
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   110
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   111
#endif	/* _SYS_FS_ZFS_ACL_H */