本文通过编程实现添加FTP用户以及为用户分配权限.具体过程是:添加系统用户,并将此用户加到FTP用户列表中,为此用户分配FTP权限.
通过前面的文章,我们知道了如何添加系统用户,及如何将此用户加到FTP用户列表中.设置用户FTP权限的方法是在注册表系统用户的子键下新建一个叫做FTPD的子键,为其添加两个变量,其中一个字符串类型变量名字叫Home,它的值就是此用户的FTP默认目录,例如:"/hard disk/FtpRoot", 另一个DWORD类型的变量名字叫Permissions,从名字可以知道是设置用户权限的地方.
首先介绍一个在本文中使用的操作注册表的类:CReg V1.1.0,
部分代码如下:
BOOL CFtpToolsDlg::OnBtnAdd()
{
CAddUserDlg dlg( this );
if (IDOK == dlg.DoModal())
{
if (NULL != m_listUser.Find(dlg.m_strName))
{
AfxMessageBox(L " User already in list " );
return TRUE;
}
pSetUser(dlg.m_strName, dlg.m_strPwd);
m_listUser.AddTail(dlg.m_strName);
m_ctlListUser.InsertItem(m_dwUserCount, dlg.m_strName);
m_dwUserCount ++ ;
UpdateData(FALSE);
CReg reg(HKEY_LOCAL_MACHINE, TEXT( " Comm/FTPD " ));
TCHAR byBuf[ 256 ] = { 0 };
DWORD dwLen = 255 ;
reg.GetValueSZ(TEXT( " UserList " ), byBuf, 255 );
wcscat(byBuf, L " ; " );
wcscat(byBuf, LPCTSTR(dlg.m_strName));
reg.SetMultiSZ(TEXT( " UserList " ), byBuf, sizeof (TCHAR) * wcslen(byBuf));
reg.Reset();
CString strTmp = L " Comm/Security/UserAccounts/ " ;
strTmp += dlg.m_strName;
strTmp += " /FTPD " ;
reg.Create(HKEY_LOCAL_MACHINE, LPCTSTR(strTmp));
reg.SetDW(TEXT( " Permissions " ), 3 );
reg.SetSZ(TEXT( " Home " ), LPCTSTR(strRegFtp));
}
return TRUE;
}
void CFtpToolsDlg::OnBtnDelete()
{
POSITION pos = m_ctlListUser.GetFirstSelectedItemPosition();
if (NULL == pos)
{
return ;
}
int nPos = m_ctlListUser.GetNextSelectedItem(pos);
CString strName = m_ctlListUser.GetItemText(nPos, 0 );
m_ctlListUser.DeleteItem(nPos);
pos = m_listUser.Find(strName);
m_listUser.RemoveAt(pos);
pDelUser(strName);
CReg reg(HKEY_LOCAL_MACHINE, TEXT( " Comm/FTPD " ));
TCHAR byBuf[ 256 ] = { 0 };
DWORD dwLen = 255 ;
reg.GetValueSZ(TEXT( " UserList " ), byBuf, 255 );
strName = L " ; " + strName;
CString strTmp = byBuf;
nPos = strTmp.Find(strName);
if ( - 1 == nPos)
{
return ;
}
strTmp = strTmp.Left(nPos) + strTmp.Right(strTmp.GetLength() - nPos - strName.GetLength());
reg.SetSZ(TEXT( " UserList " ), LPCTSTR(strTmp), sizeof (TCHAR) * wcslen(byBuf));
}
{
CAddUserDlg dlg( this );
if (IDOK == dlg.DoModal())
{
if (NULL != m_listUser.Find(dlg.m_strName))
{
AfxMessageBox(L " User already in list " );
return TRUE;
}
pSetUser(dlg.m_strName, dlg.m_strPwd);
m_listUser.AddTail(dlg.m_strName);
m_ctlListUser.InsertItem(m_dwUserCount, dlg.m_strName);
m_dwUserCount ++ ;
UpdateData(FALSE);
CReg reg(HKEY_LOCAL_MACHINE, TEXT( " Comm/FTPD " ));
TCHAR byBuf[ 256 ] = { 0 };
DWORD dwLen = 255 ;
reg.GetValueSZ(TEXT( " UserList " ), byBuf, 255 );
wcscat(byBuf, L " ; " );
wcscat(byBuf, LPCTSTR(dlg.m_strName));
reg.SetMultiSZ(TEXT( " UserList " ), byBuf, sizeof (TCHAR) * wcslen(byBuf));
reg.Reset();
CString strTmp = L " Comm/Security/UserAccounts/ " ;
strTmp += dlg.m_strName;
strTmp += " /FTPD " ;
reg.Create(HKEY_LOCAL_MACHINE, LPCTSTR(strTmp));
reg.SetDW(TEXT( " Permissions " ), 3 );
reg.SetSZ(TEXT( " Home " ), LPCTSTR(strRegFtp));
}
return TRUE;
}
void CFtpToolsDlg::OnBtnDelete()
{
POSITION pos = m_ctlListUser.GetFirstSelectedItemPosition();
if (NULL == pos)
{
return ;
}
int nPos = m_ctlListUser.GetNextSelectedItem(pos);
CString strName = m_ctlListUser.GetItemText(nPos, 0 );
m_ctlListUser.DeleteItem(nPos);
pos = m_listUser.Find(strName);
m_listUser.RemoveAt(pos);
pDelUser(strName);
CReg reg(HKEY_LOCAL_MACHINE, TEXT( " Comm/FTPD " ));
TCHAR byBuf[ 256 ] = { 0 };
DWORD dwLen = 255 ;
reg.GetValueSZ(TEXT( " UserList " ), byBuf, 255 );
strName = L " ; " + strName;
CString strTmp = byBuf;
nPos = strTmp.Find(strName);
if ( - 1 == nPos)
{
return ;
}
strTmp = strTmp.Left(nPos) + strTmp.Right(strTmp.GetLength() - nPos - strName.GetLength());
reg.SetSZ(TEXT( " UserList " ), LPCTSTR(strTmp), sizeof (TCHAR) * wcslen(byBuf));
}
本文介绍了一种通过编程方式添加FTP用户并分配权限的方法。主要步骤包括:添加系统用户、将其加入FTP用户列表以及通过注册表设置用户的FTP默认目录和权限。
139

被折叠的 条评论
为什么被折叠?



