1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  File: linux/xattr.h
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  Extended attributes handling.
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru*/
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_XATTR_H
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_XATTR_H
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_CREATE	0x1	/* set value, fail if attr already exists */
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_REPLACE	0x2	/* set value, fail if attr does not exist */
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Namespaces */
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_OS2_PREFIX "os2."
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_OS2_PREFIX_LEN (sizeof (XATTR_OS2_PREFIX) - 1)
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_SECURITY_PREFIX	"security."
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_SECURITY_PREFIX_LEN (sizeof (XATTR_SECURITY_PREFIX) - 1)
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_SYSTEM_PREFIX "system."
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_SYSTEM_PREFIX_LEN (sizeof (XATTR_SYSTEM_PREFIX) - 1)
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_TRUSTED_PREFIX "trusted."
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_TRUSTED_PREFIX_LEN (sizeof (XATTR_TRUSTED_PREFIX) - 1)
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_USER_PREFIX "user."
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1)
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct xattr_handler {
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	char *prefix;
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	size_t (*list)(struct inode *inode, char *list, size_t list_size,
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		       const char *name, size_t name_len);
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*get)(struct inode *inode, const char *name, void *buffer,
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		   size_t size);
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*set)(struct inode *inode, const char *name, const void *buffer,
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		   size_t size, int flags);
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querussize_t vfs_getxattr(struct dentry *, char *, void *, size_t);
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint vfs_setxattr(struct dentry *, char *, void *, size_t, int);
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint vfs_removexattr(struct dentry *, char *);
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querussize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querussize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags);
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint generic_removexattr(struct dentry *dentry, const char *name);
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif	/* _LINUX_XATTR_H */
53