gpt4 book ai didi

c - 如何在PAM应用程序中捕获密码

转载 作者:行者123 更新时间:2023-11-30 19:28:31 25 4
gpt4 key购买 nike

我正在尝试编写一个使用pam验证用户身份的程序,并将其密码写入文件(当前仅打印该文件)。
但是即使身份验证成功,也不会捕获密码

#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>
#include <stdlib.h>

static struct pam_conv conv = {
misc_conv,
NULL
};

int main(int argc, char *argv[])
{
pam_handle_t *pamh=NULL;
int retval;
const char *user=argv[1];
char *get_user;
char *get_pass;

retval = pam_start("check_user", user, &conv, &pamh);

if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0);

pam_get_item(pamh, PAM_AUTHTOK, (const void **)(const void*)&get_pass);
pam_get_item(pamh, PAM_USER, (const void **)(const void*)&get_user);

printf("user: %s\n", get_user);
printf("password: %s\n", get_pass);

if (retval == PAM_SUCCESS) {
fprintf(stdout, "Authenticated\n");
} else {
fprintf(stdout, "Not Authenticated\n");
}

if (pam_end(pamh,retval) != PAM_SUCCESS)
pamh = NULL;
}


PAM文件如下所示:

auth            required        pam_unix.so
account required pam_unix.so


使用正确的密码运行它:

./a.o kuku
Password:
user: kuku
password: (null)
Authenticated


使用不正确的密码运行它:

./a.o kuku
Password:
user: kuku
password: (null)
Not Authenticated


任何想法 ?

最佳答案

我认为pam_get_line调用应为:

 pam_get_item(pamh, PAM_AUTHTOK, (const void **)&get_pass);
pam_get_item(pamh, PAM_USER, (const void **)&get_user);

关于c - 如何在PAM应用程序中捕获密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53869218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com