在C程序中使用PAM更新用户密码
我正在创建一个更新用户密码的C程序。为了做到这一点,我使用了帕姆。我的最小代码基于 我用这个来确定数字是多少: 主要是,我不知道如何将更新后的密码传递给在C程序中使用PAM更新用户密码,c,linux,passwords,pam,C,Linux,Passwords,Pam,我正在创建一个更新用户密码的C程序。为了做到这一点,我使用了帕姆。我的最小代码基于 我用这个来确定数字是多少: 主要是,我不知道如何将更新后的密码传递给pam_chauthtok()。我使用了pam\u set\u item,它“成功”了,但实际上没有帮助我获得pam\u chauthtok函数的信息。我想我可能需要以某种方式将更新后的密码传递给pam\u handle\u t或pam\u conv,但我甚至不知道该怎么做,也不知道如何最终将信息发送到pam\u chauthtok() 我保证,
pam_chauthtok()
。我使用了pam\u set\u item
,它“成功”了,但实际上没有帮助我获得pam\u chauthtok
函数的信息。我想我可能需要以某种方式将更新后的密码传递给pam\u handle\u t
或pam\u conv
,但我甚至不知道该怎么做,也不知道如何最终将信息发送到pam\u chauthtok()
我保证,我已经在谷歌上搜索了很多,我正在尽我最大的努力,我现在非常迷茫。如果我说的或写的没有什么意义,请要求澄清。实际上,我是C新手,因此,如果我遗漏了任何明显的语法错误,那就是原因。看一下下面的源代码:看一下下面的源代码:
#include <stdio.h>
#include <unistd.h>
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <security/pam_modules.h>
int main(int argc, char** argv)
{
setuid(0);
int retval;
int started;
const char *user = "user";
pam_handle_t *pamh=NULL;
const struct pam_conv conv = {
misc_conv,
NULL
};
if(argc == 2)
{
const char *updated = argv[1];
started = pam_start("update_password", user, &conv, &pamh);
int setTok;
if(started == PAM_SUCCESS)
{
setTok = pam_set_item(pamh, PAM_AUTHTOK_TYPE, updated);
int setPass;
setPass = pam_chauthtok(pamh, PAM_SILENT);
retval = setPass;
}
printf("Started: %d\n", started);
printf("SetTok: %d\n", setTok);
printf("SetPass: %d\n", retval);
}
else{
printf("incorrect number of args");
}
if (pam_end(pamh,retval) != PAM_SUCCESS){
pamh = NULL;
exit(1);
}
return ( retval == PAM_SUCCESS ? 1:0);
}
Started: 0
SetTok: 0
SetPass: 20