putauthattr 子例程
用途
修改授权数据库中定义的权限。
库
安全库 (libc.a)
语法
描述
putauthattr 子例程修改授权数据库。 只能通过用户定义的授权数据库中存在的新授权或授权来调用子例程。 使用系统定义的授权表中的授权调用 putauthattr 子例程将失败。
通过使用 SEC_NEW 类型调用 putauthattr 子例程并指定新的授权名称,可以将新的授权添加到授权数据库。 授权名称具有分层结构 (即, parent.subparent.subsubparent)。 必须先存在父授权,然后才能创建子授权。 通过使用 putauthattr 子例程的 SEC_DELETE 类型来删除授权或授权属性。 删除授权要求已删除所有子授权。
必须通过使用指定 SEC_COMMIT 类型的 Type 参数调用 putauthattr 子例程来显式落实 putauthattr 子例程所更改的数据。 在落实所有数据之前,只有进程中的 getauthattr 和 getauthattrs 子例程返回修改后的数据。 直到使用 setkst 命令将整个数据库发送到内核安全性表,或者直到重新引导系统之后,对授权数据库进行的更改才会影响安全性注意事项。
参数
| 项 | 描述 |
|---|---|
| 认证 | 授权名称。 必须指定此参数,除非 Type 参数为 SEC_COMMIT。 |
| 属性 | 指定要写入的属性。 usersec.h 文件中定义了以下可能的属性:
|
| VALUE | 根据 Attribute 和 Type 参数的值指定缓冲区,指向缓冲区的指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。 |
| TYPE | 指定属性的类型。 在 usersec.h 文件中定义了以下有效类型:
|
安全性
- 访问的文件
文件 方式 /etc/security/authorizations rw
返回值
如果成功,那么 putauthattr 子例程将返回零。 否则,将返回 -1 的值,并设置 errno 全局值来指示错误。
错误代码
如果 putauthattr 子例程失败,那么将设置下列其中一个 errno 值:
| 项 | 描述 |
|---|---|
EEXIST |
Type 参数为 SEC_DELETE , Auth 参数指定至少一个另一个授权的父授权。 |
EINVAL |
Auth 参数为 NULL , Type 参数不是 SEC_COMMIT。 |
EINVAL |
Auth 参数为 default, ALL, ALLOW_OWNER, ALLOW_GROUP 或 ALLOW_ALL。 |
EINVAL |
Auth 参数以 aix开头。 层次结构以 aix 开头的权限保留用于系统定义的权限,并且不可使用 putauthattr 子例程进行修改。 |
EINVAL |
Attribute 参数为 NULL , Type 参数不是 SEC_NEW, SEC_DELETE 或 SEC_COMMIT。 |
EINVAL |
Attribute 参数不包含其中一个已定义的属性。 |
EINVAL |
Type 参数不包含其中一个定义的值。 |
EINVAL |
Value 参数不指向有效缓冲区或此类型属性的有效数据。 |
ENOENT |
Auth 参数指定的授权不存在。 |
ENOENT |
Auth 参数指定层次结构, Type 参数为 SEC_NEW,但父授权不存在。 |
ENOMEM |
无法分配内存。 |
EPERM |
不允许该操作。 |