认证子例程

用途

验证用户的名称和密码。

安全性库 (libc.a)

语法

#include <usersec.h>

int authenticate (UserName,  Response,  Reenter,  Message)
char *UserName;
char *Response;
int *Reenter;
char **Message;

描述

authenticate 子例程维护用户必须满足才能向系统认证的需求。 这是一个可重新计算的接口,用于提示输入用户的名称和密码。 用户必须在 Message 参数发出的提示符处提供字符串。 Response 参数返回用户对 authenticate 子例程的响应。 调用程序不会假设用户为认证而必须满足的提示消息数。

Reenter 参数指示用户何时满足所有提示消息。 该参数保持非零,直到用户传递了所有提示为止。 Reenter 的返回值为 0 后,返回码指示认证是成功还是失败。 在对用户进行提示时,调用者必须在 认证的调用之间维护 重新输入 的值。

authentication 子例程确定用户可以尝试的认证域。 该子例程从 /etc/security/user 文件中的用户节读取 SYSTEM 行。 出现在 SYSTEM 行中的每个标记都对应于可动态装入和处理的方法。 同样,系统可以提供多个或备用认证路径。

authenticate 例程维护有关向用户显示的下一条提示消息的内部状态信息。 如果在为用户完成所有提示之前,调用程序提供不同的用户名,那么将重置内部状态信息并重新开始提示消息。 调用程序在处理给定用户的提示时维护 Reenter 参数的值。

如果用户没有定义的密码,或者 SYSTEM 语法明确指定不需要认证,那么用户无需响应任何提示消息。 否则,始终会初始提示用户提供密码。

最初可以使用 Response 参数中的明文密码来调用 authenticate 子例程。 如果用户在初始调用期间提供了密码,但没有密码,那么认证将失败。 如果用户希望 authenticate 子例程提供提示消息,那么 Response 参数是初始调用时的空指针。

authenticate 子例程设置由名称解析子例程 (例如 getpwnam 子例程) 使用的 AUTHSTATE 环境变量。 此环境变量指示要向其认证用户的注册表。 AUTHSTATE 环境变量的值包括 DCEcompatSYSTEM 语法中显示的令牌名称。 如果调用 cron 守护程序或不需要认证的其他实用程序,那么可以存在空值。

参数

描述
UserName 指向要认证的用户的名称。
Response 指定包含用户对认证提示的响应的字符串。
重新输入 指向用于指示 authenticate 子例程是否已完成处理的布尔值。 如果 Reenter 参数是非零值,那么 authenticate 子例程期望用户满足 Message 参数提供的提示消息。 如果 Reenter 参数为 0 ,那么 authenticate 子例程已完成处理。
消息 指向 authenticate 子例程为其分配内存并填充的指针。 此字符串适用于打印和发出提示消息 (如果 Reenter 参数是非零值)。 它还会发出参考消息,例如用户认证失败的原因 (如果 Reenter 参数为 0)。 调用应用程序负责释放此内存。

返回值

成功完成时, authenticate 子例程将返回值 0。 如果此子例程失败,那么它将返回值 1。

错误代码

如果下列其中一个值为 true ,那么 authenticate 子例程将失败:

描述
ENOENT 指示用户对于系统未知。
ESAD 指示认证被拒绝。
EINVAL 指示参数无效。
ENOMEM 指示内存分配 (malloc) 失败。
注: DCE 机制需要成功认证的凭证,这些凭证仅适用于认证过程及其子代。