使用PAM服务首先要通过pam_start启动一个PAM事务,这是应用程序需要调用的第一个PAM函数
#include <security/pam_appl.h>
int pam_start(const char *service_name, const char *user, const struct pam_conv *pam_conversation, pam_handle_t **pamh);
参数说明:
- service_name:指定要使用的服务的名称,也就是/etc/pam.d/目录下某个PAM配置文件的名字
- user:通常为要进行认证的用户的用户名
- pam_conversation:PAM服务模块与应用程序沟通及交换数据的函数,后续会详细解释
- pamh:返回的句柄, 此句柄用于后续的pam调用,需要说明的是事务状态完全包含在此句柄标识的结构中,因此PAM服务模块可以并行处理多个事务,但是pam_handle_t是一个盲结构,应用程序不应试图直接探测其信息。而是应该通过PAM库提供的函数pam_set_item和pam_get_item。
返回值:
- PAM_ABORT:一般错误。
- PAM_BUF_ERR:内存缓冲区错误。
- PAM_SUCCESS:事务已成功创建。
- PAM_SYSTEM_ERR:系统错误,例如提交了一个NULL指针而非指向数据的指针。
关于pam_conversation: