• PAM从入门到精通(十二)


    接前一篇文章:PAM从入门到精通(十一)

    本文参考:

    《The Linux-PAM Application Developers' Guide》

    先再来重温一下PAM系统架构

    更加形象的形式:

    五、主要函数详解

    10. pam_chauthtok

    概述:

    更新身份验证令牌。

    函数声明:

    #include

    int pam_chauthtok(pamh, flags);

    pam_handle_t *pamh;

    int flags;

    详细描述:

    pam_chauthtok函数用于更改给定用户的身份验证令牌(如与句柄pamh关联的状态所示)。

    参数说明:

    • pam_handle_t *pamh

    pamh参数是通过先前调用pam_start()获得的身份验证句柄。

    • int flags

    flags参数是以下值中的零或更多的二进制或:

    PAM_SILENT

    不发出任何消息。

    PAM_CHANGE_EXPIRED_AUTHTOK

    此参数向模块指示,用户的身份验证令牌(密码)只有在过期时才应更改。如果未传递此参数,则应用程序要求更改所有身份验证令牌。

    返回值:

    • PAM_AUTHTOK_ERR:模块无法获取新的身份验证令牌。
    • PAM_AUTHTOK_RECOVERY_ERR:模块无法获取旧的身份验证令牌。
    • PAM_AUTHTOK_LOCK_BUSY:一个或多个模块无法更改身份验证令牌,因为它当前已锁定。
    • PAM_AUTHTOK_DISABLE_AGING:至少有一个模块的身份验证令牌老化已被禁用。
    • PAM_PERM_DENIED:权限被拒绝。
    • PAM_SUCCESS:身份验证令牌已成功更新。
    • PAM_TRY_AGAIN:并非所有模块都可以更新身份验证令牌。在这种情况下,用户的身份验证令牌都不会被更新。
    • PAM_USER_UNKNOWN:密码服务未知的用户。

    实例:

    实例1. 一般性代码

    1. /* 通过了密码认证之后再调用帐号管理API,检查用户帐号是否已经过期 */
    2. if ((status = pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS)
    3. {
    4. if (status == PAM_AUTHTOK_EXPIRED)
    5. {
    6. status = pam_chauthtok(pamh, 0); /* 过期则要求用户更改密码 */
    7. if (status != PAM_SUCCESS)
    8. exit(1);
    9. }
    10. }

    实例2. SDDM中的代码

    参见SDDM包源码目录src/helper/backend/PamHandle.cpp中的PamHandle::acctMgmt函数。

    代码如下:

    1. bool PamHandle::chAuthTok(int flags) {
    2. m_result = pam_chauthtok(m_handle, flags | m_silent);
    3. if (m_result != PAM_SUCCESS) {
    4. qWarning() << "[PAM] chAuthTok:" << pam_strerror(m_handle, m_result);
    5. }
    6. return m_result == PAM_SUCCESS;
    7. }

     更多函数请看后续文章。

  • 相关阅读:
    程序链接和加载
    软件定义的云安全实践
    TiDB 工具下载
    Mycat2.0搭建教程
    虚拟机桥接模式下没有无线网卡选项
    eNSP学习——RIP的路由引入
    tensorflow2.x --------------------DenseNet-----------------------------
    目前黑客常用的攻击手段有哪些
    【力扣】1337.矩阵中战斗力最弱的k行
    根据二叉树创建字符串--力扣
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/133929424