/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is included * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. * * GPL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved * Use is subject to license terms. */ /* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. * * lustre/lustre/include/lustre_idmap.h * * MDS data structures. * See also lustre_idl.h for wire formats of requests. */ #ifndef _LUSTRE_EACL_H #define _LUSTRE_EACL_H #ifdef CONFIG_FS_POSIX_ACL # ifdef HAVE_XATTR_ACL # include # endif /* HAVE_XATTR_ACL */ # ifdef HAVE_LINUX_POSIX_ACL_XATTR_H # include # endif /* HAVE_LINUX_POSIX_ACL_XATTR_H */ #include #include #include typedef struct { __u16 e_tag; __u16 e_perm; __u32 e_id; __u32 e_stat; } ext_acl_xattr_entry; typedef struct { __u32 a_count; ext_acl_xattr_entry a_entries[0]; } ext_acl_xattr_header; #define CFS_ACL_XATTR_SIZE(count, prefix) \ (sizeof(prefix ## _header) + (count) * sizeof(prefix ## _entry)) #define CFS_ACL_XATTR_COUNT(size, prefix) \ (((size) - sizeof(prefix ## _header)) / sizeof(prefix ## _entry)) extern int lustre_posix_acl_permission(struct md_ucred *mu, struct lu_attr *la, int want, posix_acl_xattr_entry *entry, int count); extern int lustre_posix_acl_chmod_masq(posix_acl_xattr_entry *entry, __u32 mode, int count); extern int lustre_posix_acl_create_masq(posix_acl_xattr_entry *entry, __u32 *pmode, int count); extern ext_acl_xattr_header * lustre_posix_acl_xattr_2ext(posix_acl_xattr_header *header, int size); extern int lustre_posix_acl_xattr_filter(posix_acl_xattr_header *header, int size, posix_acl_xattr_header **out); extern int lustre_posix_acl_xattr_id2client(struct md_ucred *mu, struct lustre_idmap_table *t, posix_acl_xattr_header *header, int size, int flags); extern void lustre_posix_acl_xattr_free(posix_acl_xattr_header *header, int size); extern int lustre_ext_acl_xattr_id2server(struct md_ucred *mu, struct lustre_idmap_table *t, ext_acl_xattr_header *header); extern void lustre_ext_acl_xattr_free(ext_acl_xattr_header *header); extern int lustre_acl_xattr_merge2posix(posix_acl_xattr_header *posix_header, int size, ext_acl_xattr_header *ext_header, posix_acl_xattr_header **out); extern ext_acl_xattr_header * lustre_acl_xattr_merge2ext(posix_acl_xattr_header *posix_header, int size, ext_acl_xattr_header *ext_header); #endif /* CONFIG_FS_POSIX_ACL */ #endif