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类型。 删除授权要求已删除所有子授权。

putauthattr子程序更改的数据必须通过调用putauthattr子程序显式提交,调用时必须使用指定SEC_COMMIT类型的类型参数。 在所有数据提交之前,只有进程中的getauthattrgetauthattrs子程序会返回修改后的数据。 在使用setkst命令将整个数据库发送到内核安全表或重启系统之前,对授权数据库所做的更改不会影响安全考虑。

参数

描述
认证 授权名称。 除非类型参数为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子例程返回 0。 否则,返回值为-1,并设置errno全局值来指示错误。

错误代码

如果putauthattr子例程失败,将设置下列errno值之一:

描述
EEXIST 类型参数为SEC_DELETE,而Auth参数指定的授权至少是另一个授权的父授权。
EINVAL Auth参数为空Type参数不是SEC_COMMIT
EINVAL Auth参数为默认值、ALL、ALLOW_OWNER、ALLOW_GROUPALLOW_ALL
EINVAL Auth参数以aix 开头。 层次结构以aix开头的授权是为系统定义的授权保留的,不能使用putauthattr子程序进行修改。
EINVAL 属性参数为空,且类型参数不是SEC_NEWSEC_DELETESEC_COMMIT
EINVAL Attribute 参数不包含其中一个已定义的属性。
EINVAL Type 参数不包含其中一个定义的值。
EINVAL Value 参数不指向有效缓冲区或此类型属性的有效数据。
ENOENT Auth参数指定的授权不存在。
ENOENT Auth参数指定了层次结构,Type参数为SEC_NEW,但父授权不存在。
ENOMEM 无法分配内存。
EPERM 不允许该操作。