接前一篇文章:PAM从入门到精通(九)
本文参考:
《The Linux-PAM Application Developers' Guide》
先再来重温一下PAM系统架构:
更加形象的形式:
概述:
设置用户凭证。
函数声明:
#include int pam_setcred ( pamh , flags );pam_handle_t * pamh ;int flags ;
详细描述:
pam_setcred函数用于建立、维护和删除用户的资格(凭据)。在对用户进行身份验证之后,在为用户打开会话之前(使用pam_open_session()),应该调用它来设置凭据。应在会话关闭后删除凭据(使用pam_close_session())。
凭据(credential)是用户所拥有的东西。它是一些属性,如Kerberos票证或者构成给定用户的唯一性的补附加组成员资格。在Linux系统上,用户的UID和GID也是凭据。但是,已经决定这些属性(以及用户所属的默认补充组)是应由应用程序而不是PAM直接设置的凭据。应用程序应在调用此函数之前建立此类凭据。例如,initgroups()(或等效操作)应该(已)被执行。
参数说明:
pamh参数是通过先前调用pam_start()获得的身份验证句柄。
有效标志,其中任何一个可以与PAM_SILENT进行逻辑“或”运算,它们是:
PAM_ESTABLISH_CRED
初始化用户的凭据。
PAM_DELETE_CRED
删除用户的凭据。
PAM_REINITIALIZE_CRED
完全重新初始化用户凭据。
PAM_REFRESH_CRED
延长现有凭据的生命期(使用期限)。
返回值:
实例:
实例1. 一般性代码
- /* 建立认证服务的用户证书*/
- status = pam_setcred(pamh, PAM_ESTABLISH_CRED);
- if (status != PAM_SUCCESS)
- exit(status);
实例2. SDDM中的代码
参见SDDM包源码目录src/helper/backend/PamHandle.cpp中的PamHandle::setCred函数。
代码如下:
- bool PamHandle::setCred(int flags) {
- m_result = pam_setcred(m_handle, flags | m_silent);
- if (m_result != PAM_SUCCESS) {
- qWarning() << "[PAM] setCred:" << pam_strerror(m_handle, m_result);
- }
- return m_result == PAM_SUCCESS;
- }
更多函数请看后续文章。