putdevattrs 子例程

用途

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

安全库libc.a)

语法

#include <usersec.h>

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

描述

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

putdevattrs子程序仅用于修改数据库中现有设备的属性。 要创建或删除设备条目,请使用putdevattr子程序。 由putdevattrs子程序更改的数据必须通过调用putdevattr子程序显式提交,并在类型参数中指定 SEC_COMMIT。 在所有数据提交之前,只有进程中的getdevattrgetdevattrs子程序会返回修改后的数据。 在使用setkst设备将整个数据库发送到内核安全表之前,对特权设备数据库所做的更改不会影响安全考虑。

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

参数

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

安全性

访问的文件:
文件 方式
/etc/security/privdevs rw

返回值

如果Device参数指定的设备存在于特权设备数据库中,则putdevattrs子程序返回 0,即使Attributes参数中没有任何属性被成功更新。 成功后,必须检查Attributes参数中每个元素的attr_flag属性,以确定是否已成功更新。 如果失败,则返回值为-1,并设置errno值来指示错误。

错误代码

如果putdevattrs子例程返回-1,则可以设置下列errno值之一:
描述
EINVAL 设备参数为NULL默认ALL
EINVAL Count 参数小于零。
EINVAL 属性参数为空计数 参数大于零。
EINVAL Attributes 参数未指向所请求属性的有效数据。
ENOENT 设备参数中指定的设备不存在。
EPERM 不允许该操作。
如果putdevattrs子程序更新属性失败,则会在 Attributes 条目指定的值对应的attr_flag字段中返回以下错误之一:
描述
EACCES 调用者对特权设备数据库没有写访问权。
EINVAL 属性"条目中的attr_name字段不是公认的特权设备属性。
EINVAL 属性 条目中的attr_type字段包含无效类型。
EINVAL 属性 "条目中的attr_un字段未指向有效缓冲区或此类属性的有效数据。