putobjattrs 子例程
用途
修改域分配的对象数据库中的多个对象安全性属性。
库
安全性库 (libc.a)
语法
#include <usersec.h>
int putobjattrs ( Obj, Attributes,Count )
char * Dom;
dbattr_t *Attributes;
intCount;描述
putobjattrs 子例程修改域分配的对象数据库中的一个或多个属性。 只能使用域分配的对象数据库中已存在的对象来调用子例程。
要创建或除去对象,请改为使用 putobjattr 子例程。 必须通过使用指定 SEC_COMMIT的 Type 参数调用 putobjattr 子例程来显式落实由 putobjattrs 子例程更改的数据。 在落实数据之前,只有进程中的 getobjattr 和 getobjattrs 子例程会返回修改后的数据。
直到使用 setkst 命令将整个数据库发送到内核安全性表之后,对域对象数据库进行的更改才会影响安全性注意事项。
Attributes 数组包含有关要更新的每个属性的信息。 必须在成功调用 putobjattrs 子例程时检查 Attributes 数组中指定的每个值,以确定是否成功写入了 Attributes 数组的值。 dbattr_t 数据结构包含以下字段:
| 项 | 描述 |
|---|---|
| 属性名 | 指定名称。 |
| 属性标识 | 此属性由 putobjattrs 子例程在内部使用。 |
| 属性类型 | 要更新的属性的类型。 |
| 属性标志 | 请求更新目标属性的结果。 成功完成时,将返回值 0。 否则,返回非零值。 包含用于更新所请求属性的值的并集。 |
| 名称 | 描述 | 类型 |
|---|---|---|
| S_DOMAINS | 对象所属的域的列表。 | SEC_LIST |
| S_CONFSETS | 从访问对象中排除的域的列表。 | SEC_LIST |
| 对象类型 | 对象的类型。 有效值是:
|
SEC_CHAR |
| S_SECFLAGS | 对象的安全标志。 有效值为 FSF_DOM_ALL 和 FSF_DOM_ANY。 | SEC_INT |
| 项 | 描述 |
|---|---|
| au_char | 要为 SEC_CHAR 和 SEC_LIST 类型的属性写入的值的字符指针。 |
| au_int | 要为 SEC_INT 类型的属性写入的整数值。 |
| au_long | 要为 SEC_LONG 类型的属性写入的长整型值。 |
| au_llong | 要为 SEC_LLONG 类型的属性写入的长整型值。 |
参数
| 项 | 描述 |
|---|---|
| 对象 | 指定要更新其属性的域分配的对象名。 |
| 属性 | 指向 dbattr_t 类型的零个或多个属性的数组的指针。 域分配的对象属性的列表在 usersec.h 头文件中定义。 |
| COUNT | Attributes 参数中的数组元素数。 |
安全性
访问的文件:
| 项 | 描述 |
|---|---|
| 文件 | 方式 |
|
|
返回值
如果由 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 | 调用者没有对域数据库的写访问权。 |