|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: zoneui.cpp
//
//--------------------------------------------------------------------------
#include "preDNSsn.h"
#include <SnapBase.h>
#include "resource.h"
#include "dnsutil.h"
#include "DNSSnap.h"
#include "snapdata.h"
#include "server.h"
#include "domain.h"
#include "record.h"
#include "zone.h"
#include "ZoneUI.h"
#include "browser.h"
#ifdef DEBUG_ALLOCATOR
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
#endif
#ifdef USE_NDNC
///////////////////////////////////////////////////////////////////////////////
// CDNSZoneChangeReplicationScopeDialog
class CDNSZoneChangeReplicationScopeDialog : public CHelpDialog { public: CDNSZoneChangeReplicationScopeDialog(CPropertyPageHolderBase* pHolder, ReplicationType replType, PCWSTR pszCustomScope, DWORD dwServerVersion); ReplicationType m_newReplType; // IN/OUT
CString m_szCustomScope; // IN/OUT
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
afx_msg void OnRadioChange(); afx_msg void OnCustomComboSelChange();
DECLARE_MESSAGE_MAP()
private: void SyncRadioButtons();
ReplicationType m_replType; BOOL m_dwServerVersion;
CPropertyPageHolderBase* m_pHolder;
};
CDNSZoneChangeReplicationScopeDialog::CDNSZoneChangeReplicationScopeDialog(CPropertyPageHolderBase* pHolder, ReplicationType replType, PCWSTR pszCustomScope, DWORD dwServerVersion) : m_pHolder(pHolder), m_replType(replType), m_newReplType(replType), m_szCustomScope(pszCustomScope), m_dwServerVersion(dwServerVersion), CHelpDialog(IDD_ZONE_GENERAL_CHANGE_REPLICATION, pHolder->GetComponentData()) { ASSERT(pHolder != NULL); }
BEGIN_MESSAGE_MAP(CDNSZoneChangeReplicationScopeDialog, CHelpDialog) ON_BN_CLICKED(IDC_FOREST_RADIO, OnRadioChange) ON_BN_CLICKED(IDC_DOMAIN_RADIO, OnRadioChange) ON_BN_CLICKED(IDC_DOMAIN_DC_RADIO, OnRadioChange) ON_BN_CLICKED(IDC_CUSTOM_RADIO, OnRadioChange) ON_CBN_EDITCHANGE(IDC_CUSTOM_COMBO, OnRadioChange) ON_CBN_SELCHANGE(IDC_CUSTOM_COMBO, OnCustomComboSelChange) END_MESSAGE_MAP()
void CDNSZoneChangeReplicationScopeDialog::OnRadioChange() { if (SendDlgItemMessage(IDC_FOREST_RADIO, BM_GETCHECK, 0, 0) == BST_CHECKED) { m_newReplType = forest; } else if (SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_GETCHECK, 0, 0) == BST_CHECKED) { m_newReplType = domain; } else if (SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_GETCHECK, 0, 0) == BST_CHECKED) { m_newReplType = w2k; } else if (SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_GETCHECK, 0, 0) == BST_CHECKED) { m_newReplType = custom; LRESULT iSel = SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_GETCURSEL, 0, 0); if (CB_ERR != iSel) { CString szTemp; CComboBox* pComboBox = reinterpret_cast<CComboBox*>(GetDlgItem(IDC_CUSTOM_COMBO)); ASSERT(pComboBox);
pComboBox->GetLBText(static_cast<int>(iSel), m_szCustomScope); } } else { // one of the radio buttons must be selected
ASSERT(FALSE); }
SyncRadioButtons(); }
void CDNSZoneChangeReplicationScopeDialog::SyncRadioButtons() { switch (m_newReplType) { case forest: SendDlgItemMessage(IDC_FOREST_RADIO, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
GetDlgItem(IDC_CUSTOM_COMBO)->EnableWindow(FALSE); GetDlgItem(IDC_CUSTOM_STATIC)->EnableWindow(FALSE); break;
case domain: SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(IDC_FOREST_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
GetDlgItem(IDC_CUSTOM_COMBO)->EnableWindow(FALSE); GetDlgItem(IDC_CUSTOM_STATIC)->EnableWindow(FALSE); break;
case w2k: SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(IDC_FOREST_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
GetDlgItem(IDC_CUSTOM_COMBO)->EnableWindow(FALSE); GetDlgItem(IDC_CUSTOM_STATIC)->EnableWindow(FALSE); break;
case custom: SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(IDC_FOREST_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); GetDlgItem(IDC_CUSTOM_COMBO)->EnableWindow(TRUE); GetDlgItem(IDC_CUSTOM_STATIC)->EnableWindow(TRUE); break;
default: SendDlgItemMessage(IDC_DOMAIN_RADIO, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(IDC_FOREST_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_DOMAIN_DC_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
GetDlgItem(IDC_CUSTOM_COMBO)->EnableWindow(FALSE); GetDlgItem(IDC_CUSTOM_STATIC)->EnableWindow(FALSE); break; }
if (BST_CHECKED == SendDlgItemMessage(IDC_CUSTOM_RADIO, BM_GETCHECK, 0, 0)) { CString szTemp; GetDlgItemText(IDC_CUSTOM_COMBO, szTemp); GetDlgItem(IDOK)->EnableWindow(!szTemp.IsEmpty()); } else { GetDlgItem(IDOK)->EnableWindow(TRUE); } }
void CDNSZoneChangeReplicationScopeDialog::OnCustomComboSelChange() { LRESULT iSel = SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_GETCURSEL, 0, 0); if (CB_ERR != iSel) { CComboBox* pComboBox = reinterpret_cast<CComboBox*>(GetDlgItem(IDC_CUSTOM_COMBO)); ASSERT(pComboBox);
pComboBox->GetLBText(static_cast<int>(iSel), m_szCustomScope); GetDlgItem(IDOK)->EnableWindow(!m_szCustomScope.IsEmpty()); } else { GetDlgItem(IDOK)->EnableWindow(FALSE); } }
BOOL CDNSZoneChangeReplicationScopeDialog::OnInitDialog() { CHelpDialog::OnInitDialog(); m_pHolder->PushDialogHWnd(GetSafeHwnd());
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)m_pHolder; CDNSServerNode* pServerNode = pHolder->GetZoneNode()->GetServerNode();
//
// We should only reach this dialog if we are on a Whistler or greater server
//
ASSERT(DNS_SRV_BUILD_NUMBER(m_dwServerVersion) >= DNS_SRV_BUILD_NUMBER_WHISTLER && (DNS_SRV_MAJOR_VERSION(m_dwServerVersion) > DNS_SRV_MAJOR_VERSION_NT_5 || DNS_SRV_MINOR_VERSION(m_dwServerVersion) >= DNS_SRV_MINOR_VERSION_WHISTLER));
USES_CONVERSION;
//
// Get the forest and domain names and format them into the UI
//
PCWSTR pszDomainName = UTF8_TO_W(pServerNode->GetDomainName()); PCWSTR pszForestName = UTF8_TO_W(pServerNode->GetForestName());
ASSERT(pszDomainName); ASSERT(pszForestName);
CString szWin2KReplText; szWin2KReplText.Format(IDS_ZWIZ_AD_REPL_FORMAT, pszDomainName); SetDlgItemText(IDC_DOMAIN_DC_RADIO, szWin2KReplText);
CString szDNSDomainText; szDNSDomainText.Format(IDS_ZWIZ_AD_DOMAIN_FORMAT, pszDomainName); SetDlgItemText(IDC_DOMAIN_RADIO, szDNSDomainText);
CString szDNSForestText; szDNSForestText.Format(IDS_ZWIZ_AD_FOREST_FORMAT, pszForestName); SetDlgItemText(IDC_FOREST_RADIO, szDNSForestText);
//
// Enumerate the available directory partitions
//
PDNS_RPC_DP_LIST pDirectoryPartitions = NULL; DWORD dwErr = ::DnssrvEnumDirectoryPartitions(pServerNode->GetRPCName(), DNS_DP_ENLISTED, &pDirectoryPartitions);
//
// Don't show an error if we are not able to get the available directory partitions
// We can still continue on and the user can type in the directory partition they need
//
if (dwErr == 0 && pDirectoryPartitions) { for (DWORD dwIdx = 0; dwIdx < pDirectoryPartitions->dwDpCount; dwIdx++) { PDNS_RPC_DP_INFO pDirectoryPartition = 0; dwErr = ::DnssrvDirectoryPartitionInfo(pServerNode->GetRPCName(), pDirectoryPartitions->DpArray[dwIdx]->pszDpFqdn, &pDirectoryPartition); if (dwErr == 0 && pDirectoryPartition) { //
// Only add the partition if it is not one of the autocreated ones
// and the DNS server is enlisted in the partition
//
if (!(pDirectoryPartition->dwFlags & DNS_DP_AUTOCREATED) && (pDirectoryPartition->dwFlags & DNS_DP_ENLISTED)) { SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_ADDSTRING, 0, (LPARAM)UTF8_TO_W(pDirectoryPartition->pszDpFqdn)); } ::DnssrvFreeDirectoryPartitionInfo(pDirectoryPartition); } }
::DnssrvFreeDirectoryPartitionList(pDirectoryPartitions); }
//
// Select the correct partition if we are using a custom partition
//
if (m_replType == custom) { LRESULT lIdx = SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)(PCWSTR)m_szCustomScope); if (lIdx != CB_ERR) { SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_SETCURSEL, (WPARAM)lIdx, 0); } else { //
// Add the partition
//
SendDlgItemMessage(IDC_CUSTOM_COMBO, CB_ADDSTRING, 0, (LPARAM)(PCWSTR)m_szCustomScope); } }
SyncRadioButtons(); return TRUE; }
void CDNSZoneChangeReplicationScopeDialog::OnCancel() { if (m_pHolder != NULL) { m_pHolder->PopDialogHWnd(); } CHelpDialog::OnCancel(); }
void CDNSZoneChangeReplicationScopeDialog::OnOK() { if (m_pHolder != NULL) { m_pHolder->PopDialogHWnd(); } CHelpDialog::OnOK(); } #endif // USE_NDNC
///////////////////////////////////////////////////////////////////////////////
// CDNSZoneChangeTypeDialog
class CDNSZoneChangeTypeDialog : public CHelpDialog { public: CDNSZoneChangeTypeDialog(CPropertyPageHolderBase* pHolder, BOOL bServerADSEnabled, DWORD dwServerVersion); BOOL m_bIsPrimary; // IN/OUT
BOOL m_bDSIntegrated; // IN/OUT
BOOL m_bIsStub; // IN/OUT
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
afx_msg void OnRadioChange();
DECLARE_MESSAGE_MAP()
private: BOOL m_bServerADSEnabled; BOOL m_dwServerVersion;
CPropertyPageHolderBase* m_pHolder;
};
CDNSZoneChangeTypeDialog::CDNSZoneChangeTypeDialog(CPropertyPageHolderBase* pHolder, BOOL bServerADSEnabled, DWORD dwServerVersion) : CHelpDialog(IDD_ZONE_GENERAL_CHANGE_TYPE, pHolder->GetComponentData()) { ASSERT(pHolder != NULL); m_pHolder = pHolder; m_bServerADSEnabled = bServerADSEnabled; m_dwServerVersion = dwServerVersion; }
BEGIN_MESSAGE_MAP(CDNSZoneChangeTypeDialog, CHelpDialog) ON_BN_CLICKED(IDC_RADIO_ZONE_PRIMARY, OnRadioChange) ON_BN_CLICKED(IDC_RADIO_ZONE_SECONDARY, OnRadioChange) ON_BN_CLICKED(IDC_RADIO_ZONE_STUB, OnRadioChange) END_MESSAGE_MAP()
void CDNSZoneChangeTypeDialog::OnRadioChange() { if (SendDlgItemMessage(IDC_RADIO_ZONE_SECONDARY, BM_GETCHECK, 0, 0) == BST_CHECKED) { SendDlgItemMessage(IDC_ADINT_CHECK, BM_SETCHECK, BST_UNCHECKED, 0); GetDlgItem(IDC_ADINT_CHECK)->EnableWindow(FALSE); } else { if (m_bServerADSEnabled) { GetDlgItem(IDC_ADINT_CHECK)->EnableWindow(TRUE); } else { GetDlgItem(IDC_ADINT_CHECK)->EnableWindow(FALSE); } } }
BOOL CDNSZoneChangeTypeDialog::OnInitDialog() { CHelpDialog::OnInitDialog(); m_pHolder->PushDialogHWnd(GetSafeHwnd());
GetDlgItem(IDC_ADINT_CHECK)->EnableWindow(m_bServerADSEnabled);
int nIDCheckButton; if (m_bIsPrimary) { nIDCheckButton = IDC_RADIO_ZONE_PRIMARY; } else { if (m_bIsStub) { nIDCheckButton = IDC_RADIO_ZONE_STUB; } else { nIDCheckButton = IDC_RADIO_ZONE_SECONDARY; GetDlgItem(IDC_ADINT_CHECK)->EnableWindow(FALSE); } } CheckRadioButton(IDC_RADIO_ZONE_PRIMARY, IDC_RADIO_ZONE_STUB, nIDCheckButton); SendDlgItemMessage(IDC_ADINT_CHECK, BM_SETCHECK, m_bDSIntegrated, 0);
if (DNS_SRV_BUILD_NUMBER(m_dwServerVersion) < DNS_SRV_BUILD_NUMBER_WHISTLER || (DNS_SRV_MAJOR_VERSION(m_dwServerVersion) <= DNS_SRV_MAJOR_VERSION_NT_5 && DNS_SRV_MINOR_VERSION(m_dwServerVersion) < DNS_SRV_MINOR_VERSION_WHISTLER)) { //
// Stub zones not available on pre-Whistler servers
//
GetDlgItem(IDC_RADIO_ZONE_STUB)->EnableWindow(FALSE); GetDlgItem(IDC_STUB_STATIC)->EnableWindow(FALSE); } return TRUE; }
void CDNSZoneChangeTypeDialog::OnCancel() { if (m_pHolder != NULL) { m_pHolder->PopDialogHWnd(); } CHelpDialog::OnCancel(); }
void CDNSZoneChangeTypeDialog::OnOK() { BOOL bIsPrimary = TRUE; BOOL bDSIntegrated = TRUE; BOOL bIsStub = FALSE;
int nIDCheckButton = GetCheckedRadioButton(IDC_RADIO_ZONE_PRIMARY, IDC_RADIO_ZONE_STUB); switch (nIDCheckButton) { case IDC_RADIO_ZONE_PRIMARY: bIsPrimary = TRUE; bIsStub = FALSE; break; case IDC_RADIO_ZONE_SECONDARY: bIsPrimary = FALSE; bIsStub = FALSE; break; case IDC_RADIO_ZONE_STUB: bIsPrimary = FALSE; bIsStub = TRUE; break; default: ASSERT(FALSE); break; }
bDSIntegrated = static_cast<BOOL>(SendDlgItemMessage(IDC_ADINT_CHECK, BM_GETCHECK, 0, 0)); //
// warnings on special transitions
//
if (m_bDSIntegrated && !bDSIntegrated) { //
// warning changing from DS integrated to something else
//
if (IDCANCEL == DNSMessageBox(IDS_MSG_ZONE_WARNING_CHANGE_TYPE_FROM_DS,MB_OKCANCEL)) { return; } } else if (!m_bDSIntegrated && bDSIntegrated) { //
// warning changing from primary to DS integrated primary
//
if (IDCANCEL == DNSMessageBox(IDS_MSG_ZONE_WARNING_CHANGE_TYPE_TO_DS,MB_OKCANCEL)) { return; } }
m_bIsPrimary = bIsPrimary; m_bDSIntegrated = bDSIntegrated; m_bIsStub = bIsStub;
if (m_pHolder != NULL) { m_pHolder->PopDialogHWnd(); } CHelpDialog::OnOK(); }
///////////////////////////////////////////////////////////////////////////////
// CDNSZoneChangeTypeDataConflict
class CDNSZoneChangeTypeDataConflict : public CHelpDialog { public: CDNSZoneChangeTypeDataConflict(CPropertyPageHolderBase* pHolder); BOOL m_bUseDsData; // IN/OUT
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
private: CPropertyPageHolderBase* m_pHolder; };
CDNSZoneChangeTypeDataConflict::CDNSZoneChangeTypeDataConflict( CPropertyPageHolderBase* pHolder) : CHelpDialog(IDD_ZONE_GENERAL_CHANGE_TYPE_DATA_CONFLICT, pHolder->GetComponentData()) { m_pHolder = pHolder; m_bUseDsData = FALSE; }
BOOL CDNSZoneChangeTypeDataConflict::OnInitDialog() { CHelpDialog::OnInitDialog(); m_pHolder->PushDialogHWnd(GetSafeHwnd());
CheckRadioButton(IDC_RADIO_USE_DS_DATA, IDC_RADIO_USE_MEM_DATA, m_bUseDsData ? IDC_RADIO_USE_DS_DATA : IDC_RADIO_USE_MEM_DATA);
return TRUE; }
void CDNSZoneChangeTypeDataConflict::OnCancel() { if (m_pHolder != NULL) m_pHolder->PopDialogHWnd(); CHelpDialog::OnCancel(); }
void CDNSZoneChangeTypeDataConflict::OnOK() { int nIDCheckButton = GetCheckedRadioButton( IDC_RADIO_USE_DS_DATA, IDC_RADIO_USE_MEM_DATA); m_bUseDsData = (nIDCheckButton == IDC_RADIO_USE_DS_DATA);
if (m_pHolder != NULL) m_pHolder->PopDialogHWnd(); CHelpDialog::OnOK(); }
///////////////////////////////////////////////////////////////////////////////
// CDNSZoneNotifyDialog
class CDNSZoneNotifyDialog : public CHelpDialog { public: CDNSZoneNotifyDialog(CDNSZone_ZoneTransferPropertyPage* pPage, BOOL bSecondaryZone, CComponentDataObject* pComponentData);
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
afx_msg void OnRadioNotifyOff() { SyncUIRadioHelper(IDC_CHECK_AUTO_NOTIFY);} afx_msg void OnRadioNotifyAll() { SyncUIRadioHelper(IDC_RADIO_NOTIFY_ALL);} afx_msg void OnRadioNotifyList() { SyncUIRadioHelper(IDC_RADIO_NOTIFY_LIST);}
DECLARE_MESSAGE_MAP()
private: void SyncUIRadioHelper(UINT nRadio); int SetRadioState(DWORD fNotifyFlag); DWORD GetRadioState(); CDNSZone_ZoneTransferPropertyPage* m_pPage; BOOL m_bSecondaryZone;
class CDNSNotifyIPEditor : public CIPEditor { public: CDNSNotifyIPEditor() : CIPEditor(TRUE) {} // no up/down buttons
virtual void OnChangeData(); }; CDNSNotifyIPEditor m_notifyListEditor; friend class CDNSNotifyIPEditor;
CComponentDataObject* m_pComponentData; };
BEGIN_MESSAGE_MAP(CDNSZoneNotifyDialog, CHelpDialog) ON_BN_CLICKED(IDC_CHECK_AUTO_NOTIFY, OnRadioNotifyOff) ON_BN_CLICKED(IDC_RADIO_NOTIFY_ALL, OnRadioNotifyAll) ON_BN_CLICKED(IDC_RADIO_NOTIFY_LIST, OnRadioNotifyList) END_MESSAGE_MAP()
void CDNSZoneNotifyDialog::CDNSNotifyIPEditor::OnChangeData() { CWnd* pWnd = GetParentWnd(); pWnd->GetDlgItem(IDOK)->EnableWindow(TRUE); // it is dirty now
}
CDNSZoneNotifyDialog::CDNSZoneNotifyDialog(CDNSZone_ZoneTransferPropertyPage* pPage, BOOL bSecondaryZone, CComponentDataObject* pComponentData) : CHelpDialog(IDD_ZONE_NOTIFY_SUBDIALOG, pComponentData) { m_pPage = pPage; m_bSecondaryZone = bSecondaryZone; m_pComponentData = pComponentData; }
BOOL CDNSZoneNotifyDialog::OnInitDialog() { CHelpDialog::OnInitDialog(); m_pPage->GetHolder()->PushDialogHWnd(GetSafeHwnd());
VERIFY(m_notifyListEditor.Initialize(this, this, IDC_BUTTON_UP, IDC_BUTTON_DOWN, IDC_BUTTON_ADD, IDC_BUTTON_REMOVE, IDC_IPEDIT, IDC_LIST));
if (m_bSecondaryZone) { ASSERT(m_pPage->m_fNotifyLevel != ZONE_NOTIFY_ALL); GetDlgItem(IDC_RADIO_NOTIFY_ALL)->EnableWindow(FALSE); }
// read the state and set the UI
if ( (ZONE_NOTIFY_LIST == m_pPage->m_fNotifyLevel) && (m_pPage->m_cNotify > 0) ) { m_notifyListEditor.AddAddresses(m_pPage->m_aipNotify, m_pPage->m_cNotify); }
SyncUIRadioHelper(SetRadioState(m_pPage->m_fNotifyLevel));
GetDlgItem(IDOK)->EnableWindow(FALSE); // not dirty
BOOL bListState = ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_LIST))->GetCheck(); BOOL bAllState = ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_ALL))->GetCheck(); if (!bAllState && !bListState) { ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_LIST))->SetCheck(TRUE); } return TRUE; }
void CDNSZoneNotifyDialog::OnCancel() { if (m_pPage->GetHolder() != NULL) m_pPage->GetHolder()->PopDialogHWnd(); CHelpDialog::OnCancel(); }
void CDNSZoneNotifyDialog::OnOK() { // read the data back to the main page storage
m_pPage->m_fNotifyLevel = GetRadioState();
m_pPage->m_cNotify = 0; if (m_pPage->m_aipNotify != NULL) { free(m_pPage->m_aipNotify); m_pPage->m_aipNotify = NULL; }
if (m_pPage->m_fNotifyLevel == ZONE_NOTIFY_LIST) { m_pPage->m_cNotify = m_notifyListEditor.GetCount(); if (m_pPage->m_cNotify > 0) { m_pPage->m_aipNotify = (DWORD*) malloc(sizeof(DWORD)*m_pPage->m_cNotify); int nFilled = 0; if (m_pPage->m_aipNotify != NULL) { m_notifyListEditor.GetAddresses(m_pPage->m_aipNotify, m_pPage->m_cNotify, &nFilled); } ASSERT(nFilled == (int)m_pPage->m_cNotify); } }
// dismiss dialog, all cool
if (m_pPage->GetHolder()) m_pPage->GetHolder()->PopDialogHWnd(); CHelpDialog::OnOK(); }
void CDNSZoneNotifyDialog::SyncUIRadioHelper(UINT nRadio) { m_notifyListEditor.EnableUI(IDC_RADIO_NOTIFY_LIST == nRadio, TRUE); // if (IDC_RADIO_NOTIFY_LIST != nRadio)
// m_notifyListEditor.Clear();
GetDlgItem(IDOK)->EnableWindow(TRUE); // dirty
if (IDC_CHECK_AUTO_NOTIFY == nRadio) { BOOL bState = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_NOTIFY))->GetCheck(); ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_LIST))->EnableWindow(bState); ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_ALL))->EnableWindow(bState); BOOL bRadioState = ((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_LIST))->GetCheck(); m_notifyListEditor.EnableUI(bRadioState && bState, TRUE); } }
int CDNSZoneNotifyDialog::SetRadioState(DWORD fNotifyLevel) { int nRadio = 0; switch (fNotifyLevel) { case ZONE_NOTIFY_OFF: nRadio = IDC_CHECK_AUTO_NOTIFY; ((CButton*)GetDlgItem(IDC_CHECK_AUTO_NOTIFY))->SetCheck(FALSE); break; case ZONE_NOTIFY_LIST: nRadio = IDC_RADIO_NOTIFY_LIST; ((CButton*)GetDlgItem(nRadio))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_CHECK_AUTO_NOTIFY))->SetCheck(TRUE); break; case ZONE_NOTIFY_ALL: nRadio = IDC_RADIO_NOTIFY_ALL; ((CButton*)GetDlgItem(nRadio))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_CHECK_AUTO_NOTIFY))->SetCheck(TRUE); break; } ASSERT(nRadio != 0); return nRadio; }
DWORD CDNSZoneNotifyDialog::GetRadioState() { static int nRadioArr[] = { IDC_RADIO_NOTIFY_OFF, IDC_RADIO_NOTIFY_LIST, IDC_RADIO_NOTIFY_ALL };
int nRadio = 0; if (!((CButton*)GetDlgItem(IDC_CHECK_AUTO_NOTIFY))->GetCheck()) { nRadio = IDC_CHECK_AUTO_NOTIFY; } else { if (((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_LIST))->GetCheck()) { nRadio = IDC_RADIO_NOTIFY_LIST; } else if (((CButton*)GetDlgItem(IDC_RADIO_NOTIFY_ALL))->GetCheck()) { nRadio = IDC_RADIO_NOTIFY_ALL; } }
// int nRadio = ::GetCheckedRadioButtonHelper(m_hWnd, 3, nRadioArr, IDC_RADIO_NOTIFY_OFF);
ASSERT(nRadio != 0); DWORD fNotifyLevel = (DWORD)-1; switch (nRadio) { case IDC_CHECK_AUTO_NOTIFY: fNotifyLevel = ZONE_NOTIFY_OFF; break; case IDC_RADIO_NOTIFY_LIST: fNotifyLevel = ZONE_NOTIFY_LIST; break; case IDC_RADIO_NOTIFY_ALL: fNotifyLevel = ZONE_NOTIFY_ALL; break; } ASSERT(fNotifyLevel != (DWORD)-1); return fNotifyLevel; }
///////////////////////////////////////////////////////////////////////////////
// CDNSZone_GeneralPropertyPage
//
// defines for the status text string positions (matching the RC file)
//
#define N_ZONE_STATES 3
#define N_ZONE_STATUS_RUNNING 0
#define N_ZONE_STATUS_PAUSED 1
#define N_ZONE_STATUS_EXPIRED 2
#define N_ZONE_TYPES 4
#define N_ZONE_TYPES_PRIMARY 0
#define N_ZONE_TYPES_DS_PRIMARY 1
#define N_ZONE_TYPES_SECONDARY 2
#define N_ZONE_TYPES_STUB 3
void CDNSZone_GeneralIPEditor::OnChangeData() { if (m_bNoUpdateNow) { return; } ((CDNSZone_GeneralPropertyPage*)GetParentWnd())->OnChangeIPEditorData(); }
void CDNSZone_GeneralIPEditor::FindMastersNames() { m_bNoUpdateNow = TRUE; FindNames(); m_bNoUpdateNow = FALSE; }
BEGIN_MESSAGE_MAP(CDNSZone_GeneralPropertyPage, CPropertyPageBase) ON_BN_CLICKED(IDC_CHANGE_TYPE_BUTTON, OnChangeTypeButton) #ifdef USE_NDNC
ON_BN_CLICKED(IDC_CHANGE_REPL_BUTTON, OnChangeReplButton) #endif // USE_NDNC
ON_BN_CLICKED(IDC_PAUSE_START_BUTTON, OnPauseStartButton) ON_EN_CHANGE(IDC_FILE_NAME_EDIT, OnChangePrimaryFileNameEdit) ON_CBN_SELCHANGE(IDC_PRIMARY_DYN_UPD_COMBO, OnChangePrimaryDynamicUpdateCombo) ON_BN_CLICKED(IDC_BROWSE_MASTERS_BUTTON, OnBrowseMasters) ON_BN_CLICKED(IDC_FIND_MASTERS_NAMES_BUTTON, OnFindMastersNames) ON_BN_CLICKED(IDC_AGING_BUTTON, OnAging) ON_BN_CLICKED(IDC_LOCAL_LIST_CHECK, OnLocalCheck) END_MESSAGE_MAP()
CDNSZone_GeneralPropertyPage::CDNSZone_GeneralPropertyPage() : CPropertyPageBase(CDNSZone_GeneralPropertyPage::IDD), m_statusHelper(N_ZONE_STATES), m_typeStaticHelper(N_ZONE_TYPES)
{ // actual values will be set when loading UI data
m_bIsPrimary = TRUE; m_bIsPaused = FALSE; m_bIsExpired = FALSE; m_bDSIntegrated = FALSE; m_bIsStub = FALSE; m_bServerADSEnabled = FALSE; m_bScavengingEnabled = FALSE; m_dwRefreshInterval = 0; m_dwNoRefreshInterval = 0; m_nAllowsDynamicUpdate = ZONE_UPDATE_OFF;
m_bDiscardUIState = FALSE; m_bDiscardUIStateShowMessage = FALSE; #ifdef USE_NDNC
m_replType = none; #endif // USE_NDNC
}
void CDNSZone_GeneralPropertyPage::OnChangeIPEditorData() { ASSERT(!m_bIsPrimary); SetDirty(TRUE); GetFindMastersNamesButton()->EnableWindow(m_mastersEditor.GetCount()>0); }
BOOL CDNSZone_GeneralPropertyPage::OnPropertyChange(BOOL, long*) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
// need to apply the pause/start zone command ?
BOOL bWasPaused = pZoneNode->IsPaused(); if (bWasPaused != m_bIsPaused) { DNS_STATUS err = pZoneNode->TogglePauseHelper(pHolder->GetComponentData()); if (err != 0) pHolder->SetError(err); } return TRUE; }
void CDNSZone_GeneralPropertyPage::SetUIData() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode(); CDNSServerNode* pServerNode = pZoneNode->GetServerNode();
//
// get zone type
//
DWORD dwZoneType = pZoneNode->GetZoneType(); ASSERT((dwZoneType == DNS_ZONE_TYPE_PRIMARY) || (dwZoneType == DNS_ZONE_TYPE_SECONDARY)|| (dwZoneType == DNS_ZONE_TYPE_STUB)); m_bIsPrimary = (dwZoneType == DNS_ZONE_TYPE_PRIMARY); m_bIsStub = (dwZoneType == DNS_ZONE_TYPE_STUB);
m_bDSIntegrated = pZoneNode->IsDSIntegrated(); m_bIsPaused = pZoneNode->IsPaused(); m_bIsExpired = pZoneNode->IsExpired(); m_bScavengingEnabled = pZoneNode->IsScavengingEnabled(); m_dwRefreshInterval = pZoneNode->GetAgingRefreshInterval(); m_dwNoRefreshInterval = pZoneNode->GetAgingNoRefreshInterval(); m_dwScavengingStart = pZoneNode->GetScavengingStart(); #ifdef USE_NDNC
m_replType = pZoneNode->GetDirectoryPartitionFlagsAsReplType(); m_szCustomScope = pZoneNode->GetCustomPartitionName();
//
// Enable the replication scope button only for AD integrated zones
//
if (m_bDSIntegrated && (DNS_SRV_BUILD_NUMBER(pServerNode->GetVersion()) >= DNS_SRV_BUILD_NUMBER_WHISTLER && (DNS_SRV_MAJOR_VERSION(pServerNode->GetVersion()) > DNS_SRV_MAJOR_VERSION_NT_5 || DNS_SRV_MINOR_VERSION(pServerNode->GetVersion()) >= DNS_SRV_MINOR_VERSION_WHISTLER))) { GetDlgItem(IDC_CHANGE_REPL_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_REPL_LABEL_STATIC)->EnableWindow(TRUE); GetDlgItem(IDC_REPLICATION_STATIC)->EnableWindow(TRUE); } else { GetDlgItem(IDC_CHANGE_REPL_BUTTON)->EnableWindow(FALSE); GetDlgItem(IDC_REPL_LABEL_STATIC)->EnableWindow(FALSE); GetDlgItem(IDC_REPLICATION_STATIC)->EnableWindow(FALSE); } #endif // USE_NDNC
//
// change the controls to the zone type
//
ChangeUIControls();
USES_CONVERSION;
//
// set the file name control
//
CString szZoneStorage; szZoneStorage = UTF8_TO_W(pZoneNode->GetDataFile()); if (m_bIsPrimary) { m_nAllowsDynamicUpdate = pZoneNode->GetDynamicUpdate(); } else // secondary
{ DWORD cAddrCount; PIP_ADDRESS pipMasters;
if (m_bIsStub) { pZoneNode->GetLocalListOfMasters(&cAddrCount, &pipMasters); if (cAddrCount > 0 && pipMasters != NULL) { m_mastersEditor.AddAddresses(pipMasters, cAddrCount); SendDlgItemMessage(IDC_LOCAL_LIST_CHECK, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); } else { pZoneNode->GetMastersInfo(&cAddrCount, &pipMasters); if (cAddrCount > 0) { m_mastersEditor.AddAddresses(pipMasters, cAddrCount); } SendDlgItemMessage(IDC_LOCAL_LIST_CHECK, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); } } else { pZoneNode->GetMastersInfo(&cAddrCount, &pipMasters); if (cAddrCount > 0) { m_mastersEditor.AddAddresses(pipMasters, cAddrCount); } } }
if (m_bDSIntegrated && !m_bIsStub) { GetDlgItem(IDC_AGING_STATIC)->EnableWindow(TRUE); GetDlgItem(IDC_AGING_STATIC)->ShowWindow(TRUE); GetDlgItem(IDC_AGING_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_AGING_BUTTON)->ShowWindow(TRUE); }
//
// we set also the database name of the "other" zone type, just
// in case the user promotes or demotes
//
GetFileNameEdit()->SetWindowText(szZoneStorage); SetPrimaryDynamicUpdateComboVal(m_nAllowsDynamicUpdate); if (m_bIsExpired) { //
// hide the start/stop button
//
CButton* pBtn = GetPauseStartButton(); pBtn->ShowWindow(FALSE); pBtn->EnableWindow(FALSE);
//
// change the text to "expired"
//
m_statusHelper.SetStateX(N_ZONE_STATUS_EXPIRED); } else { m_statusHelper.SetStateX(m_bIsPaused ? N_ZONE_STATUS_PAUSED : N_ZONE_STATUS_RUNNING); m_pauseStartHelper.SetToggleState(!m_bIsPaused); } }
#define PRIMARY_DYN_UPD_COMBO_ITEM_COUNT 3
void _MoveChildWindowY(CWnd* pChild, CWnd* pParent, int nY) { CRect r; pChild->GetWindowRect(r); pParent->ScreenToClient(r); int nDy = r.bottom - r.top; r.top = nY; r.bottom = nY + nDy; pChild->MoveWindow(r, TRUE); }
BOOL CDNSZone_GeneralPropertyPage::OnInitDialog() { CPropertyPageBase::OnInitDialog();
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); m_bServerADSEnabled = pHolder->GetZoneNode()->GetServerNode()->CanUseADS();
VERIFY(m_mastersEditor.Initialize(this, GetParent(), IDC_MASTERS_BUTTON_UP, IDC_MASTERS_BUTTON_DOWN, IDC_MASTERS_BUTTON_ADD, IDC_MASTERS_BUTTON_REMOVE, IDC_MASTERS_IPEDIT, IDC_MASTERS_IP_LIST));
UINT pnButtonStringIDs[2] = { IDS_BUTTON_TEXT_PAUSE_BUTTON, IDS_BUTTON_TEXT_START_BUTTON }; VERIFY(m_pauseStartHelper.Init(this, IDC_PAUSE_START_BUTTON, pnButtonStringIDs)); VERIFY(m_typeStaticHelper.Init(this, IDC_TYPE_STATIC)); VERIFY(m_statusHelper.Init(this, IDC_STATUS_STATIC)); VERIFY(m_zoneStorageStaticHelper.Init(this, IDC_STORAGE_STATIC));
SendDlgItemMessage(IDC_FILE_NAME_EDIT, EM_SETLIMITTEXT, (WPARAM)_MAX_FNAME, 0);
// initial positioning (in the resource these controls are at the bottom of the screen)
// move relative the file name exit box
CRect fileNameEditRect; GetDlgItem(IDC_FILE_NAME_EDIT)->GetWindowRect(fileNameEditRect); ScreenToClient(fileNameEditRect);
// move below the edit box, with with separation equal of 6 (DBU)
// height of the edit box.
int nYPos = fileNameEditRect.bottom + 6; CComboBox* pDynamicUpdateCombo = GetPrimaryDynamicUpdateCombo(); // The static control needs to be 2 lower
_MoveChildWindowY(GetPrimaryDynamicUpdateStatic(), this, nYPos + 2); _MoveChildWindowY(pDynamicUpdateCombo, this, nYPos);
// initialize the state of the page
SetUIData();
#ifdef USE_NDNC
SetTextForReplicationScope(); #endif
SetDirty(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDNSZone_GeneralPropertyPage::OnApply() { if (m_bDiscardUIState) { // if we get called from other pages, we have to make them fail
if (m_bDiscardUIStateShowMessage) { DNSMessageBox(IDS_ZONE_LOADED_FROM_DS_WARNING); m_bDiscardUIStateShowMessage = FALSE; } return FALSE; }
if (!IsDirty()) return TRUE;
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
//
// changed from primary to secondary or vice versa?
//
DWORD dwZoneType = pZoneNode->GetZoneType(); ASSERT((dwZoneType == DNS_ZONE_TYPE_PRIMARY) || (dwZoneType == DNS_ZONE_TYPE_SECONDARY)|| (dwZoneType == DNS_ZONE_TYPE_STUB)); BOOL bWasPrimary = (dwZoneType == DNS_ZONE_TYPE_PRIMARY);
DNS_STATUS dwErr = 0;
USES_CONVERSION;
CString szDataStorageName; GetStorageName(szDataStorageName);
DWORD dwLoadOptions; if (m_bIsPrimary) { dwLoadOptions = 0x0; PWSTR pszZoneFile = UTF8_TO_W(pZoneNode->GetDataFile()); //
// Check to see if this was primary before if so only submit changes if the storage changed
//
if (!bWasPrimary || (bWasPrimary && ((pZoneNode->IsDSIntegrated() && !m_bDSIntegrated) || (!pZoneNode->IsDSIntegrated() && m_bDSIntegrated))) || (pszZoneFile && szDataStorageName.CompareNoCase(pszZoneFile))) { dwErr = pZoneNode->SetPrimary(dwLoadOptions, m_bDSIntegrated, szDataStorageName); if (m_bDSIntegrated && (dwErr == DNS_ERROR_DS_ZONE_ALREADY_EXISTS)) { FIX_THREAD_STATE_MFC_BUG(); CDNSZoneChangeTypeDataConflict dlg(pHolder);
//
// if the zone was a primary, use in memory data
// otherwise, use DS data
//
dlg.m_bUseDsData = bWasPrimary ? FALSE : TRUE; if (IDOK == dlg.DoModal()) { //
// try again, getting options from dialog
//
dwLoadOptions = dlg.m_bUseDsData ? DNS_ZONE_LOAD_OVERWRITE_MEMORY : DNS_ZONE_LOAD_OVERWRITE_DS; dwErr = pZoneNode->SetPrimary(dwLoadOptions, m_bDSIntegrated, szDataStorageName); if ((dwErr == 0) && dlg.m_bUseDsData) { //
// we loaded from the DS, we will have to discard all the other
// changes the user has made.
//
m_bDiscardUIState = TRUE;
//
// tell the user to bail out
//
m_bDiscardUIStateShowMessage = FALSE; DNSMessageBox(IDS_ZONE_LOADED_FROM_DS_WARNING); SetDirty(FALSE); return TRUE; } } else { //
// user canceled the operation, just stop here
//
return FALSE; } } }
if (dwErr == 0) { // update dynamic update flag, if changed
m_nAllowsDynamicUpdate = GetPrimaryDynamicUpdateComboVal(); UINT nWasDynamicUpdate = pZoneNode->GetDynamicUpdate(); if ( (dwErr == 0) && (m_nAllowsDynamicUpdate != nWasDynamicUpdate) ) { dwErr = pZoneNode->SetDynamicUpdate(m_nAllowsDynamicUpdate); if (dwErr != 0) DNSErrorDialog(dwErr, IDS_ERROR_ZONE_DYN_UPD); } } else { DNSErrorDialog(dwErr, IDS_ERROR_ZONE_PRIMARY); }
if (dwErr == 0 && m_bIsPrimary) { dwErr = pZoneNode->SetAgingNoRefreshInterval(m_dwNoRefreshInterval); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_MSG_ERROR_NO_REFRESH_INTERVAL); return FALSE; }
dwErr = pZoneNode->SetAgingRefreshInterval(m_dwRefreshInterval); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_MSG_ERROR_REFRESH_INTERVAL); return FALSE; }
dwErr = pZoneNode->SetScavengingEnabled(m_bScavengingEnabled); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_MSG_ERROR_SCAVENGING_ENABLED); return FALSE; } } } else // it is a secondary or stub
{ //
// get data from the IP editor
//
DWORD cAddrCount = m_mastersEditor.GetCount(); DWORD* pArr = (cAddrCount > 0) ? (DWORD*) malloc(sizeof(DWORD)*cAddrCount) : NULL; if (cAddrCount > 0) { int nFilled = 0; m_mastersEditor.GetAddresses(pArr, cAddrCount, &nFilled); ASSERT(nFilled == (int)cAddrCount); } dwLoadOptions = 0x0;
if (m_bIsStub) { LRESULT lLocalListOfMasters = SendDlgItemMessage(IDC_LOCAL_LIST_CHECK, BM_GETCHECK, 0, 0); BOOL bLocalListOfMasters = (lLocalListOfMasters == BST_CHECKED); dwErr = pZoneNode->SetStub(cAddrCount, pArr, dwLoadOptions, m_bDSIntegrated, szDataStorageName, bLocalListOfMasters); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_ERROR_ZONE_STUB); } } else { dwErr = pZoneNode->SetSecondary(cAddrCount, pArr, dwLoadOptions, szDataStorageName); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_ERROR_ZONE_SECONDARY); } } if (pArr) { free(pArr); pArr = 0; } }
#ifdef USE_NDNC
if ((m_replType != pZoneNode->GetDirectoryPartitionFlagsAsReplType() || _wcsicmp(m_szCustomScope, pZoneNode->GetCustomPartitionName()) != 0) && m_bDSIntegrated) { dwErr = pZoneNode->ChangeDirectoryPartitionType(m_replType, m_szCustomScope); if (dwErr != 0) { DNSErrorDialog(dwErr, IDS_ERROR_ZONE_REPLTYPE); } } #endif
// if promoted or demoted, have to change icon
// if paused/started, have to apply the command
BOOL bWasPaused = pZoneNode->IsPaused(); DNS_STATUS dwPauseStopErr = 0; if ((bWasPrimary != m_bIsPrimary) || (bWasPaused != m_bIsPaused)) { dwPauseStopErr = pHolder->NotifyConsole(this); if (dwPauseStopErr != 0) { if (m_bIsPaused) DNSErrorDialog(dwPauseStopErr, IDS_ERROR_ZONE_PAUSE); else DNSErrorDialog(dwPauseStopErr, IDS_ERROR_ZONE_START); } } if ( (dwErr != 0) || (dwPauseStopErr != 0) ) return FALSE; // something went wrong, already got error messages
SetDirty(FALSE); return TRUE; }
void CDNSZone_GeneralPropertyPage::OnAging() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder();
CDNSZone_AgingDialog dlg(pHolder, IDD_ZONE_AGING_DIALOG, pHolder->GetComponentData());
dlg.m_dwRefreshInterval = m_dwRefreshInterval; dlg.m_dwNoRefreshInterval = m_dwNoRefreshInterval; dlg.m_dwScavengingStart = m_dwScavengingStart; dlg.m_fScavengingEnabled = m_bScavengingEnabled; dlg.m_bAdvancedView = pHolder->IsAdvancedView();
if (IDCANCEL == dlg.DoModal()) { return; }
m_dwRefreshInterval = dlg.m_dwRefreshInterval; m_dwNoRefreshInterval = dlg.m_dwNoRefreshInterval; m_bScavengingEnabled = dlg.m_fScavengingEnabled; SetDirty(TRUE); }
void CDNSZone_GeneralPropertyPage::OnLocalCheck() { SetDirty(TRUE); }
#ifdef USE_NDNC
void CDNSZone_GeneralPropertyPage::OnChangeReplButton() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
CDNSZoneChangeReplicationScopeDialog dlg(GetHolder(), m_replType, m_szCustomScope, pZoneNode->GetServerNode()->GetVersion());
if (IDCANCEL == dlg.DoModal()) { return; }
BOOL bDirty = (m_replType != dlg.m_newReplType) || (m_szCustomScope != dlg.m_szCustomScope); if (!bDirty) { return; }
m_replType = dlg.m_newReplType; m_szCustomScope = dlg.m_szCustomScope;
SetTextForReplicationScope();
SetDirty(TRUE); }
void CDNSZone_GeneralPropertyPage::SetTextForReplicationScope() { UINT nStringID = 0;
CString szReplText; if (m_bDSIntegrated) { switch(m_replType) { case domain : nStringID = IDS_ZONE_REPLICATION_DOMAIN_TEXT; break;
case forest : nStringID = IDS_ZONE_REPLICATION_FOREST_TEXT; break;
case custom : nStringID = IDS_ZONE_REPLICATION_CUSTOM_TEXT; break;
default : nStringID = IDS_ZONE_REPLICATION_W2K_TEXT; break; } GetDlgItem(IDC_CHANGE_REPL_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_REPL_LABEL_STATIC)->EnableWindow(TRUE); GetDlgItem(IDC_REPLICATION_STATIC)->EnableWindow(TRUE); } else { nStringID = IDS_ZONE_REPLICATION_NONDS_TEXT; GetDlgItem(IDC_CHANGE_REPL_BUTTON)->EnableWindow(FALSE); GetDlgItem(IDC_REPL_LABEL_STATIC)->EnableWindow(FALSE); GetDlgItem(IDC_REPLICATION_STATIC)->EnableWindow(FALSE); }
szReplText.LoadString(nStringID); SetDlgItemText(IDC_REPLICATION_STATIC, szReplText); } #endif // USE_NDNC
void CDNSZone_GeneralPropertyPage::OnChangeTypeButton() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
CDNSZoneChangeTypeDialog dlg(GetHolder(), m_bServerADSEnabled, pZoneNode->GetServerNode()->GetVersion());
dlg.m_bIsPrimary = m_bIsPrimary; dlg.m_bIsStub = m_bIsStub; dlg.m_bDSIntegrated = m_bDSIntegrated;
if (IDCANCEL == dlg.DoModal()) { return; }
BOOL bDirty = (m_bIsPrimary != dlg.m_bIsPrimary) || (m_bDSIntegrated != dlg.m_bDSIntegrated) || (m_bIsStub != dlg.m_bIsStub); if (!bDirty) { return; }
CString szZoneStorage; GetFileNameEdit()->GetWindowText(szZoneStorage);
if (dlg.m_bDSIntegrated == FALSE && m_bDSIntegrated == TRUE && szZoneStorage.IsEmpty()) { //
// we have no file name, synthesize one
//
CString szZoneName = pZoneNode->GetDisplayName(); int nLen = szZoneName.GetLength(); if (nLen == 0) { szZoneStorage.Empty(); } else if (nLen == 1 && szZoneName[0] == TEXT('.')) { szZoneStorage = _T("root.dns"); } else { LPCTSTR lpszFmt = ( TEXT('.') == szZoneName.GetAt(nLen-1)) ? _T("%sdns") : _T("%s.dns"); szZoneStorage.Format(lpszFmt, (LPCTSTR)szZoneName); } GetFileNameEdit()->SetWindowText(szZoneStorage); }
m_bIsPrimary = dlg.m_bIsPrimary; m_bDSIntegrated = dlg.m_bDSIntegrated; m_bIsStub = dlg.m_bIsStub;
SetDirty(TRUE); ChangeUIControls();
#ifdef USE_NDNC
SetTextForReplicationScope(); #endif
}
void CDNSZone_GeneralPropertyPage::OnPauseStartButton() { ASSERT(!m_bIsExpired); // the button should not be enabled
SetDirty(TRUE); m_bIsPaused = !m_bIsPaused; m_pauseStartHelper.SetToggleState(!m_bIsPaused); m_statusHelper.SetStateX(m_bIsPaused ? N_ZONE_STATUS_PAUSED : N_ZONE_STATUS_RUNNING); }
void CDNSZone_GeneralPropertyPage::OnBrowseMasters() { ASSERT(!m_bIsPrimary); CDNSZonePropertyPageHolder* pZoneHolder = (CDNSZonePropertyPageHolder*)GetHolder();
if (!m_mastersEditor.BrowseFromDNSNamespace(pZoneHolder->GetComponentData(), pZoneHolder, TRUE, pZoneHolder->GetZoneNode()->GetServerNode()->GetDisplayName())) { DNSMessageBox(IDS_MSG_ZONE_MASTERS_BROWSE_FAIL); } }
void CDNSZone_GeneralPropertyPage::OnFindMastersNames() { m_mastersEditor.FindMastersNames(); }
void CDNSZone_GeneralPropertyPage::SetPrimaryDynamicUpdateComboVal(UINT nAllowsDynamicUpdate) { int nIndex = 0; switch (nAllowsDynamicUpdate) { case ZONE_UPDATE_OFF: nIndex = 0; break; case ZONE_UPDATE_UNSECURE: nIndex = 1; break; case ZONE_UPDATE_SECURE: nIndex = 2; break; default: ASSERT(FALSE); } VERIFY(CB_ERR != GetPrimaryDynamicUpdateCombo()->SetCurSel(nIndex));
}
UINT CDNSZone_GeneralPropertyPage::GetPrimaryDynamicUpdateComboVal() { int nIndex = GetPrimaryDynamicUpdateCombo()->GetCurSel(); ASSERT(nIndex != CB_ERR); UINT nVal = 0; switch (nIndex) { case 0: nVal = ZONE_UPDATE_OFF; break; case 1: nVal = ZONE_UPDATE_UNSECURE; break; case 2: nVal = ZONE_UPDATE_SECURE; break; default: ASSERT(FALSE); } return nVal; }
void CDNSZone_GeneralPropertyPage::ChangeUIControlHelper(CWnd* pChild, BOOL bEnable) { pChild->EnableWindow(bEnable); pChild->ShowWindow(bEnable); }
void CDNSZone_GeneralPropertyPage::ChangeUIControls() { // change button label
int nType; if (m_bIsPrimary) { nType = m_bDSIntegrated ? N_ZONE_TYPES_DS_PRIMARY : N_ZONE_TYPES_PRIMARY; } else { if (m_bIsStub) { nType = N_ZONE_TYPES_STUB; } else { nType = N_ZONE_TYPES_SECONDARY; } } m_typeStaticHelper.SetStateX(nType);
//
// file name controls (show for secondary and for non DS integrated primary and stub)
//
BOOL bNotDSIntegrated = (!m_bIsPrimary && !m_bIsStub) || (m_bIsPrimary && !m_bDSIntegrated) || (m_bIsStub && !m_bDSIntegrated); m_zoneStorageStaticHelper.SetToggleState(bNotDSIntegrated); // bNotDSIntegrated == bShowEdit
ChangeUIControlHelper(GetFileNameEdit(), bNotDSIntegrated); // bNotDSIntegrated == bShowEdit
//
// change primary zone controls
CComboBox* pPrimaryDynamicUpdateCombo = GetPrimaryDynamicUpdateCombo();
//
// see if the combo box had a selection in it and save it
//
UINT nAllowsDynamicUpdateSaved = ZONE_UPDATE_OFF; if (pPrimaryDynamicUpdateCombo->GetCurSel() != CB_ERR) { nAllowsDynamicUpdateSaved = GetPrimaryDynamicUpdateComboVal(); }
//
// set strings in the combo box
//
UINT nMaxAddCount = PRIMARY_DYN_UPD_COMBO_ITEM_COUNT;
//
// the last item in the combo box would be the "secure dynamic udate"
// which is valid only for DS integrated primaries
//
if (bNotDSIntegrated) { nMaxAddCount--; // remove the last one
}
VERIFY(LoadStringsToComboBox(_Module.GetModuleInstance(), pPrimaryDynamicUpdateCombo, IDS_ZONE_PRIMARY_DYN_UPD_OPTIONS, 256, nMaxAddCount));
//
// reset selection
//
if (bNotDSIntegrated && (nAllowsDynamicUpdateSaved == ZONE_UPDATE_SECURE)) { //
// the selected secure update otion is gone, so turn off secure update
//
nAllowsDynamicUpdateSaved = ZONE_UPDATE_OFF; } SetPrimaryDynamicUpdateComboVal(nAllowsDynamicUpdateSaved);
ChangeUIControlHelper(GetPrimaryDynamicUpdateStatic(), m_bIsPrimary); ChangeUIControlHelper(GetPrimaryDynamicUpdateCombo(), m_bIsPrimary);
//
// change secondary zone controls
//
GetIPLabel()->ShowWindow(!m_bIsPrimary); GetIPLabel()->EnableWindow(!m_bIsPrimary); m_mastersEditor.ShowUI(!m_bIsPrimary); CButton* pBrowseButton = GetMastersBrowseButton(); pBrowseButton->ShowWindow(!m_bIsPrimary); pBrowseButton->EnableWindow(!m_bIsPrimary); CButton* pFindMastersNamesButton = GetFindMastersNamesButton(); pFindMastersNamesButton->ShowWindow(!m_bIsPrimary); pFindMastersNamesButton->EnableWindow(!m_bIsPrimary && m_mastersEditor.GetCount()>0);
GetDlgItem(IDC_LOCAL_LIST_CHECK)->EnableWindow(m_bIsStub && !bNotDSIntegrated); GetDlgItem(IDC_LOCAL_LIST_CHECK)->ShowWindow(m_bIsStub && !bNotDSIntegrated);
GetDlgItem(IDC_AGING_STATIC)->EnableWindow(m_bIsPrimary); GetDlgItem(IDC_AGING_STATIC)->ShowWindow(m_bIsPrimary); GetDlgItem(IDC_AGING_BUTTON)->EnableWindow(m_bIsPrimary); GetDlgItem(IDC_AGING_BUTTON)->ShowWindow(m_bIsPrimary); }
void CDNSZone_GeneralPropertyPage::GetStorageName(CString& szDataStorageName) { //
// only for secondary ad for non DS integrated primary)
//
GetFileNameEdit()->GetWindowText(szDataStorageName); szDataStorageName.TrimLeft(); szDataStorageName.TrimRight(); }
///////////////////////////////////////////////////////////////////////////////
// CDNSZone_ZoneTransferPropertyPage
void CDNSZone_ZoneTransferPropertyPage::CDNSSecondariesIPEditor::OnChangeData() { CDNSZone_ZoneTransferPropertyPage* pPage = (CDNSZone_ZoneTransferPropertyPage*)GetParentWnd(); pPage->SetDirty(TRUE); }
BEGIN_MESSAGE_MAP(CDNSZone_ZoneTransferPropertyPage, CPropertyPageBase) ON_BN_CLICKED(IDC_CHECK_ALLOW_TRANSFERS, OnRadioSecSecureNone) ON_BN_CLICKED(IDC_RADIO_SECSECURE_OFF, OnRadioSecSecureOff) ON_BN_CLICKED(IDC_RADIO_SECSECURE_NS, OnRadioSecSecureNS) ON_BN_CLICKED(IDC_RADIO_SECSECURE_LIST, OnRadioSecSecureList) ON_BN_CLICKED(IDC_BUTTON_NOTIFY, OnButtonNotify) END_MESSAGE_MAP()
CDNSZone_ZoneTransferPropertyPage::CDNSZone_ZoneTransferPropertyPage() : CPropertyPageBase(IDD_ZONE_ZONE_TRANSFER_PAGE) { m_fNotifyLevel = (DWORD)-1; m_cNotify = 0; m_aipNotify = NULL; m_bStub = FALSE; }
CDNSZone_ZoneTransferPropertyPage::~CDNSZone_ZoneTransferPropertyPage() { if (m_aipNotify != NULL) free(m_aipNotify); }
BOOL CDNSZone_ZoneTransferPropertyPage::OnSetActive() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder();
m_bStub = pHolder->IsStubZoneUI(); GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS)->EnableWindow(!m_bStub); return CPropertyPageBase::OnSetActive(); }
void CDNSZone_ZoneTransferPropertyPage::OnButtonNotify() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
FIX_THREAD_STATE_MFC_BUG(); CDNSZoneNotifyDialog dlg(this, pZoneNode->GetZoneType() == DNS_ZONE_TYPE_SECONDARY, pHolder->GetComponentData());
if (IDOK == dlg.DoModal()) { //
// the dialog already updated the notify data
//
SetDirty(TRUE); } }
void CDNSZone_ZoneTransferPropertyPage::SyncUIRadioHelper(UINT nRadio) { BOOL bState = ((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->GetCheck(); GetNotifyButton()->EnableWindow(bState);
m_secondariesListEditor.EnableUI(IDC_RADIO_SECSECURE_LIST == nRadio, TRUE); if (IDC_RADIO_SECSECURE_LIST != nRadio) m_secondariesListEditor.Clear(); SetDirty(TRUE);
if (IDC_CHECK_ALLOW_TRANSFERS == nRadio) { ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_LIST))->EnableWindow(bState); ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_OFF))->EnableWindow(bState); ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_NS))->EnableWindow(bState); BOOL bRadioState = ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_LIST))->GetCheck(); m_secondariesListEditor.EnableUI(bRadioState && bState, TRUE); } }
int CDNSZone_ZoneTransferPropertyPage::SetRadioState(DWORD fSecureSecondaries) { int nRadio = 0; switch (fSecureSecondaries) { case ZONE_SECSECURE_NONE: nRadio = IDC_CHECK_ALLOW_TRANSFERS; ((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->SetCheck(FALSE); break; case ZONE_SECSECURE_LIST: nRadio = IDC_RADIO_SECSECURE_LIST; ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_LIST))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->SetCheck(TRUE); break; case ZONE_SECSECURE_OFF: nRadio = IDC_RADIO_SECSECURE_OFF; ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_OFF))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->SetCheck(TRUE); break; case ZONE_SECSECURE_NS: nRadio = IDC_RADIO_SECSECURE_NS; ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_NS))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->SetCheck(TRUE); break; } ASSERT(nRadio != 0); return nRadio; }
DWORD CDNSZone_ZoneTransferPropertyPage::GetRadioState() { int nRadio = 0; if (!((CButton*)GetDlgItem(IDC_CHECK_ALLOW_TRANSFERS))->GetCheck()) { nRadio = IDC_CHECK_ALLOW_TRANSFERS; } else { if (((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_OFF))->GetCheck()) { nRadio = IDC_RADIO_SECSECURE_OFF; } else if (((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_LIST))->GetCheck()) { nRadio = IDC_RADIO_SECSECURE_LIST; } else if (((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_NS))->GetCheck()) { nRadio = IDC_RADIO_SECSECURE_NS; } }
ASSERT(nRadio != 0); DWORD fSecureSecondaries = (DWORD)-1; switch (nRadio) { case IDC_CHECK_ALLOW_TRANSFERS: fSecureSecondaries = ZONE_SECSECURE_NONE; break; case IDC_RADIO_SECSECURE_LIST: fSecureSecondaries = ZONE_SECSECURE_LIST; break; case IDC_RADIO_SECSECURE_OFF: fSecureSecondaries = ZONE_SECSECURE_OFF; break; case IDC_RADIO_SECSECURE_NS: fSecureSecondaries = ZONE_SECSECURE_NS; break; } ASSERT(fSecureSecondaries != (DWORD)-1); return fSecureSecondaries; }
BOOL CDNSZone_ZoneTransferPropertyPage::OnInitDialog() { //
// NOTE: this control has to be initialized before the
// base class OnInitDialog is called because the
// base class OnInitDialog calls SetUIData() in
// this derived class which uses this control
//
VERIFY(m_secondariesListEditor.Initialize(this, GetParent(), IDC_BUTTON_UP, IDC_BUTTON_DOWN, IDC_BUTTON_ADD, IDC_BUTTON_REMOVE, IDC_IPEDIT, IDC_LIST));
CPropertyPageBase::OnInitDialog();
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
DWORD fSecureSecondaries; DWORD cSecondaries; PIP_ADDRESS aipSecondaries;
ASSERT(m_fNotifyLevel == (DWORD)-1); ASSERT(m_cNotify == 0); ASSERT(m_aipNotify == NULL);
pZoneNode->GetSecondariesInfo(&fSecureSecondaries, &cSecondaries, &aipSecondaries, &m_fNotifyLevel, &m_cNotify, &m_aipNotify);
BOOL bSecondaryZone = pZoneNode->GetZoneType() == DNS_ZONE_TYPE_SECONDARY || pZoneNode->GetZoneType() == DNS_ZONE_TYPE_STUB; if (bSecondaryZone) { //
// just to make sure here...
//
ASSERT(m_fNotifyLevel != ZONE_NOTIFY_ALL); if (m_fNotifyLevel == ZONE_NOTIFY_ALL) { m_fNotifyLevel = ZONE_NOTIFY_OFF; } }
if ( (m_cNotify > 0) && (m_aipNotify != NULL) ) { //
// make a deep copy
//
PIP_ADDRESS aipNotifyTemp = (DWORD*) malloc(sizeof(DWORD)*m_cNotify); if (aipNotifyTemp != NULL) { memcpy(aipNotifyTemp, m_aipNotify, sizeof(DWORD)*m_cNotify); m_aipNotify = aipNotifyTemp; } }
if ( (ZONE_SECSECURE_LIST == fSecureSecondaries) && (cSecondaries > 0) ) { m_secondariesListEditor.AddAddresses(aipSecondaries, cSecondaries); }
SyncUIRadioHelper(SetRadioState(fSecureSecondaries));
BOOL bListState = ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_LIST))->GetCheck(); BOOL bAllState = ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_OFF))->GetCheck(); BOOL bNSState = ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_NS))->GetCheck(); if (!bAllState && !bListState && !bNSState) { ((CButton*)GetDlgItem(IDC_RADIO_SECSECURE_OFF))->SetCheck(TRUE); }
SetDirty(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDNSZone_ZoneTransferPropertyPage::OnApply() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode();
// first commit possible zone type transition changes
if (!pHolder->ApplyGeneralPageChanges()) return FALSE;
if (!IsDirty()) return TRUE;
DWORD fSecureSecondaries = GetRadioState();
DWORD cSecondaries = 0; DWORD* aipSecondaries = NULL; if (fSecureSecondaries == ZONE_SECSECURE_LIST) { cSecondaries = m_secondariesListEditor.GetCount(); aipSecondaries = (cSecondaries > 0) ? (DWORD*) malloc(sizeof(DWORD)*cSecondaries) : NULL; if (aipSecondaries != NULL && cSecondaries > 0) { int nFilled = 0; m_secondariesListEditor.GetAddresses(aipSecondaries, cSecondaries, &nFilled); ASSERT(nFilled == (int)cSecondaries); } }
BOOL bRet = TRUE; // write to server
DNS_STATUS err = pZoneNode->ResetSecondaries(fSecureSecondaries, cSecondaries, aipSecondaries, m_fNotifyLevel, m_cNotify, m_aipNotify); if (err != 0) { DNSErrorDialog(err, IDS_MSG_ZONE_FAIL_UPDATE_ZONE_TRANSFERS); bRet = FALSE; }
if (aipSecondaries) { free (aipSecondaries); aipSecondaries = 0; } // all went fine
if (bRet) { SetDirty(FALSE); } return bRet; }
////////////////////////////////////////////////////////////////////////////
// CDNSZone_SOA_PropertyPage
void CDNS_SOA_SerialNumberEditGroup::OnEditChange() { m_pPage->SetDirty(TRUE);
//
// SOA serial numbers should be 32 bits in length
// if = 0xffffffff then we need to set it also because
// StrToUint() return 0xffffffff if the number is larger
//
if (GetVal() >= 0xffffffff) { SetVal(0xffffffff); } }
void CDNS_SOA_TimeIntervalEditGroup::OnEditChange() { m_pPage->SetDirty(TRUE); }
BEGIN_MESSAGE_MAP(CDNSZone_SOA_PropertyPage, CDNSRecordPropertyPage) ON_EN_CHANGE(IDC_PRIMARY_SERV_EDIT, OnPrimaryServerChange) ON_EN_CHANGE(IDC_RESP_PARTY_EDIT, OnResponsiblePartyChange) ON_EN_CHANGE(IDC_MIN_TTLEDIT, OnMinTTLChange) ON_BN_CLICKED(IDC_BROWSE_SERV_BUTTON, OnBrowseServer) ON_BN_CLICKED(IDC_BROWSE_PARTY_BUTTON, OnBrowseResponsibleParty) END_MESSAGE_MAP()
CDNSZone_SOA_PropertyPage::CDNSZone_SOA_PropertyPage(BOOL bZoneRoot) : CDNSRecordPropertyPage(IDD_RR_SOA) { m_pTempSOARecord = NULL; m_bZoneRoot = bZoneRoot; }
CDNSZone_SOA_PropertyPage::~CDNSZone_SOA_PropertyPage() { if (m_bZoneRoot && (m_pTempSOARecord != NULL)) delete m_pTempSOARecord; }
void _DisableDialogControls(HWND hWnd) { HWND hWndCurr = ::GetWindow(hWnd, GW_CHILD); if (hWndCurr != NULL) { ::ShowWindow(hWndCurr,FALSE); ::EnableWindow(hWndCurr,FALSE); hWndCurr = ::GetNextWindow(hWndCurr, GW_HWNDNEXT); while (hWndCurr) { ::ShowWindow(hWndCurr,FALSE); ::EnableWindow(hWndCurr,FALSE); hWndCurr = ::GetNextWindow(hWndCurr, GW_HWNDNEXT); } } }
void CDNSZone_SOA_PropertyPage::ShowErrorUI() { _DisableDialogControls(m_hWnd); CStatic* pErrorStatic = GetErrorStatic(); // need to move the error control to the center
CRect r; pErrorStatic->GetWindowRect(&r); ScreenToClient(r); int dx = r.right - r.left; int dy = r.bottom - r.top;
CRect rThis; GetClientRect(rThis); int x = ((rThis.right - rThis.left) - dx)/2; int y = 4*dy; r.top = y; r.bottom = y + dy; r.left = x; r.right = x + dx; pErrorStatic->MoveWindow(r, TRUE);
pErrorStatic->EnableWindow(TRUE); pErrorStatic->ShowWindow(TRUE); }
BOOL CDNSZone_SOA_PropertyPage::OnInitDialog() { CPropertyPageBase::OnInitDialog();
ASSERT(m_pTempSOARecord == NULL);
// create temporary record
if (m_bZoneRoot) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pZoneNode = pHolder->GetZoneNode(); if (pZoneNode->HasSOARecord()) { m_pTempSOARecord = pZoneNode->GetSOARecordCopy(); } else { // something is wrong, need to disable
ShowErrorUI(); } } else { // we are in the cache here...
CDNSRecordPropertyPageHolder* pHolder = (CDNSRecordPropertyPageHolder*)GetHolder(); m_pTempSOARecord = (CDNS_SOA_Record*)pHolder->GetTempDNSRecord(); }
// initialize controls
m_serialNumberEditGroup.m_pPage = this; VERIFY(m_serialNumberEditGroup.Initialize(this, IDC_SERIAL_NUMBER_EDIT,IDC_SERIAL_UP, IDC_SERIAL_DOWN)); m_serialNumberEditGroup.SetRange(0,(UINT)-1);
m_refreshIntervalEditGroup.m_pPage = this; m_retryIntervalEditGroup.m_pPage = this; m_expireIntervalEditGroup.m_pPage = this; m_minTTLIntervalEditGroup.m_pPage = this;
VERIFY(m_refreshIntervalEditGroup.Initialize(this, IDC_REFR_INT_EDIT, IDC_REFR_INT_COMBO,IDS_TIME_INTERVAL_UNITS)); VERIFY(m_retryIntervalEditGroup.Initialize(this, IDC_RETRY_INT_EDIT, IDC_RETRY_INT_COMBO,IDS_TIME_INTERVAL_UNITS)); VERIFY(m_expireIntervalEditGroup.Initialize(this, IDC_EXP_INT_EDIT, IDC_EXP_INT_COMBO,IDS_TIME_INTERVAL_UNITS)); VERIFY(m_minTTLIntervalEditGroup.Initialize(this, IDC_MINTTL_INT_EDIT, IDC_MINTTL_INT_COMBO, IDS_TIME_INTERVAL_UNITS));
HWND dialogHwnd = GetSafeHwnd();
// Disable IME support on the controls
ImmAssociateContext(::GetDlgItem(dialogHwnd, IDC_REFR_INT_EDIT), NULL); ImmAssociateContext(::GetDlgItem(dialogHwnd, IDC_RETRY_INT_EDIT), NULL); ImmAssociateContext(::GetDlgItem(dialogHwnd, IDC_EXP_INT_EDIT), NULL); ImmAssociateContext(::GetDlgItem(dialogHwnd, IDC_MINTTL_INT_EDIT), NULL); ImmAssociateContext(::GetDlgItem(dialogHwnd, IDC_SERIAL_NUMBER_EDIT), NULL);
// load data
SetUIData();
if (!m_bZoneRoot) { // we are in the cache here...
EnableDialogControls(m_hWnd, FALSE); }
SetDirty(FALSE); return TRUE; }
BOOL CDNSZone_SOA_PropertyPage::OnApply() { if (!IsDirty()) { return TRUE; } DNS_STATUS err = 0; if (m_bZoneRoot) { //
// we are in a real zone
//
CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); ASSERT(!pHolder->IsWizardMode());
//
// first commit possible zone type transition changes
//
if (!pHolder->ApplyGeneralPageChanges()) { return FALSE; }
if ((m_pTempSOARecord == NULL) || !IsDirty() || !pHolder->IsPrimaryZoneUI()) { return TRUE; }
//
// No need to verify success here because we don't return anything that isn't valid
//
err = GetUIDataEx(FALSE); if (err != 0) { return FALSE; }
err = pHolder->NotifyConsole(this); } else { //
// we are in the cache, that is read only...
//
return TRUE; }
if (err != 0) { DNSErrorDialog(err,IDS_MSG_ZONE_SOA_UPDATE_FAILED); return FALSE; } else { SetUIData(); SetDirty(FALSE); } return TRUE; // all is cool
}
BOOL CDNSZone_SOA_PropertyPage::OnPropertyChange(BOOL, long*) { ASSERT(m_pTempSOARecord != NULL); if (m_pTempSOARecord == NULL) return FALSE; DNS_STATUS err = 0; if (m_bZoneRoot) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); err = pHolder->GetZoneNode()->UpdateSOARecord(m_pTempSOARecord, NULL); } else { ASSERT(FALSE); } if (err != 0) GetHolder()->SetError(err); return (err == 0); }
void CDNSZone_SOA_PropertyPage::SetUIData() { CDNS_SOA_Record* pRecord = m_pTempSOARecord;
if (pRecord == NULL) return;
GetPrimaryServerEdit()->SetWindowText(pRecord->m_szNamePrimaryServer); GetResponsiblePartyEdit()->SetWindowText(pRecord->m_szResponsibleParty);
m_serialNumberEditGroup.SetVal(pRecord->m_dwSerialNo);
m_refreshIntervalEditGroup.SetVal(pRecord->m_dwRefresh); m_retryIntervalEditGroup.SetVal(pRecord->m_dwRetry); m_expireIntervalEditGroup.SetVal(pRecord->m_dwExpire); m_minTTLIntervalEditGroup.SetVal(pRecord->m_dwMinimumTtl);
GetTTLCtrl()->SetTTL(pRecord->m_dwTtlSeconds); if (m_bZoneRoot) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); EnableDialogControls(m_hWnd, pHolder->IsPrimaryZoneUI()); } }
DNS_STATUS CDNSZone_SOA_PropertyPage::GetUIDataEx(BOOL) { DNS_STATUS err = 0; CDNS_SOA_Record* pRecord = m_pTempSOARecord; if (pRecord == NULL) return err;
GetPrimaryServerEdit()->GetWindowText(pRecord->m_szNamePrimaryServer); GetResponsiblePartyEdit()->GetWindowText(pRecord->m_szResponsibleParty);
//
// Check to see if the Responsible Party field contains an '@'
//
if (-1 != pRecord->m_szResponsibleParty.Find(L'@')) { UINT nResult = DNSMessageBox(IDS_MSG_RESPONSIBLE_PARTY_CONTAINS_AT, MB_YESNOCANCEL | MB_ICONWARNING); if (IDYES == nResult) { //
// Replace '@' with '.'
//
pRecord->m_szResponsibleParty.Replace(L'@', L'.'); } else if (IDCANCEL == nResult) { //
// Don't make any changes but don't let the apply continue
//
err = DNS_ERROR_INVALID_NAME_CHAR; } else { //
// We will allow IDNO to continue to set the responsible party with the '@'
//
err = 0; } } pRecord->m_dwSerialNo = m_serialNumberEditGroup.GetVal(); pRecord->m_dwRefresh = m_refreshIntervalEditGroup.GetVal(); pRecord->m_dwRetry = m_retryIntervalEditGroup.GetVal(); pRecord->m_dwExpire = m_expireIntervalEditGroup.GetVal(); pRecord->m_dwMinimumTtl = m_minTTLIntervalEditGroup.GetVal();
GetTTLCtrl()->GetTTL(&(pRecord->m_dwTtlSeconds)); return err; }
void CDNSZone_SOA_PropertyPage::OnPrimaryServerChange() { SetDirty(TRUE); }
void CDNSZone_SOA_PropertyPage::OnResponsiblePartyChange() { SetDirty(TRUE);
}
void CDNSZone_SOA_PropertyPage::OnMinTTLChange() { SetDirty(TRUE); }
void CDNSZone_SOA_PropertyPage::OnBrowseServer() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNSBrowserDlg dlg(GetHolder()->GetComponentData(), GetHolder(), RECORD_A_AND_CNAME); if (IDOK == dlg.DoModal()) { CEdit* pEdit = GetPrimaryServerEdit(); pEdit->SetWindowText(dlg.GetSelectionString()); } }
void CDNSZone_SOA_PropertyPage::OnBrowseResponsibleParty() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNSBrowserDlg dlg(GetHolder()->GetComponentData(), GetHolder(), RECORD_RP); if (IDOK == dlg.DoModal()) { CEdit* pEdit = GetResponsiblePartyEdit(); pEdit->SetWindowText(dlg.GetSelectionString()); } }
////////////////////////////////////////////////////////////////////////////
// CWinsAdvancedDialog
class CWinsAdvancedDialog : public CHelpDialog { public: CWinsAdvancedDialog(CPropertyPageHolderBase* pHolder, BOOL bReverse);
// data
BOOL m_bNetBios; DWORD m_dwLookupTimeout; DWORD m_dwCacheTimeout;
protected: virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel();
DECLARE_MESSAGE_MAP() private: CPropertyPageHolderBase* m_pHolder; BOOL m_bReverse;
CButton* GetNetBiosCheck() { return (CButton*)GetDlgItem(IDC_NETBIOS_CHECK);}
CDNSTTLControl* GetCacheTimeoutTTLCtrl() { return (CDNSTTLControl*)GetDlgItem(IDC_CACHE_TIMEOUT_TTLEDIT);} CDNSTTLControl* GetLookupTimeoutTTLCtrl() { return (CDNSTTLControl*)GetDlgItem(IDC_LOOKUP_TIMEOUT_TTLEDIT);}
};
BEGIN_MESSAGE_MAP(CWinsAdvancedDialog, CHelpDialog) END_MESSAGE_MAP()
CWinsAdvancedDialog::CWinsAdvancedDialog(CPropertyPageHolderBase* pHolder, BOOL bReverse) : CHelpDialog(IDD_ZONE_WINS_ADVANCED, pHolder->GetComponentData()) { ASSERT(pHolder != NULL); m_pHolder = pHolder; m_bReverse = bReverse; m_bNetBios = FALSE; m_dwLookupTimeout = 0x0; m_dwCacheTimeout = 0x0; }
BOOL CWinsAdvancedDialog::OnInitDialog() { CHelpDialog::OnInitDialog(); m_pHolder->PushDialogHWnd(GetSafeHwnd());
if (m_bReverse) { GetNetBiosCheck()->SetCheck(m_bNetBios); } else { GetNetBiosCheck()->EnableWindow(FALSE); GetNetBiosCheck()->ShowWindow(FALSE); } GetCacheTimeoutTTLCtrl()->SetTTL(m_dwCacheTimeout); GetLookupTimeoutTTLCtrl()->SetTTL(m_dwLookupTimeout);
return TRUE; // return TRUE unless you set the focus to a control
}
void CWinsAdvancedDialog::OnCancel() { ASSERT(m_pHolder != NULL); m_pHolder->PopDialogHWnd(); CHelpDialog::OnCancel(); }
void CWinsAdvancedDialog::OnOK() { if (m_bReverse) { m_bNetBios = GetNetBiosCheck()->GetCheck(); } GetCacheTimeoutTTLCtrl()->GetTTL(&m_dwCacheTimeout); GetLookupTimeoutTTLCtrl()->GetTTL(&m_dwLookupTimeout);
ASSERT(m_pHolder != NULL); m_pHolder->PopDialogHWnd(); CHelpDialog::OnOK(); }
////////////////////////////////////////////////////////////////////////////
// CDNSZone_WINSBase_PropertyPage
BEGIN_MESSAGE_MAP(CDNSZone_WINSBase_PropertyPage, CDNSRecordPropertyPage) ON_BN_CLICKED(IDC_USE_WINS_RES_CHECK, OnUseWinsResolutionChange) ON_BN_CLICKED(IDC_NOT_REPL_CHECK, OnDoNotReplicateChange) END_MESSAGE_MAP()
CDNSZone_WINSBase_PropertyPage::CDNSZone_WINSBase_PropertyPage(UINT nIDTemplate) : CDNSRecordPropertyPage(nIDTemplate) { m_pTempRecord = NULL; m_action = none; m_iWINSMsg = 0; }
CDNSZone_WINSBase_PropertyPage::~CDNSZone_WINSBase_PropertyPage() { if (m_pTempRecord != NULL) delete m_pTempRecord; }
BOOL CDNSZone_WINSBase_PropertyPage::OnPropertyChange(BOOL, long*) { ASSERT(m_action != none); ASSERT(m_pTempRecord != NULL); if (m_pTempRecord == NULL) return FALSE;
CComponentDataObject* pComponentData = GetZoneHolder()->GetComponentData(); DNS_STATUS err = 0;
if (IsValidTempRecord()) { switch(m_action) { case remove: err = GetZoneNode()->DeleteWINSRecord(pComponentData); break; case add: err = GetZoneNode()->CreateWINSRecord(m_pTempRecord, pComponentData); break; case edit: err = GetZoneNode()->UpdateWINSRecord(m_pTempRecord, pComponentData); break; } } else { if (m_action == remove) { err = GetZoneNode()->DeleteWINSRecord(pComponentData); } else { err = ERROR_INVALID_DATA; } } if (err != 0) GetZoneHolder()->SetError(err); return (err == 0); }
CDNSZoneNode* CDNSZone_WINSBase_PropertyPage::GetZoneNode() { return GetZoneHolder()->GetZoneNode(); }
BOOL CDNSZone_WINSBase_PropertyPage::OnInitDialog() { CPropertyPageBase::OnInitDialog();
CDNSRootData* pRootData = (CDNSRootData*)GetHolder()->GetComponentData()->GetRootData(); ASSERT(pRootData != NULL); EnableTTLCtrl(pRootData->IsAdvancedView());
BOOL bUseWins = GetZoneNode()->HasWinsRecord(); // unabe disable the WINS checkbox
GetUseWinsCheck()->SetCheck(bUseWins); // get new temporary record
if (bUseWins) m_pTempRecord = GetZoneNode()->GetWINSRecordCopy(); else m_pTempRecord = GetZoneNode()->IsReverse() ? (CDNSRecord*)(new CDNS_NBSTAT_Record) : (CDNSRecord*)(new CDNS_WINS_Record); ASSERT(m_pTempRecord != NULL);
SetUIData(); SetDirty(FALSE); // EnableUI(bUseWins);
return TRUE; }
BOOL CDNSZone_WINSBase_PropertyPage::OnSetActive() { BOOL bRet = CDNSRecordPropertyPage::OnSetActive(); if (bRet) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); m_bPrimaryZone = pHolder->IsPrimaryZoneUI(); m_bStub = pHolder->IsStubZoneUI(); CDNS_WINS_Record* pRecord = (CDNS_WINS_Record*)m_pTempRecord; m_bLocalRecord = (pRecord->m_dwMappingFlag & DNS_WINS_FLAG_LOCAL); BOOL bUseWins = GetZoneNode()->HasWinsRecord();
if (bUseWins && m_bLocalRecord) { m_nState = wins_local_state; } else if (bUseWins && !m_bLocalRecord) { m_nState = wins_not_local_state; } else // (!bUseWins && !m_bLocalRecord) || (!bUseWins && m_bLocalRecord)
{ m_nState = no_wins_state; }
EnableUI();
CString szCheckText; if (m_bPrimaryZone) { m_nReplCheckTextID = IDS_CHECK_TEXT_NOT_REPLICATE; } szCheckText.LoadString(m_nReplCheckTextID); GetDoNotReplicateCheck()->SetWindowText((LPWSTR)(LPCWSTR)szCheckText); } return bRet; }
BOOL CDNSZone_WINSBase_PropertyPage::OnApply() { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); // first commit possible zone type transition changes
if (!pHolder->ApplyGeneralPageChanges()) return FALSE;
BOOL bUseWins = GetZoneNode()->HasWinsRecord(); // current state in the zone
BOOL bNewUseWins = GetUseWinsCheck()->GetCheck(); // current state in the UI
if (bUseWins && !bNewUseWins) { m_action = remove; } else if (!bUseWins && bNewUseWins) { m_action = add; } else if (bUseWins && bNewUseWins && IsDirty()) { m_action = edit; } if (m_action == none) return TRUE;
// No need to verify the return value here because we don't return anything except success
DNS_STATUS err = GetUIDataEx(FALSE); if (err != 0) { ASSERT(FALSE); return (err == 0); }
err = GetZoneHolder()->NotifyConsole(this); if (err != 0) { DNSErrorDialog(err, m_iWINSMsg); } else { // reset dirty flag!!!
} m_action = none; return (err == 0); }
void CDNSZone_WINSBase_PropertyPage::OnUseWinsResolutionChange() { SetDirty(TRUE);
if (m_bPrimaryZone) { EnableUI(GetUseWinsCheck()->GetCheck()); } else { switch (m_nState) { case wins_local_state : #ifdef DBG
ASSERT(!GetUseWinsCheck()->GetCheck()); ASSERT(GetUseWinsCheck()->IsWindowEnabled()); ASSERT(GetDoNotReplicateCheck()->GetCheck()); ASSERT(!GetDoNotReplicateCheck()->IsWindowEnabled()); #endif
m_nState = no_wins_state; break; case wins_not_local_state : // should never happen
#ifdef DBG
ASSERT(FALSE); #endif
break; case no_wins_state : #ifdef DBG
ASSERT(GetUseWinsCheck()->GetCheck()); ASSERT(GetUseWinsCheck()->IsWindowEnabled()); ASSERT(GetDoNotReplicateCheck()->GetCheck()); ASSERT(!GetDoNotReplicateCheck()->IsWindowEnabled()); #endif
m_nState = wins_local_state; break; default : // illegal state
#ifdef DBG
ASSERT(FALSE); #endif
break; } EnableUI(); } }
void CDNSZone_WINSBase_PropertyPage::OnDoNotReplicateChange() { SetDirty(TRUE); if (!m_bPrimaryZone) { switch (m_nState) { case wins_local_state : // should never happen
#ifdef DBG
ASSERT(FALSE); #endif
break; case wins_not_local_state : #ifdef DBG
ASSERT(GetUseWinsCheck()->GetCheck()); ASSERT(!GetUseWinsCheck()->IsWindowEnabled()); ASSERT(GetDoNotReplicateCheck()->GetCheck()); ASSERT(GetDoNotReplicateCheck()->IsWindowEnabled()); #endif
m_nState = wins_local_state; break; case no_wins_state : // should never happen
#ifdef DBG
ASSERT(FALSE); #endif
break; default : // illegal state
#ifdef DBG
ASSERT(FALSE); #endif
break; } EnableUI(); } }
void CDNSZone_WINSBase_PropertyPage::EnableUI(BOOL bEnable) { GetDoNotReplicateCheck()->EnableWindow(bEnable); GetAdvancedButton()->EnableWindow(bEnable); GetTTLCtrl()->EnableWindow(bEnable); }
void CDNSZone_WINSBase_PropertyPage::EnableUI() { if (m_bPrimaryZone) { GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(TRUE); if (!IsDirty()) { EnableUI(GetZoneNode()->HasWinsRecord()); } } else if (m_bStub) { GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(FALSE); EnableUI(FALSE); } else //secondary
{ GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(TRUE); switch (m_nState) { case wins_local_state : GetDoNotReplicateCheck()->SetCheck(TRUE); GetDoNotReplicateCheck()->EnableWindow(FALSE); GetUseWinsCheck()->SetCheck(TRUE); GetUseWinsCheck()->EnableWindow(TRUE); GetTTLCtrl()->EnableWindow(TRUE); GetAdvancedButton()->EnableWindow(TRUE); break; case wins_not_local_state : GetDoNotReplicateCheck()->SetCheck(FALSE); GetDoNotReplicateCheck()->EnableWindow(TRUE); GetUseWinsCheck()->SetCheck(TRUE); GetUseWinsCheck()->EnableWindow(FALSE); GetTTLCtrl()->EnableWindow(FALSE); GetAdvancedButton()->EnableWindow(FALSE); break; case no_wins_state : GetDoNotReplicateCheck()->SetCheck(TRUE); GetDoNotReplicateCheck()->EnableWindow(FALSE); GetUseWinsCheck()->SetCheck(FALSE); GetUseWinsCheck()->EnableWindow(TRUE); GetTTLCtrl()->EnableWindow(FALSE); GetAdvancedButton()->EnableWindow(FALSE); break; default : // Illegal state
break; } } }
void CDNSZone_WINSBase_PropertyPage::SetUIData() { GetTTLCtrl()->SetTTL(m_pTempRecord->m_dwTtlSeconds); }
DNS_STATUS CDNSZone_WINSBase_PropertyPage::GetUIDataEx(BOOL) { GetTTLCtrl()->GetTTL(&(m_pTempRecord->m_dwTtlSeconds)); return 0; }
////////////////////////////////////////////////////////////////////////////
// CDNSZone_WINS_PropertyPage
void CDNSZone_WINS_WinsServersIPEditor::OnChangeData() { CDNSZone_WINS_PropertyPage* pPage = (CDNSZone_WINS_PropertyPage*)GetParentWnd(); pPage->SetDirty(TRUE); }
BEGIN_MESSAGE_MAP(CDNSZone_WINS_PropertyPage, CDNSZone_WINSBase_PropertyPage) ON_BN_CLICKED(IDC_ADVANCED_BUTTON, OnAdvancedButton) END_MESSAGE_MAP()
CDNSZone_WINS_PropertyPage::CDNSZone_WINS_PropertyPage() : CDNSZone_WINSBase_PropertyPage(IDD_ZONE_WINS_PAGE) { m_iWINSMsg = IDS_MSG_ZONE_WINS_FAILED; m_nReplCheckTextID = IDS_CHECK_TEXT_USE_LOCAL_WINS; m_bStub = FALSE; }
BOOL CDNSZone_WINS_PropertyPage::OnInitDialog() { //
// NOTE: this control has to be initialized before the
// base class OnInitDialog is called because the
// base class OnInitDialog calls SetUIData() in
// this derived class which uses this control
//
VERIFY(m_winsServersEditor.Initialize(this, GetParent(), IDC_BUTTON_UP, IDC_BUTTON_DOWN, IDC_BUTTON_ADD, IDC_BUTTON_REMOVE, IDC_IPEDIT, IDC_LIST));
CDNSZone_WINSBase_PropertyPage::OnInitDialog(); return TRUE; }
void CDNSZone_WINS_PropertyPage::EnableUI(BOOL bEnable) { CDNSZone_WINSBase_PropertyPage::EnableUI(bEnable); m_winsServersEditor.EnableUI(bEnable); }
void CDNSZone_WINS_PropertyPage::EnableUI() { CDNSZone_WINSBase_PropertyPage::EnableUI();
if (m_bPrimaryZone) { if (!IsDirty()) { m_winsServersEditor.EnableUI(GetZoneNode()->HasWinsRecord()); } } else // secondary zone
{ switch (m_nState) { case wins_local_state : m_winsServersEditor.EnableUI(TRUE); break; case wins_not_local_state : m_winsServersEditor.EnableUI(FALSE); break; case no_wins_state : m_winsServersEditor.EnableUI(FALSE); break; default : // Illegal state
break; } } }
BOOL CDNSZone_WINS_PropertyPage::IsValidTempRecord() { CDNS_WINS_Record* pRecord = (CDNS_WINS_Record*)m_pTempRecord; return (pRecord->m_nWinsServerCount > 0); }
void CDNSZone_WINS_PropertyPage::SetUIData() { CDNSZone_WINSBase_PropertyPage::SetUIData(); CDNS_WINS_Record* pRecord = (CDNS_WINS_Record*)m_pTempRecord; GetDoNotReplicateCheck()->SetCheck(pRecord->m_dwMappingFlag & DNS_WINS_FLAG_LOCAL);
m_winsServersEditor.Clear(); if (pRecord->m_nWinsServerCount > 0) { DWORD* pTemp = (DWORD*)malloc(sizeof(DWORD)*pRecord->m_nWinsServerCount); if (pTemp) { for (int k=0; k< pRecord->m_nWinsServerCount; k++) pTemp[k] = pRecord->m_ipWinsServersArray[k]; m_winsServersEditor.AddAddresses(pTemp, pRecord->m_nWinsServerCount); free(pTemp); pTemp = 0; } } }
DNS_STATUS CDNSZone_WINS_PropertyPage::GetUIDataEx(BOOL bSilent) { DNS_STATUS err = CDNSZone_WINSBase_PropertyPage::GetUIDataEx(bSilent); CDNS_WINS_Record* pRecord = (CDNS_WINS_Record*)m_pTempRecord; pRecord->m_dwMappingFlag = GetDoNotReplicateCheck()->GetCheck() ? pRecord->m_dwMappingFlag |= DNS_WINS_FLAG_LOCAL : pRecord->m_dwMappingFlag &= ~DNS_WINS_FLAG_LOCAL;
pRecord->m_nWinsServerCount = m_winsServersEditor.GetCount(); if (pRecord->m_nWinsServerCount > 0) { DWORD* pTemp = (DWORD*)malloc(sizeof(DWORD)*pRecord->m_nWinsServerCount); if (pTemp) { int nFilled; m_winsServersEditor.GetAddresses(pTemp, pRecord->m_nWinsServerCount, &nFilled); ASSERT(nFilled == pRecord->m_nWinsServerCount); for (int k=0; k<nFilled; k++) pRecord->m_ipWinsServersArray.SetAtGrow(k, pTemp[k]);
free(pTemp); pTemp = 0; } else { err = ERROR_OUTOFMEMORY; } } return err; }
void CDNSZone_WINS_PropertyPage::OnAdvancedButton() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNS_WINS_Record* pRecord = (CDNS_WINS_Record*)m_pTempRecord; CWinsAdvancedDialog dlg(GetHolder(), FALSE); dlg.m_dwLookupTimeout = pRecord->m_dwLookupTimeout; dlg.m_dwCacheTimeout = pRecord->m_dwCacheTimeout; if (IDOK == dlg.DoModal() ) { pRecord->m_dwLookupTimeout = dlg.m_dwLookupTimeout; pRecord->m_dwCacheTimeout = dlg.m_dwCacheTimeout; SetDirty(TRUE); } }
////////////////////////////////////////////////////////////////////////////
// CDNSZone_NBSTAT_PropertyPage
BEGIN_MESSAGE_MAP(CDNSZone_NBSTAT_PropertyPage, CDNSZone_WINSBase_PropertyPage) ON_EN_CHANGE(IDC_DOMAIN_NAME_EDIT, OnDomainNameEditChange) ON_BN_CLICKED(IDC_ADVANCED_BUTTON, OnAdvancedButton) END_MESSAGE_MAP()
CDNSZone_NBSTAT_PropertyPage::CDNSZone_NBSTAT_PropertyPage() : CDNSZone_WINSBase_PropertyPage(IDD_ZONE_NBSTAT_PAGE) { m_iWINSMsg = IDS_MSG_ZONE_NBSTAT_FAILED; m_nReplCheckTextID = IDS_CHECK_TEXT_USE_LOCAL_WINSR; }
void CDNSZone_NBSTAT_PropertyPage::OnDomainNameEditChange() { SetDirty(TRUE); }
void CDNSZone_NBSTAT_PropertyPage::EnableUI(BOOL bEnable) { CDNSZone_WINSBase_PropertyPage::EnableUI(bEnable); GetDomainNameEdit()->EnableWindow(bEnable); }
void CDNSZone_NBSTAT_PropertyPage::EnableUI() { CDNSZone_WINSBase_PropertyPage::EnableUI();
if (m_bPrimaryZone) { GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(TRUE); GetDomainNameEdit()->EnableWindow(GetZoneNode()->HasWinsRecord()); } else if (m_bStub) { GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(FALSE); EnableUI(FALSE); } else // secondary zone
{ GetDlgItem(IDC_USE_WINS_RES_CHECK)->EnableWindow(TRUE); switch (m_nState) { case wins_local_state : GetDomainNameEdit()->EnableWindow(TRUE); break; case wins_not_local_state : GetDomainNameEdit()->EnableWindow(FALSE); break; case no_wins_state : GetDomainNameEdit()->EnableWindow(FALSE); break; default : // Illegal state
break; } } }
BOOL CDNSZone_NBSTAT_PropertyPage::IsValidTempRecord() { CDNS_NBSTAT_Record* pRecord = (CDNS_NBSTAT_Record*)m_pTempRecord; CString szTemp = pRecord->m_szNameResultDomain; szTemp.TrimLeft(); szTemp.TrimRight(); return (!szTemp.IsEmpty()); }
void CDNSZone_NBSTAT_PropertyPage::SetUIData() { CDNSZone_WINSBase_PropertyPage::SetUIData(); CDNS_NBSTAT_Record* pRecord = (CDNS_NBSTAT_Record*)m_pTempRecord; GetDoNotReplicateCheck()->SetCheck(pRecord->m_dwMappingFlag & DNS_WINS_FLAG_LOCAL);
// strip out the "in-addr.arpa" suffix
CString szTemp = pRecord->m_szNameResultDomain; //VERIFY(RemoveInAddrArpaSuffix(szTemp.GetBuffer(1)));
//szTemp.ReleaseBuffer();
GetDomainNameEdit()->SetWindowText(szTemp); }
DNS_STATUS CDNSZone_NBSTAT_PropertyPage::GetUIDataEx(BOOL bSilent) { DNS_STATUS err = CDNSZone_WINSBase_PropertyPage::GetUIDataEx(bSilent); CDNS_NBSTAT_Record* pRecord = (CDNS_NBSTAT_Record*)m_pTempRecord; pRecord->m_dwMappingFlag = GetDoNotReplicateCheck()->GetCheck() ? pRecord->m_dwMappingFlag |= DNS_WINS_FLAG_LOCAL : pRecord->m_dwMappingFlag &= ~DNS_WINS_FLAG_LOCAL;
GetDomainNameEdit()->GetWindowText(pRecord->m_szNameResultDomain); return err; }
void CDNSZone_NBSTAT_PropertyPage::OnAdvancedButton() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); FIX_THREAD_STATE_MFC_BUG();
CDNS_NBSTAT_Record* pRecord = (CDNS_NBSTAT_Record*)m_pTempRecord; CWinsAdvancedDialog dlg(GetHolder(), TRUE); dlg.m_dwLookupTimeout = pRecord->m_dwLookupTimeout; dlg.m_dwCacheTimeout = pRecord->m_dwCacheTimeout; dlg.m_bNetBios = pRecord->m_dwMappingFlag & DNS_WINS_FLAG_SCOPE; if (IDOK == dlg.DoModal()) { pRecord->m_dwLookupTimeout = dlg.m_dwLookupTimeout; pRecord->m_dwCacheTimeout = dlg.m_dwCacheTimeout; pRecord->m_dwMappingFlag = dlg.m_bNetBios ? pRecord->m_dwMappingFlag |= DNS_WINS_FLAG_SCOPE : pRecord->m_dwMappingFlag &= ~DNS_WINS_FLAG_SCOPE; SetDirty(TRUE);
} }
///////////////////////////////////////////////////////////////////////////////
// CDNSZoneNameServersPropertyPage
BOOL CDNSZoneNameServersPropertyPage::OnSetActive() { BOOL bRet = CDNSNameServersPropertyPage::OnSetActive(); if (bRet) { CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); BOOL bReadOnly = !pHolder->IsPrimaryZoneUI(); if (m_bReadOnly != bReadOnly) { m_bReadOnly = bReadOnly; EnableButtons(!m_bReadOnly); } } return bRet; }
void CDNSZoneNameServersPropertyPage::ReadRecordNodesList() { ASSERT(m_pCloneInfoList != NULL); CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pDomainNode = pHolder->GetZoneNode(); SetDomainNode(pDomainNode); pDomainNode->GetNSRecordNodesInfo(m_pCloneInfoList); }
BOOL CDNSZoneNameServersPropertyPage::WriteNSRecordNodesList() { ASSERT(m_pCloneInfoList != NULL); CDNSZonePropertyPageHolder* pHolder = (CDNSZonePropertyPageHolder*)GetHolder(); CDNSZoneNode* pDomainNode = pHolder->GetZoneNode(); return pDomainNode->UpdateNSRecordNodesInfo(m_pCloneInfoList, pHolder->GetComponentData()); }
///////////////////////////////////////////////////////////////////////////////
// CDNSZonePropertyPageHolder
CDNSZonePropertyPageHolder::CDNSZonePropertyPageHolder(CCathegoryFolderNode* pFolderNode, CDNSZoneNode* pZoneNode, CComponentDataObject* pComponentData) : CPropertyPageHolderBase(pFolderNode, pZoneNode, pComponentData) { ASSERT(pComponentData != NULL); ASSERT(pFolderNode != NULL); ASSERT(pFolderNode == GetContainerNode()); ASSERT(pZoneNode != NULL); ASSERT(pZoneNode == GetZoneNode());
m_bAutoDeletePages = FALSE; // we have the pages as embedded members
int nCurrPage = 0; m_nGenPage = -1; m_nSOAPage = -1; m_nWINSorWINSRPage = -1; m_nNSPage = -1;
// add pages
m_nGenPage = nCurrPage; AddPageToList((CPropertyPageBase*)&m_generalPage); nCurrPage++;
m_nSOAPage = nCurrPage; AddPageToList((CPropertyPageBase*)&m_SOARecordPage); nCurrPage++; m_nNSPage = nCurrPage; AddPageToList((CPropertyPageBase*)&m_nameServersPage); nCurrPage++;
if (pZoneNode->IsReverse()) { m_nWINSorWINSRPage = nCurrPage; AddPageToList((CPropertyPageBase*)&m_NBSTATRecordPage); nCurrPage++; } else { m_nWINSorWINSRPage = nCurrPage; AddPageToList((CPropertyPageBase*)&m_WINSRecordPage); nCurrPage++; }
AddPageToList((CPropertyPageBase*)&m_zoneTransferPage);
// security page added only if needed
m_pAclEditorPage = NULL; if (pZoneNode->IsDSIntegrated()) { CString szPath; pZoneNode->GetServerNode()->CreateDsZoneLdapPath(pZoneNode, szPath); if (!szPath.IsEmpty()) m_pAclEditorPage = CAclEditorPage::CreateInstance(szPath, this); }
// determine if we need/can have advanced view
CDNSRootData* pRootData = (CDNSRootData*)pComponentData->GetRootData(); ASSERT(pRootData != NULL); m_bAdvancedView = pRootData->IsAdvancedView();
}
CDNSZonePropertyPageHolder::~CDNSZonePropertyPageHolder() { if (m_pAclEditorPage != NULL) delete m_pAclEditorPage; }
int CDNSZonePropertyPageHolder::OnSelectPageMessage(long nPageCode) { TRACE(_T("CDNSZonePropertyPageHolder::OnSelectPageMessage()\n"));
switch (nPageCode) { case ZONE_HOLDER_GEN: return m_nGenPage; case ZONE_HOLDER_SOA: return m_nSOAPage; case ZONE_HOLDER_NS: return m_nNSPage; case ZONE_HOLDER_WINS: return m_nWINSorWINSRPage; } return -1; }
HRESULT CDNSZonePropertyPageHolder::OnAddPage(int nPage, CPropertyPageBase*) { // add the ACL editor page after the last, if present
if ( (nPage != -1) || (m_pAclEditorPage == NULL) ) return S_OK;
// add the ACLU page
HPROPSHEETPAGE hPage = m_pAclEditorPage->CreatePage(); if (hPage == NULL) return E_FAIL; // add the raw HPROPSHEETPAGE to sheet, not in the list
return AddPageToSheetRaw(hPage); }
|