在C程序中使用PAM来更新用户密码

时间:2015-07-30 20:37:42

标签: c linux passwords pam

我正在创建一个更新用户密码的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_tpam_conv,但我不确定如何做到这一点,也不知道最终会如何发送信息到pam_chauthtok()

我保证,我已经google了很多,而且我正在努力,我现在非常迷失。如果我说或写的内容没有意义,请询问澄清。我实际上是C的新手,所以如果有任何明显的语法错误我都会错过,那就是原因。

0 个答案:

没有答案