当前位置: 首页 > news >正文

PAM从入门到精通(十三)

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

本文参考:

《The Linux-PAM Application Developers' Guide》

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

更加形象的形式:

五、主要函数详解

11. pam_open_session

概述:

启动PAM会话管理。

函数声明:

#include <security/pam_appl.h>
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. 一般性代码

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

实例2. SDDM中的代码

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

代码如下:

    bool PamHandle::openSession() {m_result = pam_open_session(m_handle, m_silent);if (m_result != PAM_SUCCESS) {qWarning() << "[PAM] openSession:" << pam_strerror(m_handle, m_result);}m_open = m_result == PAM_SUCCESS;return m_open;}

12. pam_close_session

概述:

终止PAM会话管理。

函数声明:

#include <security/pam_appl.h>
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函数。

代码如下:

    bool PamHandle::closeSession() {m_result = pam_close_session(m_handle, m_silent);if (m_result != PAM_SUCCESS) {qWarning() << "[PAM] closeSession:" << pam_strerror(m_handle, m_result);}return m_result == PAM_SUCCESS;}

更多函数请看后续文章。

相关文章:

PAM从入门到精通(十三)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十二&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构&#xff1a; ​ 更加形象的形式&#xff1a; ​ 五、主要函数详解 11. pam_open_session 概述&…...

Stable Diffusion WebUI几种解决手崩溃的方法

1. 添加与手相关负面提示词 如何提价提示词呢? 首先有一个embeddings模型文件bad-hands-5,我们可以去各个大模型网站去搜,我是在C站上面下载的。 附上C站地址:https://civitai.com/ 下载好之后,你需要将文件放入stable-diffusion-webui\embeddings目录中。位置如下所示…...

kr 第三阶段(一)16 位汇编

为什么要学习 16 位汇编&#xff1f; 16 位汇编包含了大部分 32 位汇编的知识点。有助于在学习内核的两种模式。 实模式&#xff1a;访问真实的物理内存保护模式&#xff1a;访问虚拟内存 有助于提升调试能力&#xff0c;调试命令与 OllyDbg 和 WinDebug 通用。可以学习实现反…...

power point导出pdf保留字体

在 slides 中用到非自带的字体&#xff0c;如 [1]&#xff0c;想导出成 pdf 文件&#xff08;因为导出成图&#xff0c;如 png&#xff0c;放大会蒙&#xff09;&#xff0c;并在别人电脑里也保留字体。除了让别人也装上相应字体&#xff0c;可以&#xff1a; 参考 [2]&#x…...

云务器迁移(腾讯云>华为云)

自己平时除了写些bug外还喜欢玩玩服务器&#xff0c;这不前几年买了一个域名&#xff0c;当时服务器买的是阿里云的&#xff0c;想着域名备案挺麻烦的就一直用着&#xff0c;只是在服务器到期后会重新购买其他运营商的&#xff08;关键是续不起&#x1f92b;&#xff09; 这不最…...

[USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)

[USACO11MAR] Brownie Slicing G 题目地址 P3017 [USACO11MAR] Brownie Slicing G 思路 二分最大化最小值 切割思路&#xff1a; 一行一行进行切割&#xff0c;如果这一行可以切割出b块大于等于mid的块&#xff0c;就开始切割下一行 如果无法切割出b块&#xff0c;就把正在…...

【每日一题】—— B. Arrays Sum (Grakn Forces 2020)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…...

XTU-OJ 1328-数码和

题目描述 一个10进制数n在2∼16进制下可以得到的不同的数码和&#xff0c;求在这些数码和中出现次数最多的数码和。 比如20&#xff0c; 进制2345678910111213141516数码10100202110403226242220191817161514数码和2424586421098765 其中数码和2和4分别出现了3次&#xff0c;为…...

混入组件 (mixin)

1 什么是混入以及作用 *混入 (mixin) 提供了一种非常灵活的方式&#xff0c;来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时&#xff0c;所有混入对象的选项将被“混合”进入该组件本身的选项。作用&#xff1a;主要作用是继承和封装…...

ubuntu18.04 RTX3060 rangnet++训练

代码链接&#xff1a; https://github.com/PRBonn/lidar-bonnetal 安装anaconda环境为 CUDA 11.0&#xff08;11.1也可以&#xff09; anaconda环境如下 numpy1.17.2 torchvision0.2.2 matplotlib2.2.3 tensorflow1.13.1 scipy0.19.1 pytorch1.7.1 vispy0.5.3 opencv_python…...

HZOJ-72:猜拳

题目描述 ​ 在一次聚会中&#xff0c;每人拿着一张印有石头、剪刀、布的卡片&#xff0c;每个人具体拿得是哪种卡片不得而知。 ​ 现在告诉你某些人之间的胜负关系&#xff0c;并会询问某两个人之间的对战结果&#xff0c;人按照从 11 到 n&#xfffd; 编号。 ​ 对于每个…...

【Django 03】QuerySet 和 Instance应用

1. DRF QuerySet 和 Instance功能概述 1.1 QuerySet 从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类&#xff1a;Manager、QuerySet、Model。每个Model都有一个默认的 manager实例&#xff0c;名为objects。Django的ORM通过Mode的objects属性提供各种数据…...

安装 mysql

gpt: 要在 Debian 11 上安装 MySQL 数据库服务器&#xff0c;您可以使用以下步骤&#xff1a; 1. **更新软件包列表**&#xff1a;在安装任何软件之前&#xff0c;始终建议首先更新软件包列表&#xff0c;以确保获取最新的软件包信息。在终端中运行以下命令&#xff1a; bash…...

文件管理系统的基本认识

1.文件的属性 文件的定义:一组有意义的信息的集合。 1.文件名: 由创建文件的用户决定文件名&#xff0c;主要是为了方便用户找到文件&#xff0c;同一目录下不允许有重名文件。 2.标识符: 一个系统内的各文件标识符唯一&#xff0c;对用户来说毫无可读性&#xff0c; 因此…...

Excel·VBA制作工资条

看到一篇博客《excel表头_Excel工资表怎么做&#xff1f;3分钟学会利用函数生成工资表》&#xff0c;使用排序功能、函数制作工资条。但如果需要经常制作工资条&#xff0c;显然使用VBA更加方便 VBA制作工资条 Sub 制作工资条()Dim title_row&, blank_row&, ws_new$,…...

【SA8295P 源码分析 (二)】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析

【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析 一、HQX Display 介绍1.1 OpenWF Display Driver二、HQX Display 配置文件参数解析2.1 qcdisplaycfg.xml 配置文件2.1 配置两个 DPUs in QNX2.1.1 配置 graphics_ADP_STAR.conf : …...

git操作说明

SourceURL:file:///home/kingqi/桌面/git操作说明.doc 本地建立仓库 mkdir namebao cd namebao pwd git init 初始化 cd .git/ gedit config 本地存储 进入目录上传全部文件 git add . 提交 git commit -m “说明” 远程提交 复制gitee或者github仓库链接 可以直…...

数据结构——栈与队列

数据结构——栈与队列 文章目录 数据结构——栈与队列一、栈的定义二、队列的定义 一、栈的定义 栈&#xff08;Stack&#xff09;是一种具有特殊限制的线性数据结构&#xff0c;它只允许在表的一端进行插入和删除操作。这一端被称为栈顶&#xff08;Top&#xff09;&#xff…...

Redis入门到实战(四、原理篇)RESP协议

目录 2、Redis内存回收-过期key处理3、Redis内存回收-内存淘汰策略 Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&#xff09;&#xff1a; 客户端&#xff08;client&#xff09;向服务端&#xff08;server&#xff09;发送一条命令…...

c++屏蔽qq或者wechat的好友对局域网环境下的指定关键字

要使用C来屏蔽QQ或WeChat的好友对家庭网络或局域网环境下的指定关键字&#xff0c;你需要编写一个网络包过滤程序&#xff0c;该程序需要有能力拦截并分析网络流量&#xff0c;然后根据指定的规则&#xff08;如关键字&#xff09;来阻止或允许数据包的传输。然而&#xff0c;需…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...