ext2文件系统源代码之xattr_security.c

继续看ext2文件系统源代码里的最后一些文件,不过最主要的代码我们已经解决了,接下来的就是一些细小的事情了,我们来看xattr_security.c吧。
/*
 * linux/fs/ext2/xattr_security.c
 * 存储security的扩展属性处理函数
 */


#include <linux/module.h>
#include <linux/string.h>
#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include <linux/security.h>
#include "xattr.h"
/*完全的安全属性字符串,返回list字符串长度*/
static size_t
ext2_xattr_security_list(struct inode *inode, char *list, size_t list_size,
			 const char *name, size_t name_len)
{
	/*安全属性名前缀长度,一般是"security."*/
	const int prefix_len = sizeof(XATTR_SECURITY_PREFIX)-1;
	/*全部长度*/
	const size_t total_len = prefix_len + name_len + 1;


	if (list && total_len <= list_size) {
		/*先复制前缀,再复制name*/
		memcpy(list, XATTR_SECURITY_PREFIX, prefix_len);
		memcpy(list+prefix_len, name, name_len);
		list[prefix_len + name_len] = '\0';
	}
	return total_len;
}
/*得到名字为name的属性*/
static int
ext2_xattr_security_get(struct inode *inode, const char *name,
		       void *buffer, size_t size)
{
	/*参数检查,是不是空的*/
	if (strcmp(name, "") == 0)
		return -EINVAL;
	/*之前讲过的函数*/
	return ext2_xattr_get(inode, EXT2_XATTR_INDEX_SECURITY, name,
			      buffer, size);
}


static int
ext2_xattr_security_set(struct inode *inode, const char *name,
		       const void *value, size_t size, int flags)
{
	/*参数检查*/
	if (strcmp(name, "") == 0)
		return -EINVAL;
	/*之前讲过的设置属性的函数*/
	return ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY, name,
			      value, size, flags);
}
/*安全属性初始化函数*/
int
ext2_init_security(struct inode *inode, struct inode *dir)
{
	int err;
	size_t len;
	void *value;
	char *name;
	/*内核配置的安全操作,就是出事哈U后三个值*/
	err = security_inode_init_security(inode, dir, &name, &value, &len);
	if (err) {
		if (err == -EOPNOTSUPP)
			return 0;
		return err;
	}
	/*刚得到的变量来设置对应的属性*/
	err = ext2_xattr_set(inode, EXT2_XATTR_INDEX_SECURITY,
			     name, value, len, 0);
	kfree(name);
	kfree(value);
	return err;
}
/*security对应的xattr_handler*/
struct xattr_handler ext2_xattr_security_handler = {
	.prefix	= XATTR_SECURITY_PREFIX,
	.list	= ext2_xattr_security_list,
	.get	= ext2_xattr_security_get,
	.set	= ext2_xattr_security_set,
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于Linux内核ext4文件系统实现非常复杂,涉及的源代码也非常庞大,因此无法在此进行逐行注释。以下是一些重要的源代码文件和函数,以及它们的作用和功能: 1. fs/ext4/super.c:定义了ext4文件系统的超级块结构体和相关函数,用于管理文件系统的元数据和数据结构。 2. fs/ext4/inode.c:定义了ext4文件系统的inode结构体和相关函数,用于管理文件和目录的元数据信息。 3. fs/ext4/dir.c:定义了ext4文件系统的目录结构体和相关函数,用于管理目录的元数据信息和目录项。 4. fs/ext4/namei.c:定义了ext4文件系统的名称解析函数,用于将路径名转换为inode结构体。 5. fs/ext4/file.c:定义了ext4文件系统的文件操作函数,用于读写文件和管理文件的元数据信息。 6. fs/ext4/extents.c:定义了ext4文件系统的扩展块结构体和相关函数,用于管理大文件的数据块。 7. fs/ext4/mballoc.c:定义了ext4文件系统的块分配函数,用于管理文件系统的空闲块和块位图。 8. fs/ext4/balloc.c:定义了ext4文件系统的数据块分配函数,用于管理文件系统的数据块和块位图。 9. fs/ext4/page-io.c:定义了ext4文件系统的页缓存管理函数,用于管理文件系统的数据缓存。 10. fs/ext4/xattr.c:定义了ext4文件系统的扩展属性结构体和相关函数,用于管理文件和目录的扩展属性。 这些源代码文件和函数涵盖了ext4文件系统的主要功能和特性,对于深入了解和掌握ext4文件系统的实现原理和操作方法非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值