linux源码acl,Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍...

原标题:Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍

2.4.4.6 核心代码注释

1 posix_acl_permission()

int(struct*, const struct*, int)

{

......

/*

* 通过FOREACH_ACL_ENTRY()宏来遍历ACL的列表项,并根据列表项中指定的

* ACL的实体类型进行不同的处理

*/

(,,) {

switch(->) {

case:

if (->==())

goto;

break;

......

.case:

/* 判断组id是否等于当前进程的fsgid,如果不等,接着 * 判断该gid是否位于进程的附加组中

*/

if ((->)) {

= 1;

if ((->&) ==)

goto;

}

break;

......

}

}

return -;

/* 查找ACL的有效权限实体,并对请求的权限进行判断 */

:for (=+1;!=;++) {

if (->==) {

if ((->&->&) ==)

return 0;

return -;

}

}

:/* 如果ACL表项中设置了相应的表项则返回0 */

if ((->&) ==)

return 0;

return -;

}

2.4.5 文件五acl.c2.4.5.1文件描述acl.c的完整文件名称为fs/ext4/acl.c,该文件定义了ACL在ext4文件系统中相关操作的具体实现。

2.4.5.2主要变量及宏定义

对于该文件中涉及的变量及宏的含义参见2.3小节,这里不再赘述。

2.4.5.3结构体定义

对于该文件使用的结构体如posix_acl等参见2.3小节,这里不再赘述。

2.4.5.4 外部函数

对于该文件涉及的外部函数,详见2.3小节,这里不再赘述。

2.4.5.5 内部函数

对于该文件定义的相关函数,下面进行详细解释:

1.ext4_acl_from_disk()

函数原型:static struct*(const void *,);

函数参数:value表示磁盘格式的ACL在缓存中的地址;size表示ACL的长度。

函数功能:将ACL的磁盘表示格式转化为内存表示格式。

返回值:成功执行时返回指向ACL内存表示形式的指针;失败时返回指向相应的错误信息的指针。

2.ext4_acl_to_disk()

函数原型:static void *(const struct*,*);

函数参数:acl指向内存格式的ACL;size表示存放访问控制列表的内存空间的长度。

函数功能:将ACL从内存表示形式转化为磁盘表示形式。

返回值:成功时返回指向磁盘格式的ACL指针;失败时返回相应的指向错误信息的指针。

3.ext4_get_acl()

函数原型:struct*(struct*, int);

函数参数:inode表示要操作的目标文件;type表示访问控制列表的类型。

函数功能:根据参数type指定的类型获取指定索引节点的ACL属性。

返回值:成功时返回指向相应ACL的指针;失败时返回指向错误信息的指针。

4.ext4_set_acl

函数原型:static int(*, struct*, int, struct*);

函数参数:handle表示用于日志处理的原子更新操作;inode表示用于设置的目标文件; type表示访问控制列表的类型;acl指向文件的新的访问控制列表。

函数功能:根据参数acl设置文件的指定类型的访问控制列表ACL。

返回值:成功时返回相应的内部调用函数的返回值;失败时返回相应的错误码。

5.ext4_init_acl()

函数原型:int(*, struct*, struct*);

函数参数:handle表示用于日志处理的原子更新操作;inode表示指向新建文件的索引节点;dir表示文件所属目录的索引节点。

函数功能:初始化一个新文件的ACL。

返回值:成功时返回相应的内部调用函数的返回值;失败时返回相应的错误码。

6.ext4_acl_chmod()

函数原型:int(struct*);

函数参数:inode表示待设置的目标索引节点。

函数功能:在调用chmod命令修改文件的权限时,根据指定的权限来修改目标文件中用于访问控制的ACL。

返回值:成功时返回0;失败时返回相应的错误码。

7.ext4_xattr_list_acl_access()

函数原型:static(struct*, char *,, const char *,, int);

函数参数:dentry指向目标文件对应的目录项;list指向存放扩展属性名字的存储空间;list_len表示存储扩展属性的名字的存储空间的长度;name表示扩展属性的名字;name_len表示扩展属性的名字的长度;type表示访问控制列表的类型。

函数功能:将用于访问控制的ACL对应的扩展属性的名字拷贝到list中。

返回值:返回拷贝的字节数。

8.ext4_xattr_list_acl_default()

函数原型:static(struct*, char *,,const char *,, int);

函数参数:dentry指向目标文件对应的目录项;list指向存放扩展属性名字的存储空间;list_len表示存储扩展属性的名字的存储空间的长度;name表示扩展属性的名字;name_len表示扩展属性的名字的长度;type表示访问控制列表的类型。

函数功能:将文件的默认ACL对应的扩展属性的名字拷贝到list中。

返回值:返回拷贝的字节数。

9.ext4_xattr_get_acl()

函数原型:static int(struct*, const char *, void *,, int);

函数参数:dentry表示目标文件对应的目录项,name表示扩展属性的名字;buffer表示存放扩展属性的缓冲区;size表示缓冲区的长度;type表示ACL的类型。

函数功能:将ACL从内存表示形式转换为磁盘表示形式,并将其存放到扩展属性中。

返回值:返回扩展属性所占用的实际空间的长度。

10.ext4_xattr_set_acl()

函数原型:static int(struct*, const char *, const void *,, int, int);

函数参数:dentry表示目标文件对应的目录项,name表示扩展属性的名字;value表示存放扩展属性的缓冲区;size表示缓冲区的长度;flags表示相应的操作标志,在该函数中未使用该参数;type表示ACL的类型。

函数功能:从扩展属性中获取指定文件的内存表示形式的ACL,并用其设置目标文件的指定类型的ACL属性。

返回值:成功时返回相应的内部调用函数的返回值;失败时返回相应的错误码。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值