putauthattr 子例程
用途
修改授权数据库中定义的权限。
库
安全库libc.a)
语法
描述
putauthattr子程序修改授权数据库。 只有新授权或已存在于用户定义的授权数据库中的授权才能调用该子程序。 使用系统定义的授权表中的授权调用putauthattr子程序将失败。
通过调用SEC_NEW类型的putauthattr子程序并指定新的授权名称,可将新授权添加到授权数据库中。 授权名称具有分层结构 (即, parent.subparent.subsubparent)。 在创建子代之前,父代授权必须存在。 删除授权或授权属性时,应在putauthattr子程序中使用SEC_DELETE类型。 删除授权要求已删除所有子授权。
由putauthattr子程序更改的数据必须通过调用putauthattr子程序显式提交,调用时必须使用指定SEC_COMMIT类型的类型参数。 在所有数据提交之前,只有进程中的getauthattr和getauthattrs子程序会返回修改后的数据。 在使用setkst命令将整个数据库发送到内核安全表或重启系统之前,对授权数据库所做的更改不会影响安全考虑。
参数
| 项 | 描述 |
|---|---|
| 认证 | 授权名称。 除非类型参数为SEC_COMMIT,否则必须指定此参数。 |
| 属性 | 指定要写入的属性。 usersec.h文件 中定义了以下可能的属性:
|
| VALUE | 根据 Attribute 和 Type 参数的值指定缓冲区,指向缓冲区的指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。 |
| TYPE | 指定属性的类型。 以下有效类型在usersec.h文件中定义:
|
安全性
访问的文件:
| 文件 | 方式 |
|---|---|
| /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_GROUP或ALLOW_ALL。 |
| EINVAL | Auth参数以aix 开头。 层次结构以aix开头的授权是为系统定义的授权保留的,不能使用putauthattr子程序进行修改。 |
| EINVAL | 属性参数为空,且类型参数不是SEC_NEW、SEC_DELETE或SEC_COMMIT。 |
| EINVAL | Attribute 参数不包含其中一个已定义的属性。 |
| EINVAL | Type 参数不包含其中一个定义的值。 |
| EINVAL | Value 参数不指向有效缓冲区或此类型属性的有效数据。 |
| ENOENT | Auth参数指定的授权不存在。 |
| ENOENT | Auth参数指定了层次结构,Type参数为SEC_NEW,但父授权不存在。 |
| ENOMEM | 无法分配内存。 |
| EPERM | 不允许该操作。 |