亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usermanager.cpp

?? 用套接字實現的ftp文件傳輸源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************/
/*																*/
/*  UserManager.cpp												*/
/*																*/
/*  Implementation of the CUserManager class.					*/
/*																*/
/*  Programmed by Pablo van der Meer							*/
/*  Based partially on and inspired by FileZilla Server.		*/
/*																*/
/*  Copyright Pablo Software Solutions 2002						*/
/*	http://www.pablovandermeer.nl								*/
/*																*/
/*  Last updated: 21 july 2002									*/
/*																*/
/****************************************************************/


#include "stdafx.h"
#include "FTPserverApp.h"
#include "UserManager.h"

extern CFTPServerApp theApp;

IMPLEMENT_SERIAL(CDirectory, CObject, 1)

CDirectory::CDirectory()
{
}

CDirectory::~CDirectory()
{
}

void CDirectory::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// 'store' data
		ar << m_strDir;
		ar << m_strAlias;
		ar << m_bAllowDownload;
		ar << m_bAllowUpload;
		ar << m_bAllowRename;
		ar << m_bAllowDelete;
		ar << m_bAllowCreateDirectory;
		ar << m_bIsHomeDir;
	}
	else
	{
		// 'load' data
		ar >> m_strDir;
		ar >> m_strAlias;
		ar >> m_bAllowDownload;
		ar >> m_bAllowUpload;
		ar >> m_bAllowRename;
		ar >> m_bAllowDelete;
		ar >> m_bAllowCreateDirectory;
		ar >> m_bIsHomeDir;
	}
}


template <> void AFXAPI SerializeElements <CDirectory> (CArchive& ar, CDirectory* pNewDirectories, int nCount)
{
    for (int i = 0; i < nCount; i++, pNewDirectories++)
    {
        // Serialize each CDirectory object
        pNewDirectories->Serialize(ar);
    }
}


/* Copy-constructor */
CDirectory::CDirectory(const CDirectory &dir)
{
	m_strDir = dir.m_strDir;
	m_strAlias = dir.m_strAlias;
	m_bAllowDownload = dir.m_bAllowDownload;
	m_bAllowUpload = dir.m_bAllowUpload;
	m_bAllowRename = dir.m_bAllowRename;
	m_bAllowDelete = dir.m_bAllowDelete;
	m_bAllowCreateDirectory = dir.m_bAllowCreateDirectory;
	m_bIsHomeDir = dir.m_bIsHomeDir;
}

/* = operator definition */
CDirectory& CDirectory::operator=(const CDirectory &dir)
{
	if (&dir != this)
	{
		m_strDir = dir.m_strDir;
		m_strAlias = dir.m_strAlias;
		m_bAllowDownload = dir.m_bAllowDownload;
		m_bAllowUpload = dir.m_bAllowUpload;
		m_bAllowRename = dir.m_bAllowRename;
		m_bAllowDelete = dir.m_bAllowDelete;
		m_bAllowCreateDirectory = dir.m_bAllowCreateDirectory;
		m_bIsHomeDir = dir.m_bIsHomeDir;
	}
	return *this;
}


IMPLEMENT_SERIAL(CUser, CObject, 1)

CUser::CUser()
{
	m_bAccountDisabled = FALSE;
}

CUser::~CUser()
{
}

void CUser::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// 'store' data
		ar << m_strName;
		ar << m_strPassword;
		ar << m_bAccountDisabled;
	}
	else
	{
		// 'load' data
		ar >> m_strName;
		ar >> m_strPassword;
		ar >> m_bAccountDisabled;
	}
	// serialize directories
	m_DirectoryArray.Serialize(ar);
}


/* Copy-constructor */
CUser::CUser(const CUser &user)
{
	m_strName = user.m_strName;
	m_strPassword = user.m_strPassword;
	m_bAccountDisabled = user.m_bAccountDisabled;
	for (int i=0; i < user.m_DirectoryArray.GetSize(); i++)
		m_DirectoryArray.Add(user.m_DirectoryArray[i]);
}

/* = operator definition */
CUser& CUser::operator=(const CUser &user)
{
	if (&user != this)
	{
		m_strName = user.m_strName;
		m_strPassword = user.m_strPassword;
		m_bAccountDisabled = user.m_bAccountDisabled;
		for (int i=0; i < user.m_DirectoryArray.GetSize(); i++)
			m_DirectoryArray.Add(user.m_DirectoryArray[i]);
	}
	return *this;
}



CUserManager::CUserManager()
{
	GetAppDir(m_strFilename);
	m_strFilename += "users.dat";
}

CUserManager::~CUserManager()
{

}


/********************************************************************/
/*																	*/
/* Function name : Serialize										*/
/* Description   : Call this function to store/load the user data	*/
/*																	*/
/********************************************************************/
BOOL CUserManager::Serialize(BOOL bStoring)
{
	static const TCHAR* lpszSignature = _T("Li Software Solutions - StoreObject");

	CFile file;

	if (file.Open(m_strFilename, bStoring ? CFile::modeWrite|CFile::modeCreate : CFile::modeRead))
	{
		TRY
		{
			CString str; 
			CArchive ar(&file, bStoring ? CArchive::store : CArchive::load);
			
			if (bStoring)
			{
				// save signature
				ar << CString(lpszSignature);

				// Save the changed user details
				for (int i=0; i < m_UserArray.GetSize(); i++)
				{
					m_UserArray[i].Serialize(ar);
				}

				ar.Flush();
			}
			else
			{
				// load signature
				ar >> str;
				// if this the file we are looking for ?
				if (str.Compare(lpszSignature) == 0)
				{
					int nCount=0;

					while(!ar.IsBufferEmpty())
					{
						CUser user;

						// get user data
						user.Serialize(ar);
						
						// add user to array
						m_UserArray.Add(user);
					}
				}
			}
			ar.Close();
			file.Close();
		}
		CATCH_ALL(e)
		{
			// catch all exceptions that might happen ...
			return FALSE;
		}
		END_CATCH_ALL
	}
	return TRUE;
}


/********************************************************************/
/*																	*/
/* Function name : ConvertPathToLocal								*/
/* Description   : Convert relative path to local path				*/
/*																	*/
/********************************************************************/
BOOL CUserManager::ConvertPathToLocal(LPCTSTR lpszUser, CString &strDirectoryIn, CString &strDirectoryOut)
{
	CUser user;
	if (!GetUser(lpszUser, user))
	{
		// user not valid
		return FALSE;
	}

	CStringList partList;
	CString strSub;
	int nCount=0;

	// split path in parts
	while(AfxExtractSubString(strSub, strDirectoryIn, nCount++, '/'))
	{
		if (!strSub.IsEmpty())
			partList.AddTail(strSub);
	}
	
	// search for home directory
	for (int i=0; i<user.m_DirectoryArray.GetSize(); i++)
	{
		if (user.m_DirectoryArray[i].m_bIsHomeDir)
		{
			CString strHomeDir = user.m_DirectoryArray[i].m_strDir;
			while(!partList.IsEmpty())
			{
				CString strPart = partList.GetHead();
				partList.RemoveHead();

				CString strCheckDir;
				
				if (strPart == "..")
				{
					// go back one level
					int nPos = strHomeDir.ReverseFind('\\');
					if (nPos != -1)
					{
						strCheckDir = strHomeDir.Left(nPos);
					}
				}
				else
				{
					strCheckDir = strHomeDir + "\\" + strPart;
				}
			
				// does directory exist ?
				if (FileExists(strCheckDir, TRUE))
				{
					strHomeDir = strCheckDir;
				}
				else
				// does file exist ?
				if (FileExists(strCheckDir, FALSE))
				{
					strHomeDir = strCheckDir;
				}
				else
				{
					BOOL bFound = FALSE;

					// virtual directories exist only in the root
					if (strHomeDir == user.m_DirectoryArray[i].m_strDir)
					{
						// maybe it's a virtual directory
						for (int j=0; j<user.m_DirectoryArray.GetSize(); j++)
						{
							if (i != j && (user.m_DirectoryArray[j].m_strAlias.CompareNoCase(strPart) == 0))
							{
								bFound = TRUE;
								strHomeDir = user.m_DirectoryArray[j].m_strDir; 
								break;
							}
						}
					}
					if (!bFound)
					{
						// directory not found
						return FALSE;
					}
				}
			}
			
			// successfully converted directory
			strDirectoryOut = strHomeDir;
			return TRUE;
		}
	}
	// no home directory found
	return FALSE;
}


/********************************************************************/
/*																	*/
/* Function name : CheckAccessRights								*/
/* Description   : Check if user has access to specified directory.	*/
/*																	*/
/********************************************************************/
BOOL CUserManager::CheckAccessRights(LPCTSTR lpszUser, LPCTSTR lpszDirectory, int nOption)
{
	CUser user;
	if (!GetUser(lpszUser, user))
	{
		// user not valid
		return FALSE;
	}

	// start with full path
	CString strCheckDir = lpszDirectory;

	while(!strCheckDir.IsEmpty())
	{
		// search for a matching part
		for (int i=0; i<user.m_DirectoryArray.GetSize(); i++)
		{
			CString strPath1 = strCheckDir;
			strPath1.TrimRight("\\");
			CString strPath2 = user.m_DirectoryArray[i].m_strDir;
			strPath2.TrimRight("\\");

			// found a match ?
			if (strPath1.CompareNoCase(strPath2) == 0)
			{
				// check file access rights
				if (((!user.m_DirectoryArray[i].m_bAllowDownload) && (nOption == FTP_DOWNLOAD)) ||
					((!user.m_DirectoryArray[i].m_bAllowUpload) && (nOption == FTP_UPLOAD)) ||
					((!user.m_DirectoryArray[i].m_bAllowRename) && (nOption == FTP_RENAME)) ||
					((!user.m_DirectoryArray[i].m_bAllowDelete) && (nOption == FTP_DELETE)) ||
					((!user.m_DirectoryArray[i].m_bAllowCreateDirectory) && (nOption == FTP_CREATE_DIR)))
				{
					return FALSE;
				}
				return TRUE;
			}
		}
		int nPos = strCheckDir.ReverseFind('\\');
		if (nPos != -1)
		{
			// strip subdir 
			strCheckDir = strCheckDir.Left(nPos);
		}
		else
		{
			// we're done
			strCheckDir.Empty();
		}
	} 
	// users has no rights to this directory
	return FALSE;
}


/********************************************************************/
/*																	*/
/* Function name : ChangeDirectory									*/
/* Description   : Change to specified directory					*/
/*																	*/
/********************************************************************/
int CUserManager::ChangeDirectory(LPCTSTR lpszUser, CString &strCurrentdir, CString &strChangeTo)
{
	// make unix style
	strChangeTo.Replace("\\","/");
	while(strChangeTo.Replace("//","/"));
	strChangeTo.TrimRight("/");

	// now looks something like this: 
	// ""				= root
	// "/mydir/apps"	= absolute path
	// "mydir/apps"		= relative path

	if (strChangeTo == "")
	{
		// goto root
		strChangeTo = "/";
	}
	else
	{
		// first character '/' ?
		if (strChangeTo.Left(1) != "/")
		{ 
			// client specified a path relative to their current path
			strCurrentdir.TrimRight("/");
			strChangeTo = strCurrentdir + "/" + strChangeTo;
		}
	}
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩一区二区| 亚洲综合在线免费观看| 亚洲手机成人高清视频| 美国十次综合导航| 91在线精品秘密一区二区| 精品少妇一区二区三区免费观看| 中文字幕一区二区三区不卡在线 | 亚洲精品国产视频| 久久se这里有精品| 欧美日韩精品高清| 亚洲色图第一区| 成人一区在线观看| 久久只精品国产| 毛片一区二区三区| 欧美日韩国产精选| 亚洲最快最全在线视频| 成人av小说网| 国产午夜精品福利| 国产经典欧美精品| 欧美一区二区三区四区五区 | 久久精品99久久久| 欧美美女网站色| 亚洲午夜久久久久中文字幕久| av中文字幕不卡| 国产亚洲美州欧州综合国| 久久国产成人午夜av影院| 欧美一区二区三区日韩视频| 亚洲成av人片在线| 欧美日韩日日夜夜| 三级欧美韩日大片在线看| 欧美日韩中文字幕精品| 日本在线观看不卡视频| 欧美电影一区二区| 石原莉奈一区二区三区在线观看| 91精品婷婷国产综合久久| 午夜日韩在线观看| 欧美一卡2卡3卡4卡| 日本美女一区二区| 日韩一区二区三区四区| 激情综合色丁香一区二区| 久久久精品日韩欧美| 国产成人av一区二区三区在线 | 午夜婷婷国产麻豆精品| 欧美在线啊v一区| 亚洲国产精品久久久久秋霞影院| 欧美日韩午夜影院| 精品在线播放午夜| 欧美国产在线观看| 色嗨嗨av一区二区三区| 国产精品久久久久久久久免费桃花| 国产在线精品视频| 久久精品一区二区三区不卡 | 粗大黑人巨茎大战欧美成人| 中文字幕欧美一区| 欧美日韩中文国产| 极品美女销魂一区二区三区| 国产精品久久久久久久久晋中| 一本到高清视频免费精品| 偷偷要91色婷婷| 国产欧美日韩一区二区三区在线观看| 91麻豆免费观看| 免费欧美在线视频| 日本一区二区高清| 337p亚洲精品色噜噜| 成人午夜视频在线| 亚洲成人久久影院| 中文字幕国产一区二区| 欧美色综合天天久久综合精品| 奇米影视一区二区三区| 国产精品色在线| 欧美日韩精品一区二区天天拍小说| 麻豆国产精品一区二区三区 | 色噜噜狠狠色综合欧洲selulu| 天堂蜜桃一区二区三区| 国产欧美日韩综合精品一区二区 | 国产亚洲精品免费| 欧美手机在线视频| 国产99一区视频免费| 青草国产精品久久久久久| 中文字幕亚洲一区二区va在线| 91精品国产色综合久久不卡蜜臀| 成人免费av在线| 秋霞电影一区二区| 自拍偷在线精品自拍偷无码专区 | 久久电影网站中文字幕| 中文字幕日本乱码精品影院| 日韩欧美国产综合| 欧美性一二三区| 99久久国产综合精品麻豆| 精品一区二区三区香蕉蜜桃 | 欧美性受xxxx| 成+人+亚洲+综合天堂| 国产一区二区调教| 日韩在线一二三区| 亚洲资源在线观看| 亚洲欧洲精品天堂一级| 国产欧美一区二区精品忘忧草 | 日韩免费看的电影| 91成人在线观看喷潮| www.日本不卡| 国产成人精品一区二区三区网站观看| 亚洲高清视频中文字幕| 亚洲精品少妇30p| 一色屋精品亚洲香蕉网站| 精品福利在线导航| 精品对白一区国产伦| 欧美一区二区三区免费在线看| 日本久久精品电影| 99精品在线免费| 91丨九色丨蝌蚪丨老版| 99久久久无码国产精品| 91在线你懂得| 欧美在线短视频| 欧美性一区二区| 欧美日韩国产美女| 日韩午夜中文字幕| 精品国产a毛片| 国产午夜精品一区二区三区四区| 久久午夜国产精品| 久久精品视频免费| 中文字幕国产一区| 亚洲精品视频观看| 婷婷丁香激情综合| 蜜桃av噜噜一区二区三区小说| 日韩av电影免费观看高清完整版 | hitomi一区二区三区精品| 成人一级黄色片| 99久久婷婷国产| 91福利在线导航| 欧美精品色综合| 欧美成人午夜电影| 国产欧美日韩在线| 亚洲乱码国产乱码精品精小说| 最新不卡av在线| 日日夜夜一区二区| 国产一区二区三区最好精华液| 99视频在线精品| 欧美综合欧美视频| 91精品免费在线观看| 国产色91在线| 亚洲激情成人在线| 香蕉成人啪国产精品视频综合网| 美洲天堂一区二卡三卡四卡视频| 狠狠狠色丁香婷婷综合激情| 成人av在线电影| 777亚洲妇女| 国产精品理论片在线观看| 亚洲国产精品自拍| 国产曰批免费观看久久久| 99精品在线免费| 日韩欧美一区电影| 国产精品成人在线观看| 日日摸夜夜添夜夜添精品视频| 精品中文字幕一区二区| 色婷婷综合久久久中文一区二区 | 亚洲一区影音先锋| 久久精品二区亚洲w码| 色综合久久综合网97色综合| 在线91免费看| 欧美极品少妇xxxxⅹ高跟鞋 | 国产suv一区二区三区88区| 99久久精品免费看| 日韩精品综合一本久道在线视频| 成人免费小视频| 国产在线视视频有精品| 欧美日韩日本视频| 中文字幕亚洲综合久久菠萝蜜| 精品在线观看视频| 欧美精品在线观看播放| 亚洲免费观看视频| 国产精品一区二区你懂的| 欧美放荡的少妇| 亚洲免费av在线| 99久久综合狠狠综合久久| 日韩欧美在线影院| 亚洲午夜国产一区99re久久| 99久久精品一区二区| 久久久国产一区二区三区四区小说| 三级成人在线视频| 欧美视频一区二区在线观看| 亚洲人成网站精品片在线观看| 精品在线你懂的| 欧美大片拔萝卜| 免费观看91视频大全| 欧美另类一区二区三区| 亚洲成人激情综合网| 欧美视频一二三区| 一区二区三区免费看视频| 成人精品鲁一区一区二区| 精品电影一区二区三区| 老司机精品视频线观看86| 91精品国产综合久久国产大片| 亚洲午夜激情av| 欧美日韩精品欧美日韩精品一 | 欧美v国产在线一区二区三区| 亚洲高清不卡在线观看| 欧美婷婷六月丁香综合色| 一区二区三区四区不卡视频 | jlzzjlzz国产精品久久| 国产精品免费视频一区|