acl_set 或 acl_fset 子例程
用途
设置文件的 AIXC ACL 类型访问控制信息。
库
安全性库 (libc.a)
语法
#include <sys/access.h> int acl_set (Path, OwnerMode, GroupMode, DefaultMode)
char * Path;
int OwnerMode;
int GroupMode;
int DefaultMode;
char * Path;
int OwnerMode;
int GroupMode;
int DefaultMode;
int acl_fset (FileDescriptor, OwnerMode, GroupMode, DefaultMode)
int * FileDescriptor;
int OwnerMode;
int GroupMode;
int DefaultMode;
int * FileDescriptor;
int OwnerMode;
int GroupMode;
int DefaultMode;
描述
acl_set 和 acl_fset 子例程设置文件的访问控制表 (ACL) 的基本条目。 将废弃所有其他条目。 其他访问控制属性保持不变。 请注意,如果文件系统对象与任何其他 ACL 类型访问控制信息相关联,那么它将仅替换为基本方式位信息。 强烈建议应用程序停止使用这些接口,而改为使用 aclx_put 和 aclx_fput 子例程来设置 ACL。
参数
| 项 | 描述 |
|---|---|
| DefaultMode | 指定缺省类的访问许可权。 |
| FileDescriptor | 指定打开文件的文件描述符。 |
| GroupMode | 指定文件组的访问许可权。 |
| OwnerMode | 指定文件所有者的访问许可权。 |
| 路径 | 指定指向文件路径名的指针。 |
方式参数在包含零个或多个以下值的位掩码中指定访问许可权:
| 项 | 描述 |
|---|---|
| R_ACC | 授权读许可权。 |
| W_ACC | 授权写许可权。 |
| X_ACC | 授权执行或搜索许可权。 |
返回值
成功完成后, acl_set 和 acl_fset 子例程将返回值 0。 否则,将返回值-1并设置errno全局变量来指示错误。
错误代码
acl_set 子例程失败,如果下列其中一项或多项为 true ,那么文件的访问控制信息保持不变:
| 项 | 描述 |
|---|---|
| EACCES | 拒绝对 Path 前缀的组件的搜索许可权。 |
| Efault | Path 参数指向进程的已分配地址空间外部的位置。 |
| ELOOP | 转换 Path 参数时迂到太多符号链接。 |
| ENAMETOOLONG | Path 参数的组件超过 255 个字符,或者整个 Path 参数超过 1023 个字符。 |
| ENOENT | Path 的组件不存在或具有 disallow truncation 属性 (请参阅 ulimit 子例程)。 |
| ENOENT | Path 参数为空。 |
| ENOENT | 指定了符号链接,但它所引用的文件不存在。 |
| ENOTDIR | Path 前缀的组件不是目录。 |
| ESTALE | 进程的根目录或当前目录位于已卸载的虚拟文件系统中。 |
acl_fset 子例程失败,如果满足以下条件,那么文件许可权保持不变:
| 项 | 描述 |
|---|---|
| EBADF | 文件描述符 FileDescriptor 无效。 |
acl_set 或 acl_fset 子例程失败,如果满足以下一个或多个条件,那么文件的访问控制信息保持不变:
| 项 | 描述 |
|---|---|
| EIO | 操作期间发生 I/O 错误。 |
| EPERM | 有效用户标识与文件所有者的标识不匹配,调用者没有 root 用户权限。 |
| EROFS | 指定的文件位于只读文件系统上。 |
如果在系统上安装了网络文件系统 (NFS) ,那么如果满足以下条件,那么 acl_set 和 acl_fset 子例程也可能失败:
| 项 | 描述 |
|---|---|
| ETIMEDOUT | 连接超时。 |
安全性
访问控制: 调用者必须具有 Path 前缀的所有组件的搜索许可权。
审计事件:
| 事件 | 信息 |
|---|---|
| chacl | 路径 |
| fchacl | FileDescriptor |