繁体   English   中英

如何使用Linux系统调用在C中更改用户密码?

[英]How do I change a user password in C using Linux system calls?

我正在尝试编写一个C程序来使用Linux系统调用来更改用户密码。 我已经尝试使用/etc/passwd/etc/shadow文件,但由于密码已加密,我遇到了问题,你可以帮我解决这个问题吗?

void main(int argc,char ** argv){

uid_t uid;

struct passwd *pw;

uid = getuid();

if (argc > 1)
    pw = getpwnam(argv[1]);
else
    pw = getpwuid(uid);
//system("passwd");
//printf("%i",execl("/usr/bin/passwd","passwd",pw->pw_name)); //here I tried to use execl but it returns error

}

我使用系统(“passwd”),但我不认为我的老师会接受。 其余的我只是想了解getpw ......的东西,这并不重要。

您可以尝试使用putpwent 正如Jonathan Leffler在评论中所说,如果你想更新影子文件,你需要putpent

但是,最简单且可能最便携的方法是通过system(3)popen(3)调用passwd

我从Windows和OS X开发的后台开始在Linux上开始编写软件时学到的第一件事就是命令行实用程序被接受,而不是避开。 即使事情有使用C API或命令行实用程序的选项,它往往更聪明,更可靠forkexec (不要popen ,除非你不在乎检查返回代码是否是0!)而不是使用C api。

实际上,调用命令行实用程序与调用C api没有什么不同, 除非您需要在应用程序中完成所有性能的最后一点。 它实际上是一个API,其中函数名称是实用程序名称,参数是命令行参数。

所以回答你的问题:尝试exec passwd ,它会照顾你所有的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM