免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1919 | 回复: 2
打印 上一主题 下一主题

修改一个用户的密码影响其它用户的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-09-08 12:39 |只看该作者
明明是修改的admin用户,怎么会连root也被修改了?

论坛徽章:
0
3 [报告]
发表于 2008-09-08 16:36 |只看该作者
那位大哥帮忙看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP