今天 因为项目的需求,希望能通过C程序修改 使用者的密码,而不是通过终端,在GOOGLE了半天后
最开始是希望能找到passwd的源码从而不通过命令调用修改,然而始终是比较困难,后来不知道在哪里找到了对应的源码包【至于在那里找,可自己GOOGLE -_- 】
shadow-4.0.3.tar
可惜修改密码的函数并不好找 'v'
后来偶然发现可从定向passwd的输入:
http://www.lslnet.com/linux/f/docs1/i21/big5196970.htm
但是他上面的程序并不正确:
1、你的程序要有足夠的權限改GUEST的密碼
2、execl之後,你的程序就完全被改了,你應該用fork一個新進程來做這事。
3、既然又FORK,又EXECL,何不popen呢?
不說其他的,就說說execl,你的程序只有execl執行失敗了才會走到下面這裡:
write( from[1], pass, sizeof(pass));
write( from[1], pass, sizeof(pass));
如果execl執行成功write根本走不到
他的代码如下:
根据达人提供的思路
3、既然又FORK,又EXECL,何不popen呢?
我写了代码如下:
注意:起初我忘记了加上/n
而导致修改时候显示是成功的,但是并没有修改对:
[root@Mike /down]# ./pwd
Changing password for user mike.
passwd: all authentication tokens updated successfully.
[root@Mike /down]#