putobjattrs 子例程

用途

修改域分配的对象数据库中的多个对象安全性属性。

安全性库 (libc.a)

语法

#include <usersec.h>
int putobjattrs ( Obj, Attributes,Count )
char * Dom;
dbattr_t *Attributes;
intCount;

描述

putobjattrs 子例程修改域分配的对象数据库中的一个或多个属性。 只能使用域分配的对象数据库中已存在的对象来调用子例程。

要创建或除去对象,请改为使用 putobjattr 子例程。 必须通过使用指定 SEC_COMMITType 参数调用 putobjattr 子例程来显式落实由 putobjattrs 子例程更改的数据。 在落实数据之前,只有进程中的 getobjattrgetobjattrs 子例程会返回修改后的数据。

直到使用 setkst 命令将整个数据库发送到内核安全性表之后,对域对象数据库进行的更改才会影响安全性注意事项。

Attributes 数组包含有关要更新的每个属性的信息。 必须在成功调用 putobjattrs 子例程时检查 Attributes 数组中指定的每个值,以确定是否成功写入了 Attributes 数组的值。 dbattr_t 数据结构包含以下字段:

描述
属性名 指定名称。
属性标识 此属性由 putobjattrs 子例程在内部使用。
属性类型 要更新的属性的类型。
属性标志

请求更新目标属性的结果。 成功完成时,将返回值 0。 否则,返回非零值。

包含用于更新所请求属性的值的并集。

下表列出了 attr_name 属性的不同值:
名称 描述 类型
S_DOMAINS 对象所属的域的列表。 SEC_LIST
S_CONFSETS 从访问对象中排除的域的列表。 SEC_LIST
对象类型 对象的类型。 有效值是:
  • 网络

    对于网络接口

  • 文件

    对于基于文件的对象。 对象名应该是绝对路径。

  • 设备

    对于设备。 应指定绝对路径。

  • 网络端口

    对于端口和端口范围

SEC_CHAR
S_SECFLAGS 对象的安全标志。 有效值为 FSF_DOM_ALL 和 FSF_DOM_ANY。 SEC_INT
以下联合成员分别对应于 usersec.h 文件中的 attr_charattr_intattr_longattr_long 宏的定义。
描述
au_char 要为 SEC_CHAR 和 SEC_LIST 类型的属性写入的值的字符指针。
au_int 要为 SEC_INT 类型的属性写入的整数值。
au_long 要为 SEC_LONG 类型的属性写入的长整型值。
au_llong 要为 SEC_LLONG 类型的属性写入的长整型值。

参数

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

安全性

访问的文件:

描述
文件 方式
/etc/security/domobjs
rw

返回值

如果由 Obj 参数指定的对象存在于域分配的对象数据库中,那么 putobjattrs 子例程将返回零,即使在未成功更新 Attributes 数组中的属性的情况下也是如此。 成功完成时,必须检查 Attributes 数组中指定的 attr_flag 属性,以确定其是否已成功更新。 如果指定的对象不存在,则返回值为-1,并设置errno值来表示错误。

错误代码

如果putobjattrs返回-1,则会设置下列errno值之一:

描述
EINVAL

Obj 参数为 NULL 或缺省值。

Count 参数小于零。

Attributes 数组为 NULL ,并且 Count 参数大于零。

Attributes 数组未指向所请求属性的有效数据。

ENOENT Obj 参数指定的对象不存在。
ENOMEM 无法分配内存。
EPERM 不允许该操作。
EACCES 数据请求的访问许可权被拒绝。

如果 putobjattrs 子例程未能更新属性,那么将在相应 Attributes 元素的 attr_flag 字段中返回下列其中一个错误:

描述
EINVAL

Attributes 条目中的 attr_name 字段不是可识别的对象属性。

属性 条目中的 attr_type 字段包含无效类型。

属性 条目中的 attr_un 字段未指向此类型属性的有效缓冲区或有效数据。

EACCES 调用者没有对域数据库的写访问权。