789 lines
15 KiB
C++
789 lines
15 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
|
||
|
vdir.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
FTP Virtual Directory Properties dialog
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ronald Meijer (ronaldm)
|
||
|
|
||
|
Project:
|
||
|
|
||
|
Internet Services Manager
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
//
|
||
|
// Include Files
|
||
|
//
|
||
|
#include "stdafx.h"
|
||
|
#include "fscfg.h"
|
||
|
#include "vdir.h"
|
||
|
#include "dirbrows.h"
|
||
|
|
||
|
#include <lmcons.h>
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Directory Properties Page
|
||
|
//
|
||
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
|
|
||
|
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CFtpDirectoryPage, CInetPropertyPage)
|
||
|
|
||
|
|
||
|
|
||
|
CFtpDirectoryPage::CFtpDirectoryPage(
|
||
|
IN CInetPropertySheet * pSheet,
|
||
|
IN BOOL fHome
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Constructor for directory property page
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
CInetPropertySheet * pSheet : Sheet pointer
|
||
|
BOOL fHome : TRUE if this is a home directory
|
||
|
|
||
|
|
||
|
--*/
|
||
|
: CInetPropertyPage(CFtpDirectoryPage::IDD, pSheet,
|
||
|
fHome ? IDS_TAB_HOME_DIRECTORY : IDS_TAB_VIRTUAL_DIRECTORY),
|
||
|
m_fHome(fHome),
|
||
|
m_fOriginallyUNC(FALSE)
|
||
|
{
|
||
|
VERIFY(m_strPathPrompt.LoadString(IDS_PATH));
|
||
|
VERIFY(m_strSharePrompt.LoadString(IDS_SHARE));
|
||
|
|
||
|
#if 0 // Keep Class-wizard happy
|
||
|
|
||
|
//{{AFX_DATA_INIT(CFtpDirectoryPage)
|
||
|
m_nPathType = RADIO_DIRECTORY;
|
||
|
m_nUnixDos = 0;
|
||
|
m_fRead = FALSE;
|
||
|
m_fWrite = FALSE;
|
||
|
m_fLogAccess = FALSE;
|
||
|
m_strPath = _T("");
|
||
|
m_strDefaultDocument = _T("");
|
||
|
m_strFooter = _T("");
|
||
|
m_fBrowsingAllowed = FALSE;
|
||
|
m_fEnableDefaultDocument = FALSE;
|
||
|
m_fEnableFooter = FALSE;
|
||
|
m_dwAccessPerms = 0;
|
||
|
//}}AFX_DATA_INIT
|
||
|
|
||
|
#endif // 0
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
CFtpDirectoryPage::~CFtpDirectoryPage()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Destructor
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
N/A
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
N/A
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::DoDataExchange(
|
||
|
IN CDataExchange * pDX
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Initialise/Store control Data
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
CDataExchange * pDX : DDX/DDV struct
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CInetPropertyPage::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CFtpDirectoryPage)
|
||
|
DDX_Check(pDX, IDC_CHECK_READ, m_fRead);
|
||
|
DDX_Check(pDX, IDC_CHECK_WRITE, m_fWrite);
|
||
|
DDX_Check(pDX, IDC_CHECK_LOG_ACCESS, m_fLogAccess);
|
||
|
DDX_Control(pDX, IDC_CHECK_LOG_ACCESS, m_check_LogAccess);
|
||
|
DDX_Control(pDX, IDC_CHECK_WRITE, m_check_Write);
|
||
|
DDX_Control(pDX, IDC_CHECK_READ, m_check_Read);
|
||
|
DDX_Control(pDX, IDC_BUTTON_EDIT_PATH_TYPE, m_button_AddPathType);
|
||
|
DDX_Control(pDX, IDC_BUTTON_BROWSE, m_button_Browse);
|
||
|
DDX_Control(pDX, IDC_EDIT_PATH, m_edit_Path);
|
||
|
DDX_Control(pDX, IDC_RADIO_DIR, m_radio_Dir);
|
||
|
DDX_Control(pDX, IDC_STATIC_PATH, m_static_PathPrompt);
|
||
|
DDX_Radio(pDX, IDC_RADIO_DIR, m_nPathType);
|
||
|
DDX_Radio(pDX, IDC_RADIO_UNIX, m_nUnixDos);
|
||
|
//}}AFX_DATA_MAP
|
||
|
|
||
|
DDX_Control(pDX, IDC_RADIO_UNC, m_radio_Unc);
|
||
|
DDX_Text(pDX, IDC_EDIT_PATH, m_strPath);
|
||
|
m_strPath.TrimLeft();
|
||
|
DDV_MinMaxChars(pDX, m_strPath, 0, MAX_PATH);
|
||
|
|
||
|
if (pDX->m_bSaveAndValidate)
|
||
|
{
|
||
|
// Make sure a field names are correct
|
||
|
//
|
||
|
if (m_nPathType == RADIO_NETDIRECTORY)
|
||
|
{
|
||
|
DDX_Text(pDX, IDC_EDIT_PATH, m_strPath);
|
||
|
m_strPath.TrimLeft();
|
||
|
DDV_MinMaxChars(pDX, m_strPath, 0, MAX_PATH);
|
||
|
|
||
|
if (!IsUNCName(m_strPath))
|
||
|
{
|
||
|
::AfxMessageBox(IDS_BAD_UNC_PATH);
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
|
||
|
ISSUE: Supposedly this is not necessary...
|
||
|
|
||
|
|
||
|
if (m_strUserName.IsEmpty())
|
||
|
{
|
||
|
::AfxMessageBox(IDS_ERR_NO_USERNAME);
|
||
|
OnButtonEditPathType();
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
|
||
|
*/
|
||
|
}
|
||
|
else // Local Directory
|
||
|
{
|
||
|
ASSERT(m_nPathType == RADIO_DIRECTORY);
|
||
|
|
||
|
if (!IsMasterInstance())
|
||
|
{
|
||
|
DDV_MinMaxChars(pDX, m_strPath, 1, MAX_PATH);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (m_strPath.IsEmpty())
|
||
|
{
|
||
|
//
|
||
|
// No additional validation necc. on master
|
||
|
// instance.
|
||
|
//
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!IsFullyQualifiedPath(m_strPath) && !IsDevicePath(m_strPath))
|
||
|
{
|
||
|
::AfxMessageBox(IDS_ERR_INVALID_PATH);
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
|
||
|
if (IsLocal())
|
||
|
{
|
||
|
DWORD dwAttr = GetFileAttributes(m_strPath);
|
||
|
if (dwAttr == 0xffffffff || (dwAttr & FILE_ATTRIBUTE_DIRECTORY) == 0)
|
||
|
{
|
||
|
::AfxMessageBox(IDS_ERR_PATH_NOT_FOUND);
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!IsMasterInstance())
|
||
|
{
|
||
|
DDV_MinMaxChars(pDX, m_strPath, 1, MAX_PATH);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::SetStateByType()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Set the state of the dialog by the path type currently selected
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
switch(m_nPathType)
|
||
|
{
|
||
|
case RADIO_DIRECTORY:
|
||
|
DeActivateControl(m_button_AddPathType);
|
||
|
if (IsLocal() && !IsMasterInstance() && HasAdminAccess())
|
||
|
ActivateControl(m_button_Browse);
|
||
|
else
|
||
|
DeActivateControl(m_button_Browse);
|
||
|
m_static_PathPrompt.SetWindowText(m_strPathPrompt);
|
||
|
break;
|
||
|
|
||
|
case RADIO_NETDIRECTORY:
|
||
|
ActivateControl(m_button_AddPathType);
|
||
|
DeActivateControl(m_button_Browse);
|
||
|
m_static_PathPrompt.SetWindowText(m_strSharePrompt);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
ASSERT(FALSE && "Invalid Selection");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::SetPathType(
|
||
|
IN LPCTSTR lpstrPath
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Set path type from given path
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
LPCTSTR lpstrPath : Path string
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
if (::IsUNCName(lpstrPath))
|
||
|
{
|
||
|
m_nPathType = RADIO_NETDIRECTORY;
|
||
|
m_radio_Dir.SetCheck(0);
|
||
|
m_radio_Unc.SetCheck(1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_nPathType = RADIO_DIRECTORY;
|
||
|
m_radio_Unc.SetCheck(0);
|
||
|
m_radio_Dir.SetCheck(1);
|
||
|
}
|
||
|
|
||
|
SetStateByType();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Message Map
|
||
|
//
|
||
|
BEGIN_MESSAGE_MAP(CFtpDirectoryPage, CInetPropertyPage)
|
||
|
//{{AFX_MSG_MAP(CFtpDirectoryPage)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_EDIT_PATH_TYPE, OnButtonEditPathType)
|
||
|
ON_BN_CLICKED(IDC_RADIO_DIR, OnRadioDir)
|
||
|
ON_BN_CLICKED(IDC_RADIO_UNC, OnRadioUnc)
|
||
|
//}}AFX_MSG_MAP
|
||
|
|
||
|
ON_EN_CHANGE(IDC_EDIT_ALIAS, OnItemChanged)
|
||
|
ON_EN_CHANGE(IDC_EDIT_PATH, OnItemChanged)
|
||
|
ON_BN_CLICKED(IDC_CHECK_WRITE, OnItemChanged)
|
||
|
ON_BN_CLICKED(IDC_CHECK_READ, OnItemChanged)
|
||
|
ON_BN_CLICKED(IDC_CHECK_LOG_ACCESS, OnItemChanged)
|
||
|
ON_BN_CLICKED(IDC_RADIO_MSDOS, OnItemChanged)
|
||
|
ON_BN_CLICKED(IDC_RADIO_UNIX, OnItemChanged)
|
||
|
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Message Handlers
|
||
|
//
|
||
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::OnItemChanged()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Handle change in data on the item
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
SetModified(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::OnButtonBrowse()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
"Browse" button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ASSERT(IsLocal());
|
||
|
CString str;
|
||
|
m_edit_Path.GetWindowText(str);
|
||
|
|
||
|
CDirBrowseDlg dlgBrowse(this, str);
|
||
|
if (dlgBrowse.DoModal() == IDOK)
|
||
|
{
|
||
|
m_edit_Path.SetWindowText(dlgBrowse.GetFullPath(m_strPath));
|
||
|
SetPathType(m_strPath);
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
CFtpDirectoryPage::OnInitDialog()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
WM_INITDIALOG handler. Initialize the dialog.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE if no focus is to be set automatically, FALSE if the focus
|
||
|
is already set.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CInetPropertyPage::OnInitDialog();
|
||
|
|
||
|
m_button_Browse.EnableWindow(
|
||
|
IsLocal()
|
||
|
&& !IsMasterInstance()
|
||
|
&& HasAdminAccess());
|
||
|
|
||
|
SetPathType(m_strPath);
|
||
|
|
||
|
//
|
||
|
// Directory listing style dependent on whether or not
|
||
|
// this is a home directory
|
||
|
//
|
||
|
ActivateControl(*GetDlgItem(IDC_STATIC_DIRLISTING), m_fHome);
|
||
|
ActivateControl(*GetDlgItem(IDC_RADIO_UNIX), m_fHome);
|
||
|
ActivateControl(*GetDlgItem(IDC_RADIO_MSDOS), m_fHome);
|
||
|
|
||
|
//
|
||
|
// Some items not available on master instance
|
||
|
//
|
||
|
GetDlgItem(IDC_STATIC_PATH_TYPE)->EnableWindow(!IsMasterInstance());
|
||
|
GetDlgItem(IDC_RADIO_DIR)->EnableWindow(
|
||
|
!IsMasterInstance() && HasAdminAccess());
|
||
|
GetDlgItem(IDC_RADIO_UNC)->EnableWindow(
|
||
|
!IsMasterInstance() && HasAdminAccess());
|
||
|
GetDlgItem(IDC_STATIC_PATH)->EnableWindow(
|
||
|
!IsMasterInstance());
|
||
|
GetDlgItem(IDC_EDIT_PATH)->EnableWindow(
|
||
|
!IsMasterInstance() && HasAdminAccess());
|
||
|
GetDlgItem(IDC_BUTTON_EDIT_PATH_TYPE)->EnableWindow(
|
||
|
!IsMasterInstance() && HasAdminAccess());
|
||
|
|
||
|
m_check_Write.EnableWindow(HasAdminAccess());
|
||
|
m_check_Read.EnableWindow(HasAdminAccess());
|
||
|
|
||
|
//
|
||
|
// Store the original value of fUNC of reference later when
|
||
|
// saving out --BoydM
|
||
|
//
|
||
|
m_fOriginallyUNC = (m_nPathType == RADIO_NETDIRECTORY);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::ChangeTypeTo(
|
||
|
IN int nNewType
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description
|
||
|
|
||
|
Change the directory type
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
int nNewType : New radio value
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
int nOldType = m_nPathType;
|
||
|
m_nPathType = nNewType;
|
||
|
|
||
|
if (nOldType == m_nPathType)
|
||
|
{
|
||
|
//
|
||
|
// No change
|
||
|
//
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
OnItemChanged();
|
||
|
SetStateByType();
|
||
|
|
||
|
LPCTSTR lpKeepPath = NULL;
|
||
|
|
||
|
int nID = -1;
|
||
|
switch(m_nPathType)
|
||
|
{
|
||
|
case RADIO_DIRECTORY:
|
||
|
if (IsFullyQualifiedPath(m_strPath) || IsDevicePath(m_strPath))
|
||
|
{
|
||
|
//
|
||
|
// The old path info is acceptable, propose it
|
||
|
// as a default
|
||
|
//
|
||
|
lpKeepPath = m_strPath;
|
||
|
}
|
||
|
|
||
|
nID = IDS_DIRECTORY_MASK;
|
||
|
break;
|
||
|
|
||
|
case RADIO_NETDIRECTORY:
|
||
|
if (IsUNCName(m_strPath))
|
||
|
{
|
||
|
//
|
||
|
// The old path info is acceptable, propose it
|
||
|
// as a default
|
||
|
//
|
||
|
lpKeepPath = m_strPath;
|
||
|
}
|
||
|
|
||
|
nID = IDS_UNC_MASK;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (lpKeepPath != NULL)
|
||
|
{
|
||
|
//
|
||
|
// Restore the old path
|
||
|
//
|
||
|
m_edit_Path.SetWindowText(lpKeepPath);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// Load mask resource, and display
|
||
|
// this in the directory
|
||
|
//
|
||
|
CString str;
|
||
|
VERIFY(str.LoadString(nID));
|
||
|
m_edit_Path.SetWindowText(str);
|
||
|
}
|
||
|
|
||
|
m_edit_Path.SetSel(0,-1);
|
||
|
m_edit_Path.SetFocus();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::OnRadioDir()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
'directory' radio button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ChangeTypeTo(RADIO_DIRECTORY);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::OnRadioUnc()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
'network directory' radio button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ChangeTypeTo(RADIO_NETDIRECTORY);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* virtual */
|
||
|
HRESULT
|
||
|
CFtpDirectoryPage::FetchLoadedValues()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Move configuration data from sheet to dialog controls
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
HRESULT
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CError err;
|
||
|
|
||
|
BEGIN_META_DIR_READ(CFtpSheet)
|
||
|
//
|
||
|
// Use 'm_' notation because the message crackers require it.
|
||
|
//
|
||
|
BOOL m_fDontLog;
|
||
|
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_strAlias);
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_strUserName);
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_strPassword);
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_strPath);
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_dwAccessPerms);
|
||
|
FETCH_DIR_DATA_FROM_SHEET(m_fDontLog);
|
||
|
|
||
|
m_fRead = IS_FLAG_SET(m_dwAccessPerms, MD_ACCESS_READ);
|
||
|
m_fWrite = IS_FLAG_SET(m_dwAccessPerms, MD_ACCESS_WRITE);
|
||
|
m_fLogAccess = !m_fDontLog;
|
||
|
END_META_DIR_READ(err)
|
||
|
|
||
|
BEGIN_META_INST_READ(CFtpSheet)
|
||
|
BOOL m_fDosDirOutput;
|
||
|
|
||
|
FETCH_INST_DATA_FROM_SHEET(m_fDosDirOutput);
|
||
|
m_nUnixDos = m_fDosDirOutput ? RADIO_DOS : RADIO_UNIX;
|
||
|
END_META_INST_READ(err)
|
||
|
|
||
|
m_nPathType = ::IsUNCName(m_strPath)
|
||
|
? RADIO_NETDIRECTORY
|
||
|
: RADIO_DIRECTORY;
|
||
|
|
||
|
//
|
||
|
// Make sure we were passed the right home directory
|
||
|
// flag
|
||
|
//
|
||
|
ASSERT((m_fHome && !::lstrcmp(m_strAlias, g_cszRoot))
|
||
|
|| (!m_fHome && ::lstrcmp(m_strAlias, g_cszRoot)));
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* virtual */
|
||
|
HRESULT
|
||
|
CFtpDirectoryPage::SaveInfo()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Save the information on this property page
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
Error return code
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ASSERT(IsDirty());
|
||
|
|
||
|
TRACEEOLID("Saving W3 virtual directory page now...");
|
||
|
|
||
|
CError err;
|
||
|
|
||
|
SET_FLAG_IF(m_fRead, m_dwAccessPerms, MD_ACCESS_READ);
|
||
|
SET_FLAG_IF(m_fWrite, m_dwAccessPerms, MD_ACCESS_WRITE);
|
||
|
|
||
|
//
|
||
|
// Use m_ notation because the message crackers require them
|
||
|
//
|
||
|
BOOL m_fDontLog = !m_fLogAccess;
|
||
|
BOOL m_fDosDirOutput = (m_nUnixDos == RADIO_DOS);
|
||
|
BOOL fUNC = (m_nPathType == RADIO_NETDIRECTORY);
|
||
|
// BOOL fUserNameWritten = FALSE;
|
||
|
|
||
|
BeginWaitCursor();
|
||
|
BEGIN_META_DIR_WRITE(CFtpSheet)
|
||
|
if (fUNC)
|
||
|
{
|
||
|
// Fix for 380353 -- sergeia
|
||
|
// When user want to change password only the above construction doesn't work
|
||
|
// because flag will be false -- user name is the same and not written!
|
||
|
// STORE_DIR_DATA_ON_SHEET_REMEMBER(m_strUserName, fUserNameWritten)
|
||
|
// if (fUserNameWritten)
|
||
|
// {
|
||
|
STORE_DIR_DATA_ON_SHEET(m_strUserName);
|
||
|
STORE_DIR_DATA_ON_SHEET(m_strPassword);
|
||
|
// }
|
||
|
// endoffix
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (m_fOriginallyUNC)
|
||
|
{
|
||
|
FLAG_DIR_DATA_FOR_DELETION(MD_VR_USERNAME);
|
||
|
FLAG_DIR_DATA_FOR_DELETION(MD_VR_PASSWORD);
|
||
|
}
|
||
|
}
|
||
|
STORE_DIR_DATA_ON_SHEET(m_dwAccessPerms)
|
||
|
STORE_DIR_DATA_ON_SHEET(m_fDontLog)
|
||
|
STORE_DIR_DATA_ON_SHEET(m_strPath)
|
||
|
END_META_DIR_WRITE(err)
|
||
|
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
BEGIN_META_INST_WRITE(CFtpSheet)
|
||
|
STORE_INST_DATA_ON_SHEET(m_fDosDirOutput);
|
||
|
END_META_INST_WRITE(err)
|
||
|
}
|
||
|
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
//
|
||
|
// This page can set the path, which can in theory
|
||
|
// set the error state
|
||
|
//
|
||
|
NotifyMMC();
|
||
|
}
|
||
|
|
||
|
EndWaitCursor();
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CFtpDirectoryPage::OnButtonEditPathType()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
'Connect As..." button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CUserAccountDlg dlg(
|
||
|
QueryServerName(),
|
||
|
m_strUserName,
|
||
|
m_strPassword,
|
||
|
this
|
||
|
);
|
||
|
|
||
|
if (dlg.DoModal() == IDOK)
|
||
|
{
|
||
|
m_strUserName = dlg.m_strUserName;
|
||
|
m_strPassword = dlg.m_strPassword;
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
}
|