auditobj 子例程
用途
获取或设置系统数据对象的审计方式。
库
标准 C 库 (libc.a)
语法
#include <sys/audit.h>
描述
auditobj 子例程查询或设置要通过访问所选对象生成的审计事件。 对于文件系统名称空间中的每个对象,可以指定为每种访问方式生成的事件。 通过使用 auditobj 子例程,管理员可以在系统中定义与对指定对象的访问相对应的新审计事件。 这些事件与系统定义的事件处理方式相同。
不需要启用系统审计来设置或查询对象审计事件。 可以使用 AUDIT_RESET 命令来指示 audit 子例程,以清除对象审计事件的定义。
参数
| 项 | 描述 |
|---|---|
| 命令 | 指定是读取还是写入对象审计事件列表。 在 sys/audit.h 文件中为 Command 参数定义的有效值为:
|
| 对象事件 | 指定 AUDIT_SET 操作或 AUDIT_GET 或 AUDIT_LOCK 操作之后的 o_event 结构的数组。 o_event 结构在 sys/audit.h 文件中定义,并包含以下成员:
注: C++ 编译器将生成一条警告,指示 o_event 既定义为结构,也定义为该结构中的字段。 虽然可以在 C++ 中使用 o_event 字段,但可以通过定义 O_EVENT_RENAME来绕过警告。 这会将 o_event 字段替换为 o_event_array。 o_event 是缺省字段。
|
| ObjSize | 对于 AUDIT_SET 操作, ObjSize 参数指定数组中由 Obj_Events 参数指向的对象审计事件定义数。 对于 AUDIT_GET 或 AUDIT_LOCK 操作, ObjSize 参数指定 Obj_Events 参数指向的缓冲区大小。 |
返回值
如果 auditobj 子例程成功完成,那么如果 Command 参数为 AUDIT_GET 或 AUDIT_LOCK,那么将返回对象审计事件定义数。 如果 Command 参数为 AUDIT_SET,那么将返回值 0。 如果调用失败,则返回值为-1并设置errno全局变量来指示错误。
错误代码
如果下列任何一项为 true ,那么 auditobj 子例程将失败:
| 项 | 描述 |
|---|---|
| Efault | Obj_Events 参数指向进程的地址空间外部。 |
| Efault | Command 参数为 AUDIT_SET,一个或多个o_name成员指向进程的地址空间外。 |
| Efault | Command 参数为 AUDIT_GET 或 AUDIT_LOCK,并且 Obj_Events 参数的缓冲区大小不足以容纳整数。 |
| EINVAL | Command 参数的值不是 AUDIT_SET, AUDIT_GET 或 AUDIT_LOCK。 |
| EINVAL | Command 参数为 AUDIT_SET,以及一个或多个o_type成员不是 AUDIT_FILE。 |
| EINVAL | 事件名称的长度超过 15 个有效字符。 |
| ENOENT | Command 参数为 AUDIT_SET,并且其中一个文件系统对象的父目录不存在。 |
| ENOSPC | Command 参数的值为 AUDIT_GET 或 AUDIT_LOCK,并且由 ObjSize 参数指定的缓冲区大小不足以容纳事件结构和名称列表。 如果发生此情况,那么缓冲区的第一个字将设置为所需的缓冲区大小。 |
| ENOMEM | 分配内存失败。 |
| EBUSY | 另一个进程使用 AUDIT_LOCK调用了 auditobj 子例程。 |
| EPERM | 调用者没有 root 用户权限。 |