• PAM从入门到精通(十)


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

    本文参考:

    《The Linux-PAM Application Developers' Guide》

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

    更加形象的形式:

    五、主要函数详解

    8. pam_setcred

    概述:

    设置用户凭证。

    函数声明:

    #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()(或等效操作)应该(已)被执行。

    参数说明:

    • pam_handle_t *pamh

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

    • int flags

    有效标志,其中任何一个可以与PAM_SILENT进行逻辑“或”运算,它们是:

    PAM_ESTABLISH_CRED

    初始化用户的凭据。

    PAM_DELETE_CRED

    删除用户的凭据。

    PAM_REINITIALIZE_CRED

    完全重新初始化用户凭据。

    PAM_REFRESH_CRED

    延长现有凭据的生命期(使用期限)。

    返回值:

    • PAM_BUF_ERR:内存缓冲区错误。
    • PAM_CRED_ERR:设置用户凭据失败。
    • PAM_CRED_EXPIRED:用户凭据已过期。
    • PAM_CRED_UNAVAIL:检索用户凭据失败。
    • PAM_SUCCESS:数据已成功存储。
    • PAM_SYSTEM_ERR:NULL指针被传递给PAM句柄,函数被模块调用或发生其它系统错误。
    • PAM_USER_UNKNOWN:身份验证模块未知用户。
       

    实例:

    实例1. 一般性代码

    1. /* 建立认证服务的用户证书*/
    2. status = pam_setcred(pamh, PAM_ESTABLISH_CRED);
    3. if (status != PAM_SUCCESS)
    4. exit(status);

    实例2. SDDM中的代码

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

    代码如下:

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

    更多函数请看后续文章。

  • 相关阅读:
    几号发工资就能看出公司的好坏?(文末附招聘岗位)
    一篇文章带你掌握主流办公框架——SpringBoot
    @Autowired具有什么功能呢?
    springboot读取resources目录下文件那点事
    什么是Linux的Overcommit和OOM
    DFS搜索和输出所有路径
    ICV报告: ADAS SoC市场规模将在2024年迎来较大突破
    WPF实现拖动控件功能(类似从工具箱拖出工具)
    Cy3.5菁染料标记海藻酸钠;CY3.5-Alginate;Alginate-Y3.5
    流体动力润滑(轴承油膜承载机理)
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/133923240