Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

232 lines
4.5 KiB

//
// accessdl.cpp : implementation file
//
#include "stdafx.h"
#include "comprop.h"
#include "ipaddr.hpp"
#include "sitesecu.h"
#include "accessdl.h"
#include "dnsnamed.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
enum
{
RADIO_SINGLE = 0,
RADIO_MULTIPLE,
};
//
// CAccessDlg dialog
//
CAccessDlg::CAccessDlg(
BOOL fDenyAccessMode,
CAccess * pAccess,
CWnd* pParent
)
: CDialog(CAccessDlg::IDD, pParent),
m_pAccess(pAccess),
m_fNew(pAccess == NULL),
m_fDenyAccessMode(fDenyAccessMode),
m_strIpAddress(),
m_strNetworkID()
{
if (m_pAccess == NULL)
{
m_pAccess = new CAccess;
m_pAccess->GrantAccess(!m_fDenyAccessMode);
}
if (m_pAccess != NULL)
{
//{{AFX_DATA_INIT(CAccessDlg)
m_nSingleGroup = m_pAccess->IsSingle() ? RADIO_SINGLE : RADIO_MULTIPLE;
//}}AFX_DATA_INIT
}
//
// We can only look at granted items when
// deny by default is on and vice versa
//
ASSERT(m_pAccess->HasAccess() == !m_fDenyAccessMode);
VERIFY(m_strIpAddress.LoadString(IDS_PROMPT_IP_ADDRESS));
VERIFY(m_strNetworkID.LoadString(IDS_PROMPT_NETWORK_ID));
}
void
CAccessDlg::DoDataExchange(
CDataExchange* pDX
)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAccessDlg)
DDX_Control(pDX, IDC_STATIC_IP_ADDRESS, m_static_IpAddress);
DDX_Control(pDX, IDC_BUTTON_DNS, m_button_DNS);
DDX_Control(pDX, IDOK, m_button_OK);
DDX_Control(pDX, IDC_STATIC_SUBNET_MASK, m_static_SubnetMask);
DDX_Radio(pDX, IDC_RADIO_SINGLE, m_nSingleGroup);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_IPA_IPADDRESS, m_ipa_IpAddress);
DDX_Control(pDX, IDC_IPA_SUBNET_MASK, m_ipa_SubnetMask);
}
BEGIN_MESSAGE_MAP(CAccessDlg, CDialog)
//{{AFX_MSG_MAP(CAccessDlg)
ON_BN_CLICKED(IDC_RADIO_MULTIPLE, OnRadioMultiple)
ON_BN_CLICKED(IDC_RADIO_SINGLE, OnRadioSingle)
ON_BN_CLICKED(IDC_BUTTON_DNS, OnButtonDns)
//}}AFX_MSG_MAP
ON_EN_CHANGE(IDC_IPA_IPADDRESS, OnItemChanged)
ON_EN_CHANGE(IDC_IPA_SUBNET_MASK, OnItemChanged)
END_MESSAGE_MAP()
void
CAccessDlg::SetControlStates(
BOOL fSingle
)
{
m_fSingle = fSingle;
m_static_SubnetMask.EnableWindow(!m_fSingle);
m_ipa_SubnetMask.EnableWindow(!m_fSingle);
m_button_DNS.EnableWindow(m_fSingle);
m_static_IpAddress.SetWindowText(m_fSingle
? m_strIpAddress
: m_strNetworkID
);
}
//
// CAccessDlg message handlers
//
BOOL
CAccessDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT(m_pAccess != NULL);
if (m_pAccess == NULL)
{
TRACEEOLID(_T("CAccess is NULL -- aborting dialog"));
EndDialog(IDCANCEL);
return FALSE;
}
//
// Use an appropriate title for the dialog
//
CString strTitle;
VERIFY(strTitle.LoadString(m_fDenyAccessMode
? IDS_DENY
: IDS_GRANT));
SetWindowText(strTitle);
SetControlStates(m_pAccess->IsSingle());
DWORD dwIP = m_pAccess->QueryIpAddress();
if (dwIP != 0L)
{
m_ipa_IpAddress.SetAddress((LONG)m_pAccess->QueryIpAddress());
}
if (!m_pAccess->IsSingle())
{
m_ipa_SubnetMask.SetAddress((LONG)m_pAccess->QuerySubnetMask());
}
//
// No changes made yet
//
m_button_OK.EnableWindow(FALSE);
return TRUE;
}
void
CAccessDlg::OnOK()
{
UpdateData(TRUE);
ASSERT (m_pAccess != NULL);
DWORD dwIP;
DWORD dwMask;
m_ipa_IpAddress.GetAddress(&dwIP);
if (m_nSingleGroup == 0)
{
//
// Make mask for single computer 255.255.255.255
//
dwMask = SINGLE_MASK;
}
else
{
m_ipa_SubnetMask.GetAddress(&dwMask);
}
m_pAccess->SetValues(
!m_fDenyAccessMode,
m_nSingleGroup == 0,
dwIP,
dwMask
);
CDialog::OnOK();
}
void
CAccessDlg::OnCancel()
{
if (m_fNew && m_pAccess != NULL)
{
delete m_pAccess;
m_pAccess = NULL;
}
CDialog::OnCancel();
}
void
CAccessDlg::OnRadioMultiple()
{
SetControlStates(FALSE);
OnItemChanged();
}
void
CAccessDlg::OnRadioSingle()
{
SetControlStates(TRUE);
OnItemChanged();
}
void
CAccessDlg::OnItemChanged()
{
DWORD dwIP;
DWORD dwMask;
m_ipa_IpAddress.GetAddress(&dwIP);
m_ipa_SubnetMask.GetAddress(&dwMask);
m_button_OK.EnableWindow(dwIP != 0L && (m_fSingle || dwMask != 0L));
}
void
CAccessDlg::OnButtonDns()
{
//
// Ask for a DNS name to resolve to an IP address
//
CDnsNameDlg dlg(&m_ipa_IpAddress);
dlg.DoModal();
}