putobjattr 子例程

用途

修改域分配对象数据库中定义的对象。

安全库libc.a)

语法

#include <usersec.h>
int putobjattr ( Obj, Attribute, Value, Type )
char * Obj;
char *Attribute;
void * Value;
int Type;

描述

putobjattr子程序修改域分配对象数据库。 通过调用带有 SEC_NEW 类型的putobjattr子程序并指定新对象名称,可将新对象添加到域分配对象数据库中。 删除对象或对象属性时,应在putobjattr子程序中使用 SEC_DELETE 类型。

putobjattr子程序更改的数据必须通过调用putobjattr子程序显式提交,调用时必须使用指定 SEC_COMMIT 类型的类型参数。 在所有数据提交之前,只有进程中的getobjattrgetobjattrs子程序会返回修改后的数据。 在使用setkst命令将整个数据库发送到内核安全表或重启系统之前,对域数据库所做的更改不会影响安全考虑。

参数

描述
对象 对象名。 除非 "类型" 参数是 SEC_COMMIT ,否则必须指定此参数。
属性 指定要写入的属性。 usersec.h文件中定义了以下可能的属性:
  • S_DOMAINS

    对象所属的域的列表。 属性类型为 SEC_LIST。

  • S_CONFSETS

    从访问对象中排除的域的列表。 属性类型为 SEC_LIST。

  • 对象类型
    对象的类型。 有效值是:
    • 网络

      对于网络接口

    • 文件

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

    • 设备

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

    • 网络端口

      对于端口和端口范围

属性类型为 SEC_CHAR

S_SECFLAGS

对象的安全标志。 有效值为 FSF_DOM_ALL 和 FSF_DOM_ANY。 属性类型为 SEC_INT

VALUE 根据 AttributeType 参数的值指定缓冲区,指向缓冲区的指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。
TYPE 指定属性的类型。 以下有效类型在usersec.h文件中定义:
  • SEC_INT

    属性的格式为整数。 应提供一个整数值。

  • SEC_CHAR

    属性的格式是以 null 结束的字符串。 您应提供一个字符指针。

  • SEC_LIST

    属性的格式是一系列并置字符串,每个字符串都以 null 结束。 序列中的最后一个字符串由两个连续的空字符终止。 您应提供一个字符指针。

  • SEC_COMMIT

    指定要落实到永久存储器的指定对象的更改。 将忽略 AttributeValue 参数的值。 如果未指定任何对象,那么会将对所有已修改对象的更改落实到永久存储器。

  • SEC_DELETE

    如果指定了 Attribute 参数,那么将从对象数据库中删除相应的属性。 如果未指定 Attribute 参数,那么将从域分配的对象数据库中删除整个对象定义。

  • SEC_NEW

    在域分配的对象数据库中创建新对象。

安全性

访问的文件:

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

返回值

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

错误代码

如果putobjattr子例程失败,将设置以下其中一个errno值:

描述
EINVAL

Obj 参数为 NULL , Type 参数不是 SEC_COMMIT。

Obj 参数为 default 或 ALL

Attribute 参数为 NULL , Type 参数不是 SEC_NEW , SEC_DELETE 或 SEC_COMMIT。

Attribute 参数不包含其中一个已定义的属性。

Type 参数不包含其中一个定义的值。

Value 参数不指向有效缓冲区或此类型属性的有效数据。

ENOENT Obj参数指定的对象不存在。
ENOMEM 无法分配内存。
EPERM 不允许该操作。