簡體   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