当前位置: 技术问答>linux和unix
如何写一段C语言代码对Linux下的用户进行合法性认证?
来源: 互联网 发布时间:2015-08-31
本文导语: 在Linux下,如何用C语言写一段代码对Linux下的用户(即/etc/passwd文件中存在的用户)进行用户名和口令的合法性认证(需要用C语言的函数来写)?请高手指点,急用!!!!!!谢谢!!! | i...
在Linux下,如何用C语言写一段代码对Linux下的用户(即/etc/passwd文件中存在的用户)进行用户名和口令的合法性认证(需要用C语言的函数来写)?请高手指点,急用!!!!!!谢谢!!!
|
if( (oldfp=fopen("/etc/shadow", "r")) == NULL )
result = -2;
if(result == -2)
return result;
if(result == -3)
return result;
rewind(oldfp);
while(!feof(oldfp))
{
memset(line_buf, 0, sizeof(line_buf));
fgets(line_buf, 1024, oldfp);
buf=line_buf;
if( strlen(line_buf) == 0 ) break;
fpart=strsep(&buf, ":");
passwd=strsep(&buf, ":");
if( memcmp(username, fpart, strlen(username)) == 0 )
{
char fn[50];
memset(fn, 0, sizeof(fn));
result = 1;
//printf("user existrn");
memcpy(passwd_old_tmp, passwd, 12);
//printf("passwd_old_tmp is %srn", passwd_old_tmp);
//memcpy(passwd_old_crypt, buf, 34);
encryptpass_old = crypt(passwd_old, passwd_old_tmp);
if(memcmp(encryptpass_old, passwd, min(strlen(passwd),34)) == 0)
{
result = 1;
//printf("passwd %s %d %drn", encryptpass, encryptpass, encryptpass_old);
passwd=encryptpass;
passwd=passwd_tmp;
//printf("passwd %srn", passwd);
//printf("oldpasswd %srn", encryptpass_old);
}
else
{
//printf("pass errorrn");
result = 3;
}
}
}
随便写的 你看看吧
调试过 可用
result = -2;
if(result == -2)
return result;
if(result == -3)
return result;
rewind(oldfp);
while(!feof(oldfp))
{
memset(line_buf, 0, sizeof(line_buf));
fgets(line_buf, 1024, oldfp);
buf=line_buf;
if( strlen(line_buf) == 0 ) break;
fpart=strsep(&buf, ":");
passwd=strsep(&buf, ":");
if( memcmp(username, fpart, strlen(username)) == 0 )
{
char fn[50];
memset(fn, 0, sizeof(fn));
result = 1;
//printf("user existrn");
memcpy(passwd_old_tmp, passwd, 12);
//printf("passwd_old_tmp is %srn", passwd_old_tmp);
//memcpy(passwd_old_crypt, buf, 34);
encryptpass_old = crypt(passwd_old, passwd_old_tmp);
if(memcmp(encryptpass_old, passwd, min(strlen(passwd),34)) == 0)
{
result = 1;
//printf("passwd %s %d %drn", encryptpass, encryptpass, encryptpass_old);
passwd=encryptpass;
passwd=passwd_tmp;
//printf("passwd %srn", passwd);
//printf("oldpasswd %srn", encryptpass_old);
}
else
{
//printf("pass errorrn");
result = 3;
}
}
}
随便写的 你看看吧
调试过 可用
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。