genpagvalue 子例程

用途

设置当前进程凭证。

安全库 (libc.a)

语法

#include <pag.h>
int  genpagvalue(pag_name, pag_value,pag_flags);
char *       pag_name;
uint64_t *   pag_value;
int           pag_flags;

描述

genpagvalue 子例程为给定的 PAG 名称生成新的 PAG 值。 要使此函数成功,必须先向操作系统注册 PAG 名称,然后再调用 genpagvalue 子例程。 genpagvalue 子例程仅限于维护有关上次生成的 PAG 号的信息并相应地生成新号。 此服务可以选择将 PAG 值存储在进程的 cred 结构中。 它不会通过其他方法监视存储在 cred 结构中的 PAG 值。

返回的 PAG 值大小为 64 位。 有效位数由请求的 PAG 类型确定。 32 位 PAGs 具有 32 个有效位。 64 位 PAGs 有 62 个有效位。

进程必须具有 root 用户权限才能对 32 位 PAG 类型调用此函数。 任何进程都可以针对 64 位 PAG 类型调用此函数。

值为 PAG_SET_VALUEpag_flags 参数会使生成的值以原子方式存储在进程的凭证中。 同时设置了 PAG_SET_VALUEPAG_COPY_CRED 值的 pag_flags 参数会导致在存储生成的值之前复制当前进程的凭证。

参数

描述
pag_name 名称参数是 1 到 4 字符,对于 PAG 类型,以 NULL 结束的名称。 典型值包括 afsdfspkikrb5
页面值 此指针指向一个缓冲区,操作系统将在该缓冲区中返回新生成的 PAG 值。
pag_flags 这些标志控制 getpagvalue 子例程的行为。 这必须设置为 0 或一个或多个值 PAG_SET_VALUEPAG_COPY_CRED

返回值

成功完成时返回值 0 。 如果 genpagvalue 子例程失败,那么将返回值 -1 ,并设置 errno 全局变量以指示错误。

错误代码

如果下列一项或多项为真,那么 genpagvalue 子例程将失败:
描述
EINVAL 由于指定的 PAG 类型不作为表的一部分存在,因此无法生成 PAG 值。
EPERM 该进程没有使用该服务的正确权限。

其他错误可能由 genpagvalue 子例程调用的子例程设置。