putdevattr 子例程

用途

修改特权设备数据库中的设备安全性信息。

安全库libc.a

语法

#include <usersec.h>

int putdevattr (Device, Attribute, Value, Type)
    char *Device;
    char *Attribute;
    void *Value;
    int Type;

描述

putdevattr子程序将指定属性写入设备数据库。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取和写入。 通过putdevattrputdevattrs子程序更改的数据必须通过调用putdevattr子程序显式提交,并在类型参数中指定SEC_COMMIT。 在所有数据提交之前,只有进程内的子程序会返回写入的数据。

必须首先通过调用SEC_NEW类型的putdevattr子程序来创建设备数据库中的新条目。

在整个数据库通过setkst设备发送到内核安全表或系统重启之前,对特权设备数据库所做的更改不会影响安全考虑。

参数

描述
设备 设备名。 该值应该是系统上设备的完整路径。 除非类型参数为SEC_COMMIT,否则必须指定此参数。
属性 指定写入属性。 usersec.h文件 中定义了以下可能的属性:
自述文件
从设备读取所需的特权。 可以定义 8 个特权。 允许具有任何读特权的进程从设备读取。 属性类型为SEC_LIST
写 EPRIVS
写入设备所需的特权。 可以定义 8 个特权。 允许具有任何写特权的进程写入设备。 属性类型为SEC_LIST
VALUE 根据属性类型参数,指定一个缓冲区、一个指向缓冲区的指针或一个指向指针的指针。 详情请查看类型参数。
TYPE 指定期望的属性类型。 有效类型在usersec.h文件和 include 中定义:
SEC_INT
属性的格式为整数。 用户应提供整数。
SEC_CHAR
属性的格式是以 null 结束的字符串。 用户应提供字符指针。
SEC_LIST
属性的格式是一系列并置字符串,每个字符串都以 null 结束。 序列中的最后一个字符串由两个连续的空字符终止。 用户应提供字符指针。
SEC_COMMIT
指定要将对指定设备的更改落实到永久存储器。 属性参数将被忽略。 如果未指定设备,那么会将对所有已修改设备的更改落实到永久存储器。
SEC_DELETE
如果指定了属性参数,则相应属性将从特权设备数据库中删除。 如果没有指定Attribute(属性)参数,整个设备定义将从特权设备数据库中删除。
SEC_NEW
当使用putdevattr子程序指定设备时,在特权设备数据库中创建一个新设备。

安全性

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

返回值

如果成功,putdevattr子例程返回 0。 否则,返回值为-1,并设置errno全局值来指示错误。

错误代码

如果putdevattr子例程失败,可以设置下列errno值之一:

描述
EINVAL 设备参数为空类型参数不是SEC_COMMIT
EINVAL 设备参数为默认ALL
EINVAL 属性参数不包含已定义的属性或为NULL
EINVAL 类型参数不包含定义值。
EINVAL 对于此类属性,Value参数不指向有效缓冲区或有效数据。
ENOENT 设备参数指定的设备不存在。
EPERM 不允许该操作。