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,
};

你可能感兴趣的:(linux,linux,ext,kernel,内核,文件系统)