extattr.9 revision 167010
-
Copyright (c) 1999, 2000, 2001, 2003 Robert N. M. Watson
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

$FreeBSD: head/share/man/man9/extattr.9 167010 2007-02-26 06:18:53Z mckusick $

.Dd December 23, 1999 .Os .Dt EXTATTR 9 .Sh NAME .Nm extattr .Nd virtual file system named extended attributes .Sh SYNOPSIS n sys/param.h n sys/vnode.h n sys/extattr.h .Sh DESCRIPTION Named extended attributes allow additional meta-data to be associated with vnodes representing files and directories. The semantics of this additional data is that of a "name=value" pair, where a name may be defined or undefined, and if defined, associated with zero or more bytes of arbitrary binary data. Extended attribute names exist within a set of namespaces; each operation on an extended attribute is required to provide the namespace to which to operation refers. If the same name is present in multiple namespaces, the extended attributes associated with the names are stored and manipulated independently. The following two namespaces are defined universally, although individual file systems may implement additional namespaces, or not implement these namespaces: .Dv EXTATTR_NAMESPACE_USER , .Dv EXTATTR_NAMESPACE_SYSTEM . The semantics of these attributes are intended to be as follows: user attribute data is protected according the normal discretionary and mandatory protections associated with the data in the file or directory; system attribute data is protected such that appropriate privilege is required to directly access or manipulate these attributes.

p Reads of extended attribute data may return specific contiguous regions of the meta-data, in the style of .Xr VOP_READ 9 , but writes will replace the entire current "value" associated with a given name. As there are a plethora of file systems with differing extended attributes, availability and functionality of these functions may be limited, and they should be used with awareness of the underlying semantics of the supporting file system. Authorization schemes for extended attribute data may also vary by file system, as well as maximum attribute size, and whether or not any or specific new attributes may be defined.

p Extended attributes are named using a null-terminated character string. Depending on underlying file system semantics, this name may or may not be case-sensitive. Appropriate vnode extended attribute calls are: .Xr VOP_GETEXTATTR 9 , .Xr VOP_LISTEXTATTR 9 , and .Xr VOP_SETEXTATTR 9 .

p The format of an external attribute is defined by the extattr structure: d -literal struct extattr { int32_t ea_length; /* length of this attribute */ int8_t ea_namespace; /* name space of this attribute */ int8_t ea_contentpadlen; /* padding at end of attribute */ int8_t ea_namelength; /* length of attribute name */ char ea_name[1]; /* null-terminated attribute name */ /* extended attribute content follows */ }; .Ed

p Several macros are defined to manipulate these structures. Each macro takes a pointer to an extattr structure. l -tag -width ".Dv EXTATTR_SET_LENGTHS(eap, size)" t Dv EXTATTR_NEXT(eap) Returns a pointer to the next extended attribute following .Fa eap . t Dv EXTATTR_CONTENT(eap) Returns a pointer to the extended attribute content referenced by .Fa eap . t Dv EXTATTR_CONTENT_SIZE(eap) Returns the size of the extended attribute content referenced by .Fa eap . t Dv EXTATTR_SET_LENGTHS(eap, size) Called with the size of the attribute content after initializing the attribute name to calculate and set the .Fa ea_length , .Fa ea_namelength , and .Fa ea_contentpadlen fields of the extended attribute structure. .El

p The following code identifies an ACL: d -literal if (eap->ea_namespace == EXTATTR_NAMESPACE_SYSTEM && !strcmp(eap->ea_name, POSIX1E_ACL_ACCESS_EXTATTR_NAME) { aclp = EXTATTR_CONTENT(eap); acllen = EXTATTR_CONTENT_SIZE(eap); ... } .Ed

p The following code creates an extended attribute containing a copy of a structure .Fa mygif : d -literal eap->ea_namespace = EXTATTR_NAMESPACE_USER; strcpy(eap->ea_name, "filepic.gif"); EXTATTR_SET_LENGTHS(eap, sizeof(struct mygif)); memcpy(EXTATTR_CONTENT(eap), &mygif, sizeof(struct mygif)); .Ed

p .Sh SEE ALSO .Xr VFS 9 , .Xr VFS_EXTATTRCTL 9 , .Xr VOP_GETEXTATTR 9 , .Xr VOP_LISTEXTATTR 9 , .Xr VOP_SETEXTATTR 9 .Sh AUTHORS This manual page was written by .An Robert Watson . .Sh BUGS In addition, the interface does not provide a mechanism to retrieve the current set of available attributes; it has been suggested that providing a .Dv NULL attribute name should cause a list of defined attributes for the passed file or directory, but this is not currently implemented.