linux password重定向stdin 【用于在程序中修改系统密码】

今天  因为项目的需求,希望能通过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]#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值