xref: /xnu-12377.41.6/bsd/sys/xattr.h (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828)
1 /*
2  * Copyright (c) 2004-2012 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #ifndef _SYS_XATTR_H_
30 #define _SYS_XATTR_H_
31 
32 #include <sys/types.h>
33 
34 /* Options for pathname based xattr calls */
35 #define XATTR_NOFOLLOW   0x0001     /* Don't follow symbolic links */
36 
37 /* Options for setxattr calls */
38 #define XATTR_CREATE     0x0002     /* set the value, fail if attr already exists */
39 #define XATTR_REPLACE    0x0004     /* set the value, fail if attr does not exist */
40 
41 /* Set this to bypass authorization checking (eg. if doing auth-related work) */
42 #define XATTR_NOSECURITY 0x0008
43 
44 /* Set this to bypass the default extended attribute file (dot-underscore file) */
45 #define XATTR_NODEFAULT  0x0010
46 
47 /* option for f/getxattr() and f/listxattr() to expose the HFS Compression extended attributes */
48 #define XATTR_SHOWCOMPRESSION 0x0020
49 
50 /* Options for pathname based xattr calls */
51 #define XATTR_NOFOLLOW_ANY     0x0040  /* Don't follow any symbolic links in the path */
52 #define XATTR_RESOLVE_BENEATH  0x0080  /* path must reside in the hierarchy beneath the starting directory */
53 
54 #define XATTR_MAXNAMELEN   127
55 
56 /* See the ATTR_CMN_FNDRINFO section of getattrlist(2) for details on FinderInfo */
57 #define XATTR_FINDERINFO_NAME     "com.apple.FinderInfo"
58 
59 #define XATTR_RESOURCEFORK_NAME   "com.apple.ResourceFork"
60 
61 
62 #ifdef KERNEL
63 
64 #ifdef KERNEL_PRIVATE
65 #define XATTR_VNODE_SUPPORTED(vp) \
66 	((vp)->v_type == VREG || (vp)->v_type == VDIR || (vp)->v_type == VLNK || (vp)->v_type == VSOCK || (vp)->v_type == VFIFO)
67 #endif
68 
69 __BEGIN_DECLS
70 int  xattr_protected(const char *);
71 int  xattr_validatename(const char *);
72 
73 /* Maximum extended attribute size supported by VFS */
74 #define XATTR_MAXSIZE           INT32_MAX
75 
76 #ifdef PRIVATE
77 /* Maximum extended attribute size in an Apple Double file */
78 #define AD_XATTR_MAXSIZE        XATTR_MAXSIZE
79 
80 /* Number of bits used to represent the maximum size of
81  * extended attribute stored in an Apple Double file.
82  */
83 #define AD_XATTR_SIZE_BITS      31
84 #endif /* PRIVATE */
85 
86 __END_DECLS
87 #endif /* KERNEL */
88 
89 #ifndef KERNEL
90 __BEGIN_DECLS
91 
92 ssize_t getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);
93 
94 ssize_t fgetxattr(int fd, const char *name, void *value, size_t size, u_int32_t position, int options);
95 
96 int setxattr(const char *path, const char *name, const void *value, size_t size, u_int32_t position, int options);
97 
98 int fsetxattr(int fd, const char *name, const void *value, size_t size, u_int32_t position, int options);
99 
100 int removexattr(const char *path, const char *name, int options);
101 
102 int fremovexattr(int fd, const char *name, int options);
103 
104 ssize_t listxattr(const char *path, char *namebuff, size_t size, int options);
105 
106 ssize_t flistxattr(int fd, char *namebuff, size_t size, int options);
107 
108 __END_DECLS
109 #endif /* KERNEL */
110 
111 #endif /* _SYS_XATTR_H_ */
112