1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 1999-2001 Robert N. M. Watson 5a9643ea8Slogwang * All rights reserved. 6a9643ea8Slogwang * 7a9643ea8Slogwang * This software was developed by Robert Watson for the TrustedBSD Project. 8a9643ea8Slogwang * 9a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 10a9643ea8Slogwang * modification, are permitted provided that the following conditions 11a9643ea8Slogwang * are met: 12a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 13a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 14a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 15a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 16a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 17a9643ea8Slogwang * 18a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22a9643ea8Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23a9643ea8Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24a9643ea8Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25a9643ea8Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28a9643ea8Slogwang * SUCH DAMAGE. 29a9643ea8Slogwang * 30a9643ea8Slogwang * $FreeBSD$ 31a9643ea8Slogwang */ 32a9643ea8Slogwang /* 33a9643ea8Slogwang * Developed by the TrustedBSD Project. 34a9643ea8Slogwang * Support for extended filesystem attributes. 35a9643ea8Slogwang */ 36a9643ea8Slogwang 37a9643ea8Slogwang #ifndef _SYS_EXTATTR_H_ 38a9643ea8Slogwang #define _SYS_EXTATTR_H_ 39a9643ea8Slogwang 40a9643ea8Slogwang /* 41a9643ea8Slogwang * Defined name spaces for extended attributes. Numeric constants are passed 42a9643ea8Slogwang * via system calls, but a user-friendly string is also defined. 43a9643ea8Slogwang */ 44a9643ea8Slogwang #define EXTATTR_NAMESPACE_EMPTY 0x00000000 45a9643ea8Slogwang #define EXTATTR_NAMESPACE_EMPTY_STRING "empty" 46a9643ea8Slogwang #define EXTATTR_NAMESPACE_USER 0x00000001 47a9643ea8Slogwang #define EXTATTR_NAMESPACE_USER_STRING "user" 48a9643ea8Slogwang #define EXTATTR_NAMESPACE_SYSTEM 0x00000002 49a9643ea8Slogwang #define EXTATTR_NAMESPACE_SYSTEM_STRING "system" 50a9643ea8Slogwang 51a9643ea8Slogwang /* 52a9643ea8Slogwang * The following macro is designed to initialize an array that maps 53a9643ea8Slogwang * extended-attribute namespace values to their names, e.g.: 54a9643ea8Slogwang * 55a9643ea8Slogwang * char *extattr_namespace_names[] = EXTATTR_NAMESPACE_NAMES; 56a9643ea8Slogwang */ 57a9643ea8Slogwang #define EXTATTR_NAMESPACE_NAMES { \ 58a9643ea8Slogwang EXTATTR_NAMESPACE_EMPTY_STRING, \ 59a9643ea8Slogwang EXTATTR_NAMESPACE_USER_STRING, \ 60a9643ea8Slogwang EXTATTR_NAMESPACE_SYSTEM_STRING } 61a9643ea8Slogwang 62*22ce4affSfengbojiang #define EXTATTR_MAXNAMELEN NAME_MAX 63*22ce4affSfengbojiang 64a9643ea8Slogwang #ifdef _KERNEL 65a9643ea8Slogwang #include <sys/types.h> 66a9643ea8Slogwang 67a9643ea8Slogwang struct thread; 68a9643ea8Slogwang struct ucred; 69a9643ea8Slogwang struct vnode; 70a9643ea8Slogwang int extattr_check_cred(struct vnode *vp, int attrnamespace, 71a9643ea8Slogwang struct ucred *cred, struct thread *td, accmode_t accmode); 72a9643ea8Slogwang 73a9643ea8Slogwang #else 74a9643ea8Slogwang #include <sys/cdefs.h> 75a9643ea8Slogwang 76a9643ea8Slogwang struct iovec; 77a9643ea8Slogwang 78a9643ea8Slogwang __BEGIN_DECLS 79a9643ea8Slogwang int extattrctl(const char *_path, int _cmd, const char *_filename, 80a9643ea8Slogwang int _attrnamespace, const char *_attrname); 81a9643ea8Slogwang int extattr_delete_fd(int _fd, int _attrnamespace, const char *_attrname); 82a9643ea8Slogwang int extattr_delete_file(const char *_path, int _attrnamespace, 83a9643ea8Slogwang const char *_attrname); 84a9643ea8Slogwang int extattr_delete_link(const char *_path, int _attrnamespace, 85a9643ea8Slogwang const char *_attrname); 86a9643ea8Slogwang ssize_t extattr_get_fd(int _fd, int _attrnamespace, const char *_attrname, 87a9643ea8Slogwang void *_data, size_t _nbytes); 88a9643ea8Slogwang ssize_t extattr_get_file(const char *_path, int _attrnamespace, 89a9643ea8Slogwang const char *_attrname, void *_data, size_t _nbytes); 90a9643ea8Slogwang ssize_t extattr_get_link(const char *_path, int _attrnamespace, 91a9643ea8Slogwang const char *_attrname, void *_data, size_t _nbytes); 92a9643ea8Slogwang ssize_t extattr_list_fd(int _fd, int _attrnamespace, void *_data, 93a9643ea8Slogwang size_t _nbytes); 94a9643ea8Slogwang ssize_t extattr_list_file(const char *_path, int _attrnamespace, void *_data, 95a9643ea8Slogwang size_t _nbytes); 96a9643ea8Slogwang ssize_t extattr_list_link(const char *_path, int _attrnamespace, void *_data, 97a9643ea8Slogwang size_t _nbytes); 98a9643ea8Slogwang ssize_t extattr_set_fd(int _fd, int _attrnamespace, const char *_attrname, 99a9643ea8Slogwang const void *_data, size_t _nbytes); 100a9643ea8Slogwang ssize_t extattr_set_file(const char *_path, int _attrnamespace, 101a9643ea8Slogwang const char *_attrname, const void *_data, size_t _nbytes); 102a9643ea8Slogwang ssize_t extattr_set_link(const char *_path, int _attrnamespace, 103a9643ea8Slogwang const char *_attrname, const void *_data, size_t _nbytes); 104a9643ea8Slogwang __END_DECLS 105a9643ea8Slogwang 106a9643ea8Slogwang #endif /* !_KERNEL */ 107a9643ea8Slogwang #endif /* !_SYS_EXTATTR_H_ */ 108