一起写PAM(3)

本文介绍了PAM模块中对话函数的作用及其如何与应用程序交互获取用户输入。此外还讲解了pam_set_data和pam_get_data函数如何实现PAM模块内部不同SPI间的通信,并解释了freefunc函数的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 写到这一篇才发现自己了解的远没有预期的多..

上一次说了对话函数,对话函数是PAM模块与使用PAM进行认证的应用程序进行信息交互的桥梁,通过对话函数PAM模块可以获得用户的输入信息(明文、密文),

还有两套很重要的函数

pam_set_data(pam_handle_t *pamh, const char *pname, void *pdata, void (*freefunc)(pam_handle_t *pamh, void *pbuf, int status)),

pam_get_data(pam_handle_t *pamh, const char *pname, (void **)precvbuf)

这两个函数用来通一个PAM模块中不同的PAM SPI之间进行信息交流

PAM SPI有这么几种(就是一个特定功能模块需要实现的接口)

关于认证的 pam_sm_authenticate pam_sm_setcred(),密码管理的 session操作的,就不一一说了,这是基本的内容,很多地方讲的,使用上面的两个函数实现不同接口之间的信息交互(当然只能按着顺序,如pam_sm_authenticate总是比pam_sm_setcred先调用,因此可以在pam_sm_authenticate 中设置一个数据内容用于标记认证的结果,在pam_sm_setcred中通过判断pam_sm_authenticate中设置的数据内容来判断认证结果),这里说一下freefunc这个函数,这个函数用来实现pdata的释放。

 

pam_set_item(pam_handle_t *pamh, int itemtype, (void *)pbuf);

pam_get_item(pam_handle_t *pamh, int itemtype, (void **)pbuf);

这两个函数是用来进行模块之间信息交互的,itemtype的种类是约定好的,不需要自己定义.

 

有了这些知识就可以写一个最为简单的认证模块了,下一篇将给出一个简单但是完整的PAM模块的例子.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值