mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
The language definition was extracted from the new draft-ietf-nfsv4-posix-acls specification. This ensures good constant and type name alignment between the spec and the Linux kernel source code, and brings in some basic XDR utilities for handling NFSv4 POSIX draft ACLs. Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
247 lines
6.7 KiB
Text
247 lines
6.7 KiB
Text
/*
|
|
* Copyright (c) 2010 IETF Trust and the persons identified
|
|
* as the document authors. All rights reserved.
|
|
*
|
|
* The document authors are identified in RFC 3530 and
|
|
* RFC 5661.
|
|
*
|
|
* Redistribution and use in source and binary forms, with
|
|
* or without modification, are permitted provided that the
|
|
* following conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer.
|
|
*
|
|
* - 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.
|
|
*
|
|
* - Neither the name of Internet Society, IETF or IETF
|
|
* Trust, nor the names of specific contributors, may be
|
|
* used to endorse or promote products derived from this
|
|
* software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
|
|
* 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 COPYRIGHT OWNER 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.
|
|
*/
|
|
|
|
pragma header nfs4;
|
|
|
|
/*
|
|
* Basic typedefs for RFC 1832 data type definitions
|
|
*/
|
|
typedef hyper int64_t;
|
|
typedef unsigned int uint32_t;
|
|
|
|
/*
|
|
* Basic data types
|
|
*/
|
|
typedef uint32_t bitmap4<>;
|
|
|
|
typedef opaque utf8string<>;
|
|
typedef utf8string utf8str_cis;
|
|
typedef utf8string utf8str_cs;
|
|
typedef utf8string utf8str_mixed;
|
|
|
|
/*
|
|
* Timeval
|
|
*/
|
|
struct nfstime4 {
|
|
int64_t seconds;
|
|
uint32_t nseconds;
|
|
};
|
|
|
|
|
|
/*
|
|
* The following content was extracted from draft-ietf-nfsv4-delstid
|
|
*/
|
|
|
|
typedef bool fattr4_offline;
|
|
|
|
|
|
const FATTR4_OFFLINE = 83;
|
|
|
|
|
|
struct open_arguments4 {
|
|
bitmap4 oa_share_access;
|
|
bitmap4 oa_share_deny;
|
|
bitmap4 oa_share_access_want;
|
|
bitmap4 oa_open_claim;
|
|
bitmap4 oa_create_mode;
|
|
};
|
|
|
|
|
|
enum open_args_share_access4 {
|
|
OPEN_ARGS_SHARE_ACCESS_READ = 1,
|
|
OPEN_ARGS_SHARE_ACCESS_WRITE = 2,
|
|
OPEN_ARGS_SHARE_ACCESS_BOTH = 3
|
|
};
|
|
|
|
|
|
enum open_args_share_deny4 {
|
|
OPEN_ARGS_SHARE_DENY_NONE = 0,
|
|
OPEN_ARGS_SHARE_DENY_READ = 1,
|
|
OPEN_ARGS_SHARE_DENY_WRITE = 2,
|
|
OPEN_ARGS_SHARE_DENY_BOTH = 3
|
|
};
|
|
|
|
|
|
enum open_args_share_access_want4 {
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG = 3,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG = 4,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL = 5,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL
|
|
= 17,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED
|
|
= 18,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS = 20,
|
|
OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 21
|
|
};
|
|
|
|
|
|
enum open_args_open_claim4 {
|
|
OPEN_ARGS_OPEN_CLAIM_NULL = 0,
|
|
OPEN_ARGS_OPEN_CLAIM_PREVIOUS = 1,
|
|
OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR = 2,
|
|
OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV = 3,
|
|
OPEN_ARGS_OPEN_CLAIM_FH = 4,
|
|
OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH = 5,
|
|
OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH = 6
|
|
};
|
|
|
|
|
|
enum open_args_createmode4 {
|
|
OPEN_ARGS_CREATEMODE_UNCHECKED4 = 0,
|
|
OPEN_ARGS_CREATE_MODE_GUARDED = 1,
|
|
OPEN_ARGS_CREATEMODE_EXCLUSIVE4 = 2,
|
|
OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1 = 3
|
|
};
|
|
|
|
|
|
typedef open_arguments4 fattr4_open_arguments;
|
|
pragma public fattr4_open_arguments;
|
|
|
|
|
|
%/*
|
|
% * Determine what OPEN supports.
|
|
% */
|
|
const FATTR4_OPEN_ARGUMENTS = 86;
|
|
|
|
|
|
|
|
|
|
const OPEN4_RESULT_NO_OPEN_STATEID = 0x00000010;
|
|
|
|
|
|
/*
|
|
* attributes for the delegation times being
|
|
* cached and served by the "client"
|
|
*/
|
|
typedef nfstime4 fattr4_time_deleg_access;
|
|
typedef nfstime4 fattr4_time_deleg_modify;
|
|
pragma public fattr4_time_deleg_access;
|
|
pragma public fattr4_time_deleg_modify;
|
|
|
|
|
|
%/*
|
|
% * New RECOMMENDED Attribute for
|
|
% * delegation caching of times
|
|
% */
|
|
const FATTR4_TIME_DELEG_ACCESS = 84;
|
|
const FATTR4_TIME_DELEG_MODIFY = 85;
|
|
|
|
|
|
|
|
/* new flags for share_access field of OPEN4args */
|
|
const OPEN4_SHARE_ACCESS_WANT_DELEG_MASK = 0xFF00;
|
|
const OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE = 0x0000;
|
|
const OPEN4_SHARE_ACCESS_WANT_READ_DELEG = 0x0100;
|
|
const OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG = 0x0200;
|
|
const OPEN4_SHARE_ACCESS_WANT_ANY_DELEG = 0x0300;
|
|
const OPEN4_SHARE_ACCESS_WANT_NO_DELEG = 0x0400;
|
|
const OPEN4_SHARE_ACCESS_WANT_CANCEL = 0x0500;
|
|
|
|
const OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL = 0x10000;
|
|
const OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED = 0x20000;
|
|
const OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS = 0x100000;
|
|
const OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 0x200000;
|
|
|
|
enum open_delegation_type4 {
|
|
OPEN_DELEGATE_NONE = 0,
|
|
OPEN_DELEGATE_READ = 1,
|
|
OPEN_DELEGATE_WRITE = 2,
|
|
OPEN_DELEGATE_NONE_EXT = 3, /* new to v4.1 */
|
|
OPEN_DELEGATE_READ_ATTRS_DELEG = 4,
|
|
OPEN_DELEGATE_WRITE_ATTRS_DELEG = 5
|
|
};
|
|
|
|
|
|
/*
|
|
* The following content was extracted from draft-ietf-nfsv4-posix-acls
|
|
*/
|
|
|
|
enum aclmodel4 {
|
|
ACL_MODEL_NFS4 = 1,
|
|
ACL_MODEL_POSIX_DRAFT = 2,
|
|
ACL_MODEL_NONE = 3
|
|
};
|
|
pragma public aclmodel4;
|
|
|
|
enum aclscope4 {
|
|
ACL_SCOPE_FILE_OBJECT = 1,
|
|
ACL_SCOPE_FILE_SYSTEM = 2,
|
|
ACL_SCOPE_SERVER = 3
|
|
};
|
|
pragma public aclscope4;
|
|
|
|
enum posixacetag4 {
|
|
POSIXACE4_TAG_USER_OBJ = 1,
|
|
POSIXACE4_TAG_USER = 2,
|
|
POSIXACE4_TAG_GROUP_OBJ = 3,
|
|
POSIXACE4_TAG_GROUP = 4,
|
|
POSIXACE4_TAG_MASK = 5,
|
|
POSIXACE4_TAG_OTHER = 6
|
|
};
|
|
pragma public posixacetag4;
|
|
|
|
typedef uint32_t posixaceperm4;
|
|
pragma public posixaceperm4;
|
|
|
|
/* Bit definitions for posixaceperm4. */
|
|
const POSIXACE4_PERM_EXECUTE = 0x00000001;
|
|
const POSIXACE4_PERM_WRITE = 0x00000002;
|
|
const POSIXACE4_PERM_READ = 0x00000004;
|
|
|
|
struct posixace4 {
|
|
posixacetag4 tag;
|
|
posixaceperm4 perm;
|
|
utf8str_mixed who;
|
|
};
|
|
|
|
typedef aclmodel4 fattr4_acl_trueform;
|
|
typedef aclscope4 fattr4_acl_trueform_scope;
|
|
typedef posixace4 fattr4_posix_default_acl<>;
|
|
typedef posixace4 fattr4_posix_access_acl<>;
|
|
|
|
%/*
|
|
% * New for POSIX ACL extension
|
|
% */
|
|
const FATTR4_ACL_TRUEFORM = 89;
|
|
const FATTR4_ACL_TRUEFORM_SCOPE = 90;
|
|
const FATTR4_POSIX_DEFAULT_ACL = 91;
|
|
const FATTR4_POSIX_ACCESS_ACL = 92;
|