PAM从入门到精通(七)

news2024/10/12 14:23:16

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

本文参考:

《The Linux-PAM Application Developers' Guide》

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

更加形象的形式:

五、主要函数详解

5. pam_strerror

概述:

描述PAM错误代码的字符串。

详细描述:

pam_strerror函数返回一个指向字符串的指针,该字符串描述参数errnum中传递的错误代码,可能使用当前区域设置的LC_MESSAGES部分来选择适当的语言。应用程序不得修改此字符串。任何库函数都不会修改此字符串。

函数声明:

#include <security/pam_appl.h>
const char * pam_strerror ( pamh , errnum );
pam_handle_t * pamh ;
int errnum ;

返回值:

此函数始终返回一个指向字符串的指针。

实例:

SDDM中的代码

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

    const void* PamHandle::getItem(int item_type) {
        const void *item;
        m_result = pam_get_item(m_handle, item_type, &item);
        if (m_result != PAM_SUCCESS) {
            qWarning() << "[PAM] getItem:" << pam_strerror(m_handle, m_result);
        }
        return item;
    }

由于这个函数比较简单,捎带手直接给出其实现,而无需过多解析。其在PAM源码根目录下的libpam/pam_strerror.c中,代码如下:

const char *pam_strerror(pam_handle_t *pamh UNUSED, int errnum)
{
    switch (errnum) {
    case PAM_SUCCESS:
      return _("Success");
    case PAM_ABORT:
      return _("Critical error - immediate abort");
    case PAM_OPEN_ERR:
      return _("Failed to load module");
    case PAM_SYMBOL_ERR:
      return _("Symbol not found");
    case PAM_SERVICE_ERR:
      return _("Error in service module");
    case PAM_SYSTEM_ERR:
      return _("System error");
    case PAM_BUF_ERR:
      return _("Memory buffer error");
    case PAM_PERM_DENIED:
      return _("Permission denied");
    case PAM_AUTH_ERR:
      return _("Authentication failure");
    case PAM_CRED_INSUFFICIENT:
      return _("Insufficient credentials to access authentication data");
    case PAM_AUTHINFO_UNAVAIL:
      return _("Authentication service cannot retrieve authentication info");
    case PAM_USER_UNKNOWN:
      return _("User not known to the underlying authentication module");
    case PAM_MAXTRIES:
      return _("Have exhausted maximum number of retries for service");
    case PAM_NEW_AUTHTOK_REQD:
      return _("Authentication token is no longer valid; new one required");
    case PAM_ACCT_EXPIRED:
      return _("User account has expired");
    case PAM_SESSION_ERR:
      return _("Cannot make/remove an entry for the specified session");
    case PAM_CRED_UNAVAIL:
      return _("Authentication service cannot retrieve user credentials");
    case PAM_CRED_EXPIRED:
      return _("User credentials expired");
    case PAM_CRED_ERR:
      return _("Failure setting user credentials");
    case PAM_NO_MODULE_DATA:
      return _("No module specific data is present");
    case PAM_BAD_ITEM:
      return _("Bad item passed to pam_*_item()");
    case PAM_CONV_ERR:
      return _("Conversation error");
    case PAM_AUTHTOK_ERR:
      return _("Authentication token manipulation error");
    case PAM_AUTHTOK_RECOVERY_ERR:
      return _("Authentication information cannot be recovered");
    case PAM_AUTHTOK_LOCK_BUSY:
      return _("Authentication token lock busy");
    case PAM_AUTHTOK_DISABLE_AGING:
      return _("Authentication token aging disabled");
    case PAM_TRY_AGAIN:
      return _("Failed preliminary check by password service");
    case PAM_IGNORE:
      return _("The return value should be ignored by PAM dispatch");
    case PAM_MODULE_UNKNOWN:
      return _("Module is unknown");
    case PAM_AUTHTOK_EXPIRED:
      return _("Authentication token expired");
    case PAM_CONV_AGAIN:
      return _("Conversation is waiting for event");
    case PAM_INCOMPLETE:
      return _("Application needs to call libpam again");
    }

    return _("Unknown PAM error");
}

可见,虽然函数有两个参数,但实际上第一个参数pam_handle_t *pamh并未实际使用到。函数的作用一目了然,就是 将各种结果宏定义转换为易于理解的字符串,类似于Linux中的strerror函数。

更多函数请看后续文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

App出海起量难?传参安装打开获客增长新途径

近年来&#xff0c;在App出海潮越发热烈的背景下&#xff0c;如何适应海外市场并实现“用户增长”与“提高转化”&#xff0c;已成为出海团队需要面临的重大挑战之一。 如何在海外市场短时间内快速起量&#xff1f;这个问题难倒了不少出海创业者&#xff0c;毕竟目前互联网环境…

Ai数字人直播系统SaaS源码大开源,源码独立部署助力中小企业发展!

源码独立部署ai数字人直播系统&#xff0c;如果放在上半年的话没有数百万投资几乎是天方夜谭&#xff0c;连想做个数字人代理商少则投资十万多则数十万才能进得了代理门槛。在此期间&#xff0c;数字人市场一度出现了大批不良企业利用网上下载的视频合成源码二次包装后打着数字…

MySQL - 利用存储过程生成数据

建表语句 create table users (user_id int auto_incrementprimary key,username varchar(255) not null,email varchar(255) not null,password varchar(255) …

温湿度监测技术又进化了,这个操作太牛了!

无论是在家庭、医疗、农业、制造业&#xff0c;还是在物流和食品行业&#xff0c;精确的温湿度监控对于确保安全、质量和效率都至关重要。 客户案例 医疗行业 在医疗行业&#xff0c;温湿度监控对于存储药品、生物样本和医疗设备至关重要。山东某医院引入了泛地缘科技推出的温湿…

服务器中了mkp勒索病毒怎么处理,mkp勒索病毒解密,数据恢复

10月份以来&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业的服务器数据库被加密&#xff0c;严重影响了企业工作&#xff0c;通过这一波mkp勒索病毒的攻击&#xff0c;云天数据恢复工程师为大家总结了…

01、Python 安装 ,Pycharm 安装 , 简单爬取小视频

目录 安装安装 Python安装 Pycharm 创建项目简单添加文件运行 简单爬取视频1、装模块2、代码 安装 python-3.8.10-amd64.exe – 先安装这个 pycharm-community-2022.2.exe 再安装这个 安装 Python python-3.8.10-amd64.exe 安装&#xff08;这个是其他版本的安装&#xff0…

2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 A题 激光标记舱口轮廓生成 原题再现&#xff1a; 激光是20中的一项重要发明世纪&#xff0c;它被称为“最锋利的刀”、“最精确的尺子”和“最不寻常的光”。 激光已越来越多地应用于工业加工&#xff0c; 其中可以是就业在各种加工业务例如作…

STL库——Vector常见使用接口

一、介绍 1. vector是表示可变大小数组的序列容器&#xff0c;就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0…

报错InitializeComponent报错(提示不存在)

我是c#新手。为了解决这个问题&#xff0c;需要按照以下步骤进行。、 首先&#xff0c;确保项目的类型为WPF应用(.NET Framework)&#xff1b; 然后&#xff0c;代码的位置应正确处于项目的MainWindow.xaml.cs&#xff1b; 最后&#xff0c;将MainWindow.xaml打开&#xff0c;…

FPGA软件【紫光】

软件&#xff1a;编程软件。 注册账号需要用到企业邮箱 可以使用【企业微信】的邮箱 注册需要2~3天&#xff0c;会收到激活邮件 授权&#xff1a; 找到笔记本网卡的MAC&#xff0c; 软件授权选择ADS 提交申请后&#xff0c;需要2~3天等待邮件通知。 使用授权&#xff1a; 文…

最新!两步 永久禁止谷歌浏览器 Google Chrome 自动更新

先放效果图&#xff1a; CSDN这个问题最火的大哥的用了没用 像他这样连浏览器都打不开 为什么要禁止chrome自动更新 看到很多搞笑的大哥&#xff0c;说为啥要禁止&#xff1b; 我觉得最大的原因就是chromedriver跟不上chrome的自动更新&#xff0c;导致我们做selenium爬虫的…

在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路

机器学习是 Python 占据主导地位的领域,它一直在给全球各行各业带来革命性的变化。要在这个不断变化的环境中脱颖而出,掌握正确的工具是关键。LightGBM 就是这样一个工具,它是一个强大且快速的梯度提升框架。在这份综合指南中,我们将通过实际示例和示例数据集从基础知识到高…

PRCV 2023 - Day3

主会场——主旨报告 报告题目&#xff1a;变与不变&#xff1a;有关大模型的一些数理基础问题 讲者&#xff1a;徐宗本&#xff08;中国科学院院士&#xff09; 徐宗本院士的演讲首先通过一系列示例阐释了ChatGPT引领了人工智能研究的新浪潮&#xff0c;推动了人工智能从深度…

行业追踪,2023-10-18

自动复盘 2023-10-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

15.2 主机探测与路由追踪

Ping 使用 Internet 控制消息协议&#xff08;ICMP&#xff09;来测试主机之间的连接。当用户发送一个 ping 请求时&#xff0c;则对应的发送一个 ICMP Echo 请求消息到目标主机&#xff0c;并等待目标主机回复一个 ICMP Echo 回应消息。如果目标主机接收到请求并且网络连接正常…

Top 10 数据恢复工具,可从iPhone 和 iPad 恢复数据

您是否正在寻找最好的 iPad 恢复软件&#xff0c;但不知道哪个选项最好&#xff1f;没有什么可担心的。本文将为您提供有关根据文件类型、设备兼容性和数据丢失原因等因素选择合适的 iPad 恢复软件的提示。此外&#xff0c;前 10 名提到的恢复软件是安全可靠的。 第 1 部分、iP…

这可能是最全面的TCP面试八股文了

计算机网络基础&#xff0c;考验一个程序员的基本功&#xff0c;也能更快的筛选出更优秀的人才。 说说TCP的三次握手 假设发送端为客户端&#xff0c;接收端为服务端。开始时客户端和服务端的状态都是CLOSED。最全面的Java面试网站 第一次握手&#xff1a;客户端向服务端发起…

2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员新版试题是安全生产模拟考试一点通生成的&#xff0c;公路水运工程施工企业安全生产管理人员证模拟考试题库是根据公路水运工程施工企业安全生产管理人员最新版教材汇编出公路水…

Freemarker快速入门(SpringBoot版)

文章目录 Freemarker快速入门1、Freemarker概述2、Freemarker初体验3、数据类型3.0 常见操作符3.1 数值类型3.2 字符串类型3.3 布尔类型3.4 日期类型3.5 序列类型3.6 哈希类型 4、运算符4.1 算术运算符4.2 逻辑运算符4.3 比较运算符4.4 空值运算符 5、常用指令5.1 assign 自定义…

python argparse解析参数

用法比较简单&#xff0c;直接看代码 import argparseargparser argparse.ArgumentParser(descriptionthis is a hello argparser program) argparser.add_argument(--arg1, -a, typestr, helparg1 has value) argparser.add_argument(--arg2, typestr, default"value2&q…