上一主题: authxapi_IsThereExitFunction 函数下一主题: authxapi_GetObjectListValue 函数


authxapi_GetObjectProperty 函数

在 UNIX 上有效

authxapi_GetObjectProperty 函数检索数据库中存储的对象的单值属性的值。‑ 无法使用此函数检索具有多个值的属性,例如列表。 可以使用 authxapi_GetObjectListValue 函数检索属性列表。 所有参数字符串都必须以 NULL 结尾。

如果函数成功,则返回 0。 如果失败,则设置全局变量 errno,并返回以下错误代码之一:

返回值

ERRNO

含义

AUTHXAPI_E_EINVAL

EINVAL

指针无效 (NULL)

AUTHXAPI_E_INVOBJ

EINVAL

对象描述符无效

AUTHXAPI_E_INVPROP

EINVAL

属性描述符无效

AUTHXAPI_E_NOCLASS

ENOENT

未找到所需的类

AUTHXAPI_E_NOOBJ

ENOENT

未找到所需的对象

AUTHXAPI_E_NOPROP

ENOENT

未找到所需的属性

AUTHXAPI_E_PTYPE

EINVAL

属性类型为列表

AUTHXAPI_E_DBERROR

EIO

怀疑数据库损坏

AUTHXAPI_E_NOVAL

ENOENT

没有与该对象关联的属性的值

int authxapi_GetObjectProperty (const char  *szClass,
                                const char  *szObj,
                                SEOSDB_ODF  *p_odf,
                                const char  *sz_Prop,
                                SEOSDB_PDF  *p_pdf,
                                void        *val,
                                int         *size);
szClass

资源所属的类名。

szObj

要检索其属性值的对象(记录)的名称。

p_odf

指向对象描述符的指针,在之前调用退出 API get 函数期间由此函数提取或由调用方提供该描述符。

szProp

要检索其值的属性的名称。

p_pdf

指向属性描述符的指针,在之前调用退出 API get 函数期间由此函数提取或由调用方提供该描述符。

val

指向使用属性值填充的变量的指针。 调用方应该提供指向与属性数据类型属于同一类型的变量的指针。

size

指向 val 参数所指向内存区域的大小(以字节为单位)的指针。

示例:从数据库中提取值。

此示例(常规资源 exit 函数的一部分)检索数据库中存储的值。 该 exit 函数检查请求是否针对正确的资源类。 忽略其他类。 调用 authxapi_GetObjectProperty 函数以检索 COMMENT 属性的值。 如果检索成功,该函数将测试字符串是否包含子字符串“ NO ”(注意单词前后的空格)。 如果包含,则拒绝请求。 否则,函数会将控制权返回给 CA ControlMinder 以执行标准检查。

#include stdio.h
#include authxapi.h
#include seostype.h

int MyExitFunction(void *exit_data, SEOS_EXITRES *result)
{
    SEOS_EXITGENR *genr_data;
    SEOSDB_ODF odf;
    SEOSDB_PDF pdf;
    SEOS_COMMENT comment;
    int rc;

    genr_data = (SEOS_EXITGENR *)exit_data;
    /* 忽略不感兴趣的类 */
    if (strcmp(genr_data‑>szClass, “MyClass”))
        return 0;

    /* 提取要验证访问的资源的 */
    /* COMMENT 属性的信息。 */
    rc = authxapi_GetObjectProperty(“MyClass”, genr_data‑>szRes,
               &odf, “COMMENT”, &pdf, comment, sizeof(comment));

    if (rc == 0)
    {
        /* 我们现在具有注释字符串。 它是否包含“NO”?*/
        if (strstr(comment, “ NO “) != NULL)
        {
            result‑>result = SEOS_EXITR_DENY;
        }
    }
    return 0;
}

注意:要从 selang 命令解释器更新 COMMENT 字段,应使用注释参数。 例如:

newres MyClass anobject \
comment('This object has “ NO “ in the comment property')