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


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

    本文参考:

    《The Linux-PAM Application Developers' Guide》

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

    更加形象的形式:

    五、主要函数详解

    11. pam_open_session

    概述:

    启动PAM会话管理

    函数声明:

    #include
    int pam_open_session ( pamh , flags );
    pam_handle_t * pamh ;
    int flags ;

    详细描述:

    pam_open_session函数为先前成功通过身份验证的用户设置用户会话。会话稍后应通过调用pam_close_session()来终止。

    应该注意的是,应用程序的有效uid(通过geteuid()获得)应该具有足够的权限来执行例如创建或挂载用户主目录之类的任务。

    参数说明:

    • pam_handle_t *pamh

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

    • int flags

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

    PAM_SILENT

    不发出任何消息。

    返回值:

    • PAM_ABORT:一般故障。
    • PAM_BUF_ERR:内存缓冲区错误。
    • PAM_SESSION_ERR:会话失败。
    • PAM_SUCCESS:会话已成功创建。

    实例:

    实例1. 一般性代码

    1. /* 通过帐户管理检查之后则打开会话 */
    2. if (status = pam_open_session(pamh, 0) != PAM_SUCCESS)
    3. exit(status);

    实例2. SDDM中的代码

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

    代码如下:

    1. bool PamHandle::openSession() {
    2. m_result = pam_open_session(m_handle, m_silent);
    3. if (m_result != PAM_SUCCESS) {
    4. qWarning() << "[PAM] openSession:" << pam_strerror(m_handle, m_result);
    5. }
    6. m_open = m_result == PAM_SUCCESS;
    7. return m_open;
    8. }

    12. pam_close_session

    概述:

    终止PAM会话管理。

    函数声明:

    #include
    int pam_close_session ( pamh , flags );
    pam_handle_t * pamh ;
    int flags ;

    详细描述:

    pam_close_session函数用于指示经过身份验证的会话已结束。会话应该是通过调用pam_open_session()创建的。

    应该注意的是,应用程序的有效uid(通过geteuid()获得)应该具有足够的权限来执行例如卸载用户主目录之类的任务。

    参数说明:

    • pam_handle_t *pamh

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

    • int flags

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

    PAM_SILENT

    不发出任何消息。

    返回值:

    • PAM_ABORT:一般故障。
    • PAM_BUF_ERR:内存缓冲区错误。
    • PAM_SESSION_ERR:会话失败。
    • PAM_SUCCESS:会话已成功终止。

    实例:

    实例1. 一般性代码

        pam_end(pamh, PAM_SUCCESS);  /* PAM事务的结束 */

    实例2. SDDM中的代码

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

    代码如下:

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

    更多函数请看后续文章。

  • 相关阅读:
    Spark: Cluster Computing with Working Sets
    HMI-Board上手指南
    【小程序/APP 备案】什么样的小程序/APP需要备案,备案要求是什么?
    Boost搜索引擎
    Linux及其常用命令
    根因解析 | Kubernetes Pod状态异常九大场景盘点
    MySQL(4)
    【无标题】
    如何使用IDE端通义灵码
    数据结构入门————栈和队列(C语言/零基础/小白/新手+模拟实现+例题讲解)
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/133930095