上一主题: 远程授权 API下一主题: SEOSROUTE_VerifyCreate 函数


文件

远程授权 API 使用以下文件:

示例

以下程序演示客户端应用程序如何执行远程授权检查:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <unistd.h>

#include “api_auth.h”
#include “langapi.h”

int ShowUsage(void)
{
  fprintf( stderr, “Usage:\n”
     “ rmt_auth UserName ClassName ResourceName“
     “Access“
  return 1;
}

int main(int argc, char *argv[])
{
char *output;
int rv;
API_AUTH_RES result;
char input[200];
char *Passwd = NULL;

    if ( argc != 6 )
        return ShowUsage();

    Passwd = getpass(“Please enter your password:”);
    if ( Passwd == NULL )
    {
       printf(“Illegal password!!\n”);
       return 1;
}

    /*
     * 初始化。 从命令行参数获取
     * 主机名和密码
     */
    rv = lca_rmtauth_Init(“rmt_auth”, &output, argv[5], Passwd);
    if ( rv )
    {
        printf( “Return value: 0x%08x\n”
              “%s\n”, rv, (output) ? output : “Initialization failed” );
        return 1;
    }
    Passwd = NULL;

    /*
     * 向服务器发送请求并获取结果
     */
rv = lca_rmtauth_CheckAccess(argv[1], argv[2], argv[3], argv[4], &result);
    if ( rv )
    {
        printf(“Return value: 0x%08x\n”
               “Remote Access Check failed\n”, rv);
        return 1;
    }

    /*
     * 输出结果。
     * 可以在此阶段就允许/拒绝访问的原因
     * 做进一步分析
     */
    printf(“%s's access %s to %s %s at %s is %s!!\n”,
               argv[1], argv[4], argv[2], argv[3], argv[5],
            ((char) result.result == 'P') ? “Permitted” : “Denied”);

    lca_Terminate();
}

编译和链接此示例后,可以检查是否已授权用户访问特定资源。 例如,要查看用户 Joe 是否具有文件 /etc/passwd 的读取权限,请键入以下命令:

rmt_auth Joe FILE /etc/passwd Read authorizationservername

系统会提示您输入密码,输入密码后会收到回复。

更多信息:

远程授权操作

函数

授权和身份验证 API 包括以下函数:

SEOSROUTE_ParseApiError

将错误字符串转换为表示错误代码的整数。

SEOSROUTE_RequestAuth

检查是否已授权用户使用指定的访问类型来访问资源。

SEOSROUTE_VerifyCreate

为用户创建 ACEE 句柄。

SEOSROUTE_VerifyDelete

删除用户的 ACEE 句柄。

SEOSROUTE_ParseApiError 函数

SEOSROUTE_ParseApiError 函数解析验证和身份验证函数返回的错误字符串,并返回与其相关的整数值。

注意:

szErrMsg

CA ControlMinder 在 *szMsg 参数中返回的错误字符串。

SEOSROUTE_RequestAuth 函数

SEOSROUTE_RequestAuth 函数询问 seosd 是否允许指定用户使用指定访问类型访问指定资源。

SEOSROUTE_RequestAuth 函数会向 seosd 发送请求,而 seosd 首先会检查参数是否有效。 如果参数有效,seosd 将执行其标准资源授权检查:指定用户是否有权以指定方式访问指定资源?

应用程序必须提供前五个参数;最后两个参数由 CA ControlMinder 返回,应用程序可使用这两个参数做出决定并向用户提供状态信息。

函数返回的整数取以下值之一:

SEOSAPI_AUTH_OK

允许用户按请求访问资源。

SEOSAPI_AUTH_BADACCESS_ERR

指定的访问权限无效。

SEOSAPI_AUTH_DENY

请求被拒绝。

SEOSAPI_AUTH_NORESPONSE_ERR

seosd 后台进程没有响应。

SEOSAPI_AUTH_NOTROOT_ERR

调用进程的用户 ID 不是 0 (root),执行调用进程的用户没有 SERVER 属性。

SEOSAPI_AUTH_REMOTE_ERR

后台进程或服务返回 szMsg 中描述的错误。

注意:

在调用 SEOSROUTE_RequestAuth 之前,服务器应用程序通常会调用 SEOSROUTE_VerifyCreate,为正在进行授权检查的用户获取 ACEE 句柄。

szClass

资源所属的类名。

szEntity

记录或对象的名称,表示正在访问的资源。

注意:szClass 支持区分大小写的对象时,szEntity 参数的大小写至关重要。

hACEE

访问者的 ACEE 句柄。 要指定与当前进程相关的用户的 ACEE,请指定 SEOSAPI_AUTH_CURRACEE。 指定除 SEOSAPI_AUTH_CURRACEE 之外的 ACEE 句柄要求与调用进程相关联的用户具有 SERVER 属性或调用进程在有效用户 ID 0 (root) 下运行。

pAccess

指向包含请求访问的结构的指针。 该结构包含 SEOS_ACCS 类型的单个数据成员访问。 该成员的有效值包括:

LogOpt

确定是否必须制定审核日志条目的标志。 有效值为:

SEOSAPI_AUTH_LOGNONE

对于常规用户(非 root 用户),如果授权请求成功,则不创建审核记录。 如果授权请求失败,并且数据库中的当前规则需要审核,则创建审核记录。

对于服务器应用程序和 root 用户,无论授权请求成功还是失败,都不创建审核记录(值 = 0)。

SEOSAPI_AUTH_LOG

如果数据库中的当前规则需要审核,则创建审核记录(值 = 1)。

SEOSAPI_AUTH_LOGALL

对于常规用户,这是无效选项并映射到 SEOSAPI_AUTH_LOG。

对于服务器应用程序,无论是什么数据库规则,始终创建审核记录(值 = 2)。

SEOSAPI_AUTH_LOGFAIL

对于常规用户,这是无效选项并映射到 SEOSAPI_AUTH_LOG。

对于服务器应用程序,仅当授权请求失败,并且数据库规则需要授权时,才创建审核记录(值 = 3)。

SEOSAPI_AUTH_LOGNONE_USER

对于常规用户(包括 root 用户),如果授权请求成功,则不创建审核记录。 如果授权请求失败,并且数据库中的当前规则需要审核,则创建审核记录。

对于服务器应用程序,无论授权请求成功还是失败,都不创建审核记录(值 = 4)。

SEOSAPI_AUTH_LOGNEVER

不创建审核记录(值 = 5)。

pRes

指向包含授权结果的 API_AUTH_RES 结构的指针。

szMsg

指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 缓冲区的指针。

SEOSROUTE_RequestAuthAzn 函数

SEOSROUTE_RequestAuthAzn 函数向 seosd 发送授权请求。 CA ControlMinder 首先检查参数是否有效。 如果参数有效,CA ControlMinder 将执行其在 SEOSROUTE_RequestAuth 函数中实现的标准资源授权检查。

重要说明! 此函数已过时,仅用于满足向后兼容性。

如果函数成功,则返回值为 0。 否则,返回值为错误代码。

int SEOSROUTE_RequestAzn (
     LPCSTR szClass,
     LPCSTR szEntity,
     LPCSTR szAccess,
     HANDLE *phUserAttributes,
     int hACEE,
     int LogOpt,
     API_AZN_RES  *pres,
     API_RESP_TAB **response,
     LPCSTR szMsg
);
hACEE

访问者的 ACEE 句柄。

LogOpt

确定是否必须制定审核日志条目的标志。

phUserAttributes

指向 SEOSROUTE_CreateRequestAzn 函数所创建的散列表的指针。 此指针仅与 SEOSD 进程相关。

pRes

指向包含授权结果的 API_AZN_RES 结构的指针。

response

指向包含响应列表的缓冲区的指针。

SzAccess

指向以 null 结尾的字符串的指针,该字符串指定与 szEntity 描述的对象对应的访问名称。

SzClass

指向包含资源类名的以 null 结尾的字符串的指针。

SzEntity

指向包含对象(表示正在访问的资源)名称的以 null 结尾的字符串的指针。

注意:szClass 支持区分大小写的对象时,szEntity 参数的大小写至关重要。

szMsg

指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。

SEOSROUTE_CreateRequestAzn 函数

SEOSROUTE_CreateRequestAzn 函数向 seosd 发送一组涉及相同用户的用户属性,并接收指定在用户属性基础上创建的散列表的指针。

注意:请务必在处理用户之后调用 SEOSROUTE_CloseRequestAzn 函数。

如果函数成功,则返回值为 0。 否则,返回值为错误代码。

INT SEOSROUTE_CreateRequestAzn(
     LPCSTR szUserDir,
     DWORD cEntries,
     LPAPI_AZN_USERATTR pUserAttr,
     PHANDLE phUserAttributes,
     LPSTR szMsg
);
SzUserDir in

指向用于指定用户目录的以 null 结尾的字符串的指针。

CEntries

在 pUserAttr 指向的数组中指定 API_AZN_USERATTR 结构数的值。 该值不得为零 (0)

PUserAttr in

指向包含用户属性的数组的指针。

PhUserAttributes out

如果函数成功,参数会指定一个指向使用用户属性计算的散列表的指针。

如果函数失败,则值为 INVALID_HANDLE_VALUE。

SzMsg out

指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。

SEOSROUTE_CloseRequestAzn 函数

SEOSROUTE_CloseRequestAzn 函数通过 hUserAttributes 删除散列表指针。 调用此函数之后,SEOSD 无法处理指定用户的授权请求,除非再次处理 SEOSROUTE_CreateRequestAzn( )。

如果函数成功,则返回值为 0。 否则,返回值为错误代码。

INT SEOSROUTE_CloseRequestAzn(
     HANDLE hUserAttributes,
     LPSTR szMsg
);
HUserAttributes in

指向使用用户属性计算的散列表的指针。

SzMsg out

指向 CA ControlMinder 在其中返回状态消息的 SEOSAPI_AUTH_MSGLEN 字节长缓冲区的指针。

API_AZN_USERATTR 结构

API_AZN_USERATTR 结构指定属性信息。

typedef  struct tagAPI_AZN_USERATTR {
     char szAttName[ONAME_SIZE];
     char szAttVal[ONAME_SIZE];
}API_AZN_USERATTR, *PAPI_AZN_USERATTR, FAR *LPAPI_AZN_USERATTR;
szAttName

包含属性名称的以 null 结尾的字符串。

szAttVal

包含属性值的以 null 结尾的字符串。