putdevattrs 子例程

用途

修改特权设备数据库中的多个设备属性。

安全库 (libc.a)

语法

#include <usersec.h>

int putdevattrs(Device, Attributes, Count)
    char *Device;
    dbattr_t *Attributes;
    int Count;

描述

putdevattrs 子例程从特权设备数据库修改一个或多个属性。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取和写入。 由 Device 参数指定的设备必须包含设备的完整路径,并且存在于特权设备数据库中。

putdevattrs 子例程仅用于修改数据库中现有设备的属性。 要创建或除去设备条目,请改为使用 putdevattr 子例程。 必须通过使用指定 SEC_COMMITType 参数调用 putdevattr 子例程来显式落实由 putdevattrs 子例程更改的数据。 在落实所有数据之前,只有进程中的 getdevattrgetdevattrs 子例程返回修改后的数据。 在使用 setkst 设备将整个数据库发送到内核安全性表之前,对特权设备数据库进行的更改不会影响安全性注意事项。

Attributes 参数包含有关要更新的每个属性的信息。 必须在成功调用 putdevattrs 子例程时检查 Attributes 参数中指定的每个值,以确定是否成功写入了 Attributes 参数。 dbattr_t data 结构包含以下字段:
表 1. dbattr_t data 结构字段
描述
attr_name 要更新的设备属性的名称。
attr_idx 此属性由 putdevattrs 子例程在内部使用。
attr_type 要更新的属性的类型。
attr _flag 请求更新所需属性的结果。 成功时,将返回值 0。 否则,返回非零值。
attr_un 包含用于更新所请求属性的值的并集。
attr_domain 此字段被 putdevattrs 子例程忽略。
usersec.h 文件中定义了 putdevattrs 子例程的以下有效特权设备属性:
表 2。 putdevattrs 子例程有效特权设备属性
姓名 描述 类型
S_READPRIVS 从设备读取所需的特权。 可以定义 8 个特权。 允许具有任何读特权的进程从设备读取。 SEC_LIST
S_WRITEPRIVS 写入设备所需的特权。 可以定义 8 个特权。 允许具有任何写特权的进程写入设备。 SEC_LIST
后跟的并集成员分别对应于 usersec.h 文件中 attr_char, attr_int, attr_longattr_llong 宏的定义。
表 3。 联合成员
描述
au_char 一个字符指针,指向要为 SEC_CHARSEC_LIST 类型的属性写入的值。
au_int 要为 SEC_INT 类型的属性写入的整数值。
au_long 要为 SEC_LONG 类型的属性编写的长整型值。
au_llong 要为 SEC_LLONG 类型的属性写入的长整型值。

参数

表 4。 参数
描述
设备 指定要更新其属性的设备名。
属性 指向 dbattr_t 类型的零个或多个元素的数组的指针。 设备属性列表在 usersec.h 头文件中定义。
COUNT Attributes 参数中的数组元素数。

安全性

访问的文件
表 5。 访问的文件
文件 方式
/etc/security/privdevs rw

返回值

如果特权设备数据库中存在 Device 参数指定的设备,那么 putdevattrs 子例程将返回零,即使在未成功更新 Attributes 参数中的属性的情况下也是如此。 成功时,必须检查 Attributes 参数中每个元素的 attr_flag 属性以确定其是否已成功更新。 如果失败,将返回 -1 的值,并设置 errno 值以指示错误。

错误代码

如果 putdevattrs 子程序返回 -1 ,则可以设置下列 errno 值之一:
表 6。 如果 putdevattrs 子程序返回错误代码 -1
描述
EINVAL Device 参数为 NULLdefaultALL
EINVAL Count 参数小于零。
EINVAL Attributes 参数为 NULLCount 参数大于零。
EINVAL Attributes 参数未指向所请求属性的有效数据。
ENOENT Device 参数中指定的设备不存在。
EPERM 不允许该操作。
如果 putdevattrs 子例程无法更新属性,那么将在与 "属性" 条目指定的值对应的 attr_flag 字段中返回下列其中一个错误:
表 7。 putdevattrs 子例程失败时的错误代码
描述
EACCES 调用者对特权设备数据库没有写访问权。
EINVAL Attributes 条目中的 attr_name 字段不是可识别的特权设备属性。
EINVAL 属性 条目中的 attr_type 字段包含无效类型。
EINVAL 属性 条目中的 attr_un 字段未指向此类型属性的有效缓冲区或有效数据。