Chinaunix
标题:
修改一个用户的密码影响其它用户的问题
[打印本页]
作者:
qinquan
时间:
2008-09-08 12:08
标题:
修改一个用户的密码影响其它用户的问题
我在修改admin的用户密码的时候,导致其它用户的密码文件也发生了变化
修改前的passwd
root
1$$s/HnWhV4z/xtvVuIG/dET/:0:0:root:/root:/bin/sh
admin
1$$qRPK7m23GJusamGpoGLby/:500:500:admin:/home/admin:/bin/sh
调用我的函数修改admin用户的密码后
admin:®snDhyX38WTc:0:500:admin:/home/admin:/bin/sh
admin
1$$qRPK7m23GJusamGpoGLby/:500:500:admin:/home/admin:/bin/sh
下面是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>
#include <time.h>
#define PASSWDPATH "/etc/passwd"
#define PASSWDSALT 255
int set_passwd(const char *username,const char *newpasswd)
{
FILE *fp;
struct passwd *user;
char salt[2];
int currtime;
char cryptpass[13];
char *pcryptpass;
pcryptpass=cryptpass;
if(!(fp=fopen(PASSWDPATH,"r+"
))
{
printf("Error: Open file %s failed.\n",PASSWDPATH);
return 1;
}
memset(salt,0x00,sizeof(salt));
currtime=time(NULL);
srand(currtime);
salt[0]=(char)( rand()%(PASSWDSALT+1) );
salt[1]=(char)( rand()%(PASSWDSALT+1) );
pcryptpass=crypt(newpasswd,salt);
printf("password crypt with crypt function:%s\n",pcryptpass);
if( (user=getpwnam(username))!=NULL )
{
strcpy(user->pw_passwd,pcryptpass);
putpwent(user,fp);
}
fclose(fp);
return 0;
}
int main(int argc,char *argv)
{
set_passwd("admin","12345"
;
}
这是什么原因了?
另外我的加密采用的系统的crypt()函数,但是密码长度最多13位,有什么办法能够生成linux系统的那种密码文件了?
[
本帖最后由 qinquan 于 2008-9-8 12:09 编辑
]
作者:
qinquan
时间:
2008-09-08 12:39
明明是修改的admin用户,怎么会连root也被修改了?
作者:
qinquan
时间:
2008-09-08 16:36
那位大哥帮忙看看
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2