⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chkusrpwd.c

📁 linux下的ftp服务端,支持多种ftp版本
💻 C
字号:
#include "chkusrpwd.h"
#include "global.h"
#include <unistd.h>
#include <shadow.h>
#include <pwd.h>



char usr[1024]="";
char pwd[1024]="";


int Chkusrpwd(int sockfd)
{
	
	struct passwd *pw; // used for /etc/passwd
	struct spwd *spw; // used for /etc/shadow
	
	char *passwd;
	char tmp[13];
	char path[PATH_MAX+1];
	
	
	
	if (getuid() != 0) 
	{ 
		/* 只有root有权作此操作 */

		return 0;
	};

	/* 取得/etc/passwd中间对应于本用户的数据结构 */
	
	if ((pw = getpwnam(usr)) == NULL)
	{
		return 0;
	};
	
	/* 取得/etc/shadow中被隐藏的密码 */
	spw = getspnam(usr);
	if (spw == NULL || (passwd = spw->sp_pwdp) == NULL)
	{
		return 0;
	};
	
	/* 取得passwd的前12个字节作为种子 */
	strncpy(tmp,passwd, 12);
	
	/* 判断输入的密码加密后是否与原密码相同 */
	if(strcmp(usr,"ftp")!=0)
	{
		if (strcmp(passwd,crypt(pwd,tmp))!= 0)
		{
			/* 密码错误 */
			return 0;
		};
	}
	
	/* 密码正确,改变程序权限 */
	//setuid(pw->pw_uid);
	setegid(pw->pw_gid);
	seteuid(pw->pw_uid);
	
	/* 获得并进入用户根目录 */
	if (pw->pw_dir) 
		strncpy(path, pw->pw_dir, PATH_MAX);
	else 
		strcpy(path, "/");
	/*if(strcmp(usr,"ftp")==0)
		strcpy(path,"/")*/
	chdir(path);
	
	
	
	return 1;






	

	//Write(sockfd,"230 Login successful. Have fun.\r\n",strlen("230 Login successful. Have fun.\r\n"));
	

}



void GetUsr(char *user)
{
	
	strcpy(usr,user);
	
	return;
}



void GetPwd(int sockfd,char *pass)
{
	
	strcpy(pwd,pass);
	
	
	if(strcmp(usr,"anonymous")==0)
	{
		
		strcpy(usr,"ftp");
		

	}
	

	int flag=0;
	
	flag=Chkusrpwd(sockfd);
	

	if(flag==1)
	{
		
		Write(sockfd,"230 Login successful. Have fun.\r\n",strlen("230 Login successful. Have fun.\r\n"));
		islogin=1;
		if(strcmp(usr,"ftp")==0)
			isany=1;
	}
	else
	{
		
		Write(sockfd,"530 Login incorrect.\r\n",strlen("530 Login incorrect.\r\n"));
		
	}
	return;

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -