brintos

brintos / linux-shallow public Read only

0
0
Text · 3.3 KiB · 505101a Raw
123 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *   Copyright (C) 2021 Samsung Electronics Co., Ltd.4 */5 6#ifndef __XATTR_H__7#define __XATTR_H__8 9/*10 * These are on-disk structures to store additional metadata into xattr to11 * reproduce windows filesystem semantics. And they are encoded with NDR to12 * compatible with samba's xattr meta format. The compatibility with samba13 * is important because it can lose the information(file attribute,14 * creation time, acls) about the existing files when switching between15 * ksmbd and samba.16 */17 18/*19 * Dos attribute flags used for what variable is valid.20 */21enum {22	XATTR_DOSINFO_ATTRIB		= 0x00000001,23	XATTR_DOSINFO_EA_SIZE		= 0x00000002,24	XATTR_DOSINFO_SIZE		= 0x00000004,25	XATTR_DOSINFO_ALLOC_SIZE	= 0x00000008,26	XATTR_DOSINFO_CREATE_TIME	= 0x00000010,27	XATTR_DOSINFO_CHANGE_TIME	= 0x00000020,28	XATTR_DOSINFO_ITIME		= 0x0000004029};30 31/*32 * Dos attribute structure which is compatible with samba's one.33 * Storing it into the xattr named "DOSATTRIB" separately from inode34 * allows ksmbd to faithfully reproduce windows filesystem semantics35 * on top of a POSIX filesystem.36 */37struct xattr_dos_attrib {38	__u16	version;	/* version 3 or version 4 */39	__u32	flags;		/* valid flags */40	__u32	attr;		/* Dos attribute */41	__u32	ea_size;	/* EA size */42	__u64	size;43	__u64	alloc_size;44	__u64	create_time;	/* File creation time */45	__u64	change_time;	/* File change time */46	__u64	itime;		/* Invented/Initial time */47};48 49/*50 * Enumeration is used for computing posix acl hash.51 */52enum {53	SMB_ACL_TAG_INVALID = 0,54	SMB_ACL_USER,55	SMB_ACL_USER_OBJ,56	SMB_ACL_GROUP,57	SMB_ACL_GROUP_OBJ,58	SMB_ACL_OTHER,59	SMB_ACL_MASK60};61 62#define SMB_ACL_READ			463#define SMB_ACL_WRITE			264#define SMB_ACL_EXECUTE			165 66struct xattr_acl_entry {67	int type;68	uid_t uid;69	gid_t gid;70	mode_t perm;71};72 73/*74 * xattr_smb_acl structure is used for computing posix acl hash.75 */76struct xattr_smb_acl {77	int count;78	int next;79	struct xattr_acl_entry entries[] __counted_by(count);80};81 82/* 64bytes hash in xattr_ntacl is computed with sha256 */83#define XATTR_SD_HASH_TYPE_SHA256	0x184#define XATTR_SD_HASH_SIZE		6485 86/*87 * xattr_ntacl is used for storing ntacl and hashes.88 * Hash is used for checking valid posix acl and ntacl in xattr.89 */90struct xattr_ntacl {91	__u16	version; /* version 4*/92	void	*sd_buf;93	__u32	sd_size;94	__u16	hash_type; /* hash type */95	__u8	desc[10]; /* posix_acl description */96	__u16	desc_len;97	__u64	current_time;98	__u8	hash[XATTR_SD_HASH_SIZE]; /* 64bytes hash for ntacl */99	__u8	posix_acl_hash[XATTR_SD_HASH_SIZE]; /* 64bytes hash for posix acl */100};101 102/* DOS ATTRIBUTE XATTR PREFIX */103#define DOS_ATTRIBUTE_PREFIX		"DOSATTRIB"104#define DOS_ATTRIBUTE_PREFIX_LEN	(sizeof(DOS_ATTRIBUTE_PREFIX) - 1)105#define XATTR_NAME_DOS_ATTRIBUTE	(XATTR_USER_PREFIX DOS_ATTRIBUTE_PREFIX)106#define XATTR_NAME_DOS_ATTRIBUTE_LEN	\107		(sizeof(XATTR_USER_PREFIX DOS_ATTRIBUTE_PREFIX) - 1)108 109/* STREAM XATTR PREFIX */110#define STREAM_PREFIX			"DosStream."111#define STREAM_PREFIX_LEN		(sizeof(STREAM_PREFIX) - 1)112#define XATTR_NAME_STREAM		(XATTR_USER_PREFIX STREAM_PREFIX)113#define XATTR_NAME_STREAM_LEN		(sizeof(XATTR_NAME_STREAM) - 1)114 115/* SECURITY DESCRIPTOR(NTACL) XATTR PREFIX */116#define SD_PREFIX			"NTACL"117#define SD_PREFIX_LEN	(sizeof(SD_PREFIX) - 1)118#define XATTR_NAME_SD	(XATTR_SECURITY_PREFIX SD_PREFIX)119#define XATTR_NAME_SD_LEN	\120		(sizeof(XATTR_SECURITY_PREFIX SD_PREFIX) - 1)121 122#endif /* __XATTR_H__ */123