- 论坛徽章:
- 0
|
我在修改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 编辑 ] |
|