我正在创建一个更新用户密码的C程序。要做到这一点,我使用PAM。我的最小代码基于off of this.
#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
我已经用它来确定数字是什么:PAM Status Codes
首先,我不了解如何将更新后的密码传递给pam_chauthtok()
。我使用pam_set_item
&#34;成功&#34;但实际上并没有帮助我获取pam_chauthtok
函数的信息。我想我可能需要以某种方式将更新的密码传递给pam_handle_t
或pam_conv
,但我不确定如何做到这一点,也不知道最终会如何发送信息到pam_chauthtok()
我保证,我已经google了很多,而且我正在努力,我现在非常迷失。如果我说或写的内容没有意义,请询问澄清。我实际上是C的新手,所以如果有任何明显的语法错误我都会错过,那就是原因。