描述
putdevattrs 子例程从特权设备数据库修改一个或多个属性。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取和写入。 由 Device 参数指定的设备必须包含设备的完整路径,并且存在于特权设备数据库中。
putdevattrs 子例程仅用于修改数据库中现有设备的属性。 要创建或除去设备条目,请改为使用 putdevattr 子例程。 必须通过使用指定 SEC_COMMIT的 Type 参数调用 putdevattr 子例程来显式落实由 putdevattrs 子例程更改的数据。 在落实所有数据之前,只有进程中的 getdevattr 和 getdevattrs 子例程返回修改后的数据。 在使用 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_long 和
attr_llong 宏的定义。
表 3。 联合成员
| 项 |
描述 |
| au_char |
一个字符指针,指向要为 SEC_CHAR 和 SEC_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 参数为 NULL, default 或 ALL。 |
EINVAL |
Count 参数小于零。 |
EINVAL |
Attributes 参数为 NULL , Count 参数大于零。 |
EINVAL |
Attributes 参数未指向所请求属性的有效数据。 |
ENOENT |
在 Device 参数中指定的设备不存在。 |
EPERM |
不允许该操作。 |
如果
putdevattrs 子例程无法更新属性,那么将在与 "属性" 条目指定的值对应的
attr_flag 字段中返回下列其中一个错误:
表 7。 putdevattrs 子例程失败时的错误代码
| 项 |
描述 |
EACCES |
调用者对特权设备数据库没有写访问权。 |
EINVAL |
Attributes 条目中的 attr_name 字段不是可识别的特权设备属性。 |
EINVAL |
属性 条目中的 attr_type 字段包含无效类型。 |
EINVAL |
属性 条目中的 attr_un 字段未指向此类型属性的有效缓冲区或有效数据。 |