接前一篇文章:PAM从入门到精通(十一)
本文参考:
《The Linux-PAM Application Developers' Guide》
先再来重温一下PAM系统架构:
更加形象的形式:
概述:
更新身份验证令牌。
函数声明:
#include
int pam_chauthtok(pamh, flags);
pam_handle_t *pamh;
int flags;
详细描述:
pam_chauthtok函数用于更改给定用户的身份验证令牌(如与句柄pamh关联的状态所示)。
参数说明:
pamh参数是通过先前调用pam_start()获得的身份验证句柄。
flags参数是以下值中的零或更多的二进制或:
PAM_SILENT
不发出任何消息。
PAM_CHANGE_EXPIRED_AUTHTOK
此参数向模块指示,用户的身份验证令牌(密码)只有在过期时才应更改。如果未传递此参数,则应用程序要求更改所有身份验证令牌。
返回值:
实例:
实例1. 一般性代码
- /* 通过了密码认证之后再调用帐号管理API,检查用户帐号是否已经过期 */
- if ((status = pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS)
- {
- if (status == PAM_AUTHTOK_EXPIRED)
- {
- status = pam_chauthtok(pamh, 0); /* 过期则要求用户更改密码 */
- if (status != PAM_SUCCESS)
- exit(1);
- }
- }
实例2. SDDM中的代码
参见SDDM包源码目录src/helper/backend/PamHandle.cpp中的PamHandle::acctMgmt函数。
代码如下:
- bool PamHandle::chAuthTok(int flags) {
- m_result = pam_chauthtok(m_handle, flags | m_silent);
- if (m_result != PAM_SUCCESS) {
- qWarning() << "[PAM] chAuthTok:" << pam_strerror(m_handle, m_result);
- }
- return m_result == PAM_SUCCESS;
- }
更多函数请看后续文章。