putauthattr 子例程

用途

修改授权数据库中定义的权限。

安全库 (libc.a)

语法

#include <usersec.h>

int putauthattr(Auth, Attribute, Value, Type)
char *Auth;
char *Attribute;
void *Value;
int Type;

描述

putauthattr 子例程修改授权数据库。 只能通过用户定义的授权数据库中存在的新授权或授权来调用子例程。 使用系统定义的授权表中的授权调用 putauthattr 子例程将失败。

通过使用 SEC_NEW 类型调用 putauthattr 子例程并指定新的授权名称,可以将新的授权添加到授权数据库。 授权名称具有分层结构 (即, parent.subparent.subsubparent)。 必须先存在父授权,然后才能创建子授权。 通过使用 putauthattr 子例程的 SEC_DELETE 类型来删除授权或授权属性。 删除授权要求已删除所有子授权。

必须通过使用指定 SEC_COMMIT 类型的 Type 参数调用 putauthattr 子例程来显式落实 putauthattr 子例程所更改的数据。 在落实所有数据之前,只有进程中的 getauthattrgetauthattrs 子例程返回修改后的数据。 直到使用 setkst 命令将整个数据库发送到内核安全性表,或者直到重新引导系统之后,对授权数据库进行的更改才会影响安全性注意事项。

参数

表 1. 参数
描述
认证 授权名称。 必须指定此参数,除非 Type 参数为 SEC_COMMIT
属性 指定要写入的属性。 usersec.h 文件中定义了以下可能的属性:
(DFLTMSG)
指定在消息目录未在使用时要使用的缺省授权描述。 属性类型为 SEC_CHAR
标识
指定用于标识权限的唯一整数。 属性类型为 SEC_INT
注: 在创建授权时初始设置此值后,请勿对其进行修改。 修改该值可能会损害系统的安全性。
辅助操作 (MSGCAT)
指定包含权限描述的消息目录文件名。 属性类型为 SEC_CHAR
消息集
指定包含由 S_MSGCAT 属性指定的文件中授权描述的消息的消息集。 属性类型为 SEC_INT
MSGNUMBER
指定文件中由 S_MSGCAT 属性指定的授权描述的消息号以及由 S_MSGSET 属性指定的消息集的消息号。 属性类型为 SEC_INT
VALUE 根据 AttributeType 参数的值指定缓冲区,指向缓冲区的指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。
TYPE 指定属性的类型。 在 usersec.h 文件中定义了以下有效类型:
SEC_INT
属性的格式为整数。 用户应提供整数值。
SEC_CHAR
属性的格式是以 null 结束的字符串。 用户应提供字符指针。
SEC_LIST
属性的格式是一系列并置字符串,每个字符串都以 null 结束。 序列中的最后一个字符串由两个连续的空字符终止。 用户应提供字符指针。
SEC_COMMIT
指定要将对指定授权的更改落实到永久存储器。 将忽略 AttributeValue 参数的值。 如果未指定授权,那么会将对所有已修改授权的更改落实到永久存储器。
SEC_DELETE
如果指定了 Attribute 参数,那么将从授权数据库中删除相应的属性。 如果未指定 Attribute 参数,那么将从授权数据库中删除整个授权定义。
SEC_NEW
在授权数据库中创建新的授权。

安全性

访问的文件
文件 方式
/etc/security/authorizations rw

返回值

如果成功,那么 putauthattr 子例程将返回零。 否则,将返回 -1 的值,并设置 errno 全局值来指示错误。

错误代码

如果 putauthattr 子例程失败,那么将设置下列其中一个 errno 值:

表 2。 错误代码
描述
EEXIST Type 参数为 SEC_DELETEAuth 参数指定至少一个另一个授权的父授权。
EINVAL Auth 参数为 NULLType 参数不是 SEC_COMMIT
EINVAL Auth 参数为 default, ALL, ALLOW_OWNER, ALLOW_GROUPALLOW_ALL
EINVAL Auth 参数以 aix开头。 层次结构以 aix 开头的权限保留用于系统定义的权限,并且不可使用 putauthattr 子例程进行修改。
EINVAL Attribute 参数为 NULLType 参数不是 SEC_NEWSEC_DELETESEC_COMMIT
EINVAL Attribute 参数不包含其中一个已定义的属性。
EINVAL Type 参数不包含其中一个定义的值。
EINVAL Value 参数不指向有效缓冲区或此类型属性的有效数据。
ENOENT Auth 参数指定的授权不存在。
ENOENT Auth 参数指定层次结构, Type 参数为 SEC_NEW,但父授权不存在。
ENOMEM 无法分配内存。
EPERM 不允许该操作。