Chinaunix

标题: 修改一个用户的密码影响其它用户的问题 [打印本页]

作者: qinquan    时间: 2008-09-08 12:08
标题: 修改一个用户的密码影响其它用户的问题
我在修改admin的用户密码的时候,导致其它用户的密码文件也发生了变化
修改前的passwd
root1$$s/HnWhV4z/xtvVuIG/dET/:0:0:root:/root:/bin/sh
admin1$$qRPK7m23GJusamGpoGLby/:500:500:admin:/home/admin:/bin/sh
调用我的函数修改admin用户的密码后
admin:®snDhyX38WTc:0:500:admin:/home/admin:/bin/sh
admin1$$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