forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.3 KiB
122 lines
3.3 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* Copyright (C) 2021 Samsung Electronics Co., Ltd. |
|
*/ |
|
|
|
#ifndef __XATTR_H__ |
|
#define __XATTR_H__ |
|
|
|
/* |
|
* These are on-disk structures to store additional metadata into xattr to |
|
* reproduce windows filesystem semantics. And they are encoded with NDR to |
|
* compatible with samba's xattr meta format. The compatibility with samba |
|
* is important because it can lose the information(file attribute, |
|
* creation time, acls) about the existing files when switching between |
|
* ksmbd and samba. |
|
*/ |
|
|
|
/* |
|
* Dos attribute flags used for what variable is valid. |
|
*/ |
|
enum { |
|
XATTR_DOSINFO_ATTRIB = 0x00000001, |
|
XATTR_DOSINFO_EA_SIZE = 0x00000002, |
|
XATTR_DOSINFO_SIZE = 0x00000004, |
|
XATTR_DOSINFO_ALLOC_SIZE = 0x00000008, |
|
XATTR_DOSINFO_CREATE_TIME = 0x00000010, |
|
XATTR_DOSINFO_CHANGE_TIME = 0x00000020, |
|
XATTR_DOSINFO_ITIME = 0x00000040 |
|
}; |
|
|
|
/* |
|
* Dos attribute structure which is compatible with samba's one. |
|
* Storing it into the xattr named "DOSATTRIB" separately from inode |
|
* allows ksmbd to faithfully reproduce windows filesystem semantics |
|
* on top of a POSIX filesystem. |
|
*/ |
|
struct xattr_dos_attrib { |
|
__u16 version; /* version 3 or version 4 */ |
|
__u32 flags; /* valid flags */ |
|
__u32 attr; /* Dos attribute */ |
|
__u32 ea_size; /* EA size */ |
|
__u64 size; |
|
__u64 alloc_size; |
|
__u64 create_time; /* File creation time */ |
|
__u64 change_time; /* File change time */ |
|
__u64 itime; /* Invented/Initial time */ |
|
}; |
|
|
|
/* |
|
* Enumeration is used for computing posix acl hash. |
|
*/ |
|
enum { |
|
SMB_ACL_TAG_INVALID = 0, |
|
SMB_ACL_USER, |
|
SMB_ACL_USER_OBJ, |
|
SMB_ACL_GROUP, |
|
SMB_ACL_GROUP_OBJ, |
|
SMB_ACL_OTHER, |
|
SMB_ACL_MASK |
|
}; |
|
|
|
#define SMB_ACL_READ 4 |
|
#define SMB_ACL_WRITE 2 |
|
#define SMB_ACL_EXECUTE 1 |
|
|
|
struct xattr_acl_entry { |
|
int type; |
|
uid_t uid; |
|
gid_t gid; |
|
mode_t perm; |
|
}; |
|
|
|
/* |
|
* xattr_smb_acl structure is used for computing posix acl hash. |
|
*/ |
|
struct xattr_smb_acl { |
|
int count; |
|
int next; |
|
struct xattr_acl_entry entries[]; |
|
}; |
|
|
|
/* 64bytes hash in xattr_ntacl is computed with sha256 */ |
|
#define XATTR_SD_HASH_TYPE_SHA256 0x1 |
|
#define XATTR_SD_HASH_SIZE 64 |
|
|
|
/* |
|
* xattr_ntacl is used for storing ntacl and hashes. |
|
* Hash is used for checking valid posix acl and ntacl in xattr. |
|
*/ |
|
struct xattr_ntacl { |
|
__u16 version; /* version 4*/ |
|
void *sd_buf; |
|
__u32 sd_size; |
|
__u16 hash_type; /* hash type */ |
|
__u8 desc[10]; /* posix_acl description */ |
|
__u16 desc_len; |
|
__u64 current_time; |
|
__u8 hash[XATTR_SD_HASH_SIZE]; /* 64bytes hash for ntacl */ |
|
__u8 posix_acl_hash[XATTR_SD_HASH_SIZE]; /* 64bytes hash for posix acl */ |
|
}; |
|
|
|
/* DOS ATTRIBUITE XATTR PREFIX */ |
|
#define DOS_ATTRIBUTE_PREFIX "DOSATTRIB" |
|
#define DOS_ATTRIBUTE_PREFIX_LEN (sizeof(DOS_ATTRIBUTE_PREFIX) - 1) |
|
#define XATTR_NAME_DOS_ATTRIBUTE (XATTR_USER_PREFIX DOS_ATTRIBUTE_PREFIX) |
|
#define XATTR_NAME_DOS_ATTRIBUTE_LEN \ |
|
(sizeof(XATTR_USER_PREFIX DOS_ATTRIBUTE_PREFIX) - 1) |
|
|
|
/* STREAM XATTR PREFIX */ |
|
#define STREAM_PREFIX "DosStream." |
|
#define STREAM_PREFIX_LEN (sizeof(STREAM_PREFIX) - 1) |
|
#define XATTR_NAME_STREAM (XATTR_USER_PREFIX STREAM_PREFIX) |
|
#define XATTR_NAME_STREAM_LEN (sizeof(XATTR_NAME_STREAM) - 1) |
|
|
|
/* SECURITY DESCRIPTOR(NTACL) XATTR PREFIX */ |
|
#define SD_PREFIX "NTACL" |
|
#define SD_PREFIX_LEN (sizeof(SD_PREFIX) - 1) |
|
#define XATTR_NAME_SD (XATTR_SECURITY_PREFIX SD_PREFIX) |
|
#define XATTR_NAME_SD_LEN \ |
|
(sizeof(XATTR_SECURITY_PREFIX SD_PREFIX) - 1) |
|
|
|
#endif /* __XATTR_H__ */
|
|
|