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.
 
 
 
 
 
 

703 lines
25 KiB

/////////////////////////////////////////////////////////////////////////////
// ZONEWIZ.CPP
//
// Handle CreateNewZone wizard
//
CZoneWiz * CZoneWiz::s_pThis = NULL;
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK CZoneWiz::DlgProcWiz0(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
POINT ptMouse;
RECT rc;
int nCmdShow;
int cch, cch2;
TCHAR szT[MAX_PATH];
Assert(s_pThis != NULL);
switch (uMsg)
{
case WM_INITDIALOG:
UNREF(lParam);
Assert(s_pThis->m_pParentServer != NULL);
Assert(s_pThis->m_hwndWiz == NULL);
s_pThis->m_hwndWiz = GetParent(hdlg);
Assert(IsWindow(s_pThis->m_hwndWiz));
PropertySheet_InitWindowPos(s_pThis->m_hwndWiz, 140, 100);
s_pThis->SetWizButtons(0);
s_pThis->m_hwndDragFinger = HGetDlgItem(hdlg, IDC_ICON_FINGERDRAG);
s_pThis->m_hwndEditServerInit = HGetDlgItem(hdlg, IDC_EDIT_SERVER);
s_pThis->m_hwndEditZoneInit = HGetDlgItem(hdlg, IDC_EDIT_ZONENAME);
break;
case WM_NOTIFY:
Assert(lParam);
switch (((NMHDR *)lParam)->code)
{
case PSN_SETACTIVE:
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
case PSN_KILLACTIVE:
CchGetWindowText(s_pThis->m_hwndEditZoneInit, s_pThis->m_szZoneName, LENGTH(s_pThis->m_szZoneName));
break;
} // switch
return 0;
case UN_UPDATECONTROLS:
nCmdShow = SW_HIDE;
switch (s_pThis->m_dwZoneType)
{
case DNS_ZONE_TYPE_SECONDARY:
{
SendDlgItemMessage (hdlg, IDC_EDIT_ZONENAME, EM_SETREADONLY,
FALSE, 0);
SendDlgItemMessage (hdlg, IDC_EDIT_SERVER, EM_SETREADONLY,
FALSE, 0);
EnableWindow (HGetDlgItem(hdlg, IDC_STATIC_ZONE), TRUE);
EnableWindow (HGetDlgItem(hdlg, IDC_STATIC_SERVER), TRUE);
cch = CchGetWindowText(s_pThis->m_hwndEditServerInit, szT, LENGTH(szT));
cch2 = CchGetWindowText(s_pThis->m_hwndEditZoneInit, szT, LENGTH(szT));
if ((cch) && (cch2)) {
s_pThis->SetWizButtons(PSWIZB_NEXT);
} else {
s_pThis->SetWizButtons(0);
}
nCmdShow = SW_SHOW;
}
break;
case DNS_ZONE_TYPE_PRIMARY:
SendDlgItemMessage (hdlg, IDC_EDIT_ZONENAME, EM_SETREADONLY,
TRUE, 0);
SendDlgItemMessage (hdlg, IDC_EDIT_SERVER, EM_SETREADONLY,
TRUE, 0);
EnableWindow (HGetDlgItem(hdlg, IDC_STATIC_ZONE), FALSE);
EnableWindow (HGetDlgItem(hdlg, IDC_STATIC_SERVER), FALSE);
nCmdShow = SW_HIDE;
s_pThis->SetWizButtons(PSWIZB_NEXT);
default:
break;
} // switch
ShowWindow(s_pThis->m_hwndDragFinger, nCmdShow);
ShowWindow(HGetDlgItem(hdlg, IDC_STATIC_DESCRIPTIONFRAME), nCmdShow);
ShowWindow(HGetDlgItem(hdlg, IDC_STATIC_DESCRIPTIONTEXT), nCmdShow);
break;
case WM_COMMAND:
switch (HIWORD(wParam))
{
case EN_CHANGE:
{
if ((HWND(lParam) == s_pThis->m_hwndEditServerInit) ||
(HWND(lParam) == s_pThis->m_hwndEditZoneInit)) {
TCHAR szT[MAX_PATH];
int cch, cch2;
cch = CchGetWindowText(s_pThis->m_hwndEditServerInit, szT, LENGTH(szT));
cch2 = CchGetWindowText(s_pThis->m_hwndEditZoneInit, szT, LENGTH(szT));
if ((cch) && (cch2)) {
s_pThis->SetWizButtons(PSWIZB_NEXT);
} else {
s_pThis->SetWizButtons(0);
}
}
}
break;
case BN_CLICKED:
switch (LOWORD(wParam))
{
case IDC_RADIO_PRIMARY:
if (IsDlgButtonChecked(hdlg, IDC_RADIO_PRIMARY))
s_pThis->m_dwZoneType = DNS_ZONE_TYPE_PRIMARY;
break;
case IDC_RADIO_SECONDARY:
s_pThis->m_dwZoneType = DNS_ZONE_TYPE_SECONDARY;
break;
} // switch
default:
break;
}
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
case WM_LBUTTONDOWN:
GetCursorPos(OUT &ptMouse);
GetWindowRect(s_pThis->m_hwndDragFinger, OUT &rc);
if (PtInRect(&rc, ptMouse))
{
ShowWindow(s_pThis->m_hwndDragFinger, SW_HIDE);
SetCapture(hdlg);
SetCursor(hcursorFinger);
s_pThis->m_fDragMode = TRUE;
GetWindowRect(s_pThis->m_hwndWiz, OUT &s_pThis->m_rcDialog);
GetWindowRect(TreeView.m_hWnd, OUT &s_pThis->m_rcTreeView);
s_pThis->m_pZoneRootDomainInit = NULL;
s_pThis->m_pSOAInit = NULL;
}
return 0;
case WM_LBUTTONUP:
if (!s_pThis->m_fDragMode)
break;
ReleaseCapture();
ShowWindow(s_pThis->m_hwndDragFinger, SW_SHOW);
SetCursor(hcursorArrow);
InvalidateRect(TreeView.m_hWnd, &s_pThis->m_rcTreeItem, TRUE);
s_pThis->m_fDragMode = FALSE;
s_pThis->m_pSOAInit = NULL;
if (s_pThis->m_pZoneRootDomainInit != NULL)
{
// make sure the zone has data
s_pThis->m_pZoneRootDomainInit->m_pParentServer->LockServer();
s_pThis->m_pZoneRootDomainInit->Refresh();
s_pThis->m_pZoneRootDomainInit->m_pParentServer->UnlockServer();
// Find the SOA record for that zone
CDnsRpcRecord * pDRR = s_pThis->m_pZoneRootDomainInit->m_pDRR;
while (pDRR != NULL)
{
Assert(pDRR->m_pDnsRecord != NULL);
if (pDRR->m_pDnsRecord->wType == DNS_RECORDTYPE_SOA)
{
AssertSz(s_pThis->m_pSOAInit == NULL,
"Only one SOA record is allowed");
s_pThis->m_pSOAInit = pDRR->m_pDnsRecord;
}
pDRR = pDRR->m_pNextRecord;
} // while
Trace1(s_pThis->m_pSOAInit == NULL ? (mskTraceInfo | mskTraceDNS)
: mskTraceNone,
"\nINFO: No SOA record found in %s",
s_pThis->m_pZoneRootDomainInit->PchGetFullNameA());
} // if
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
return 0;
case WM_MOUSEMOVE:
if (!s_pThis->m_fDragMode)
break;
Report(GetCapture() == hdlg);
GetCursorPos(OUT &ptMouse);
if (PtInRect(&s_pThis->m_rcDialog, ptMouse))
{
SetCursor(hcursorFinger);
}
else if (PtInRect(&s_pThis->m_rcTreeView, ptMouse))
{
MOUSEHITTESTINFO mht;
HDC hdcTreeView;
HCURSOR hcursor;
mht.hwndFrom = hdlg;
mht.ptMouse = ptMouse;
mht.pvParam = &rc; // Rectangle of the tree item under the mouse
mht.HtResult.tv.hti = NULL; // Just in case
LSendMessage(TreeView.m_hWnd, UM_MOUSEHITTEST, 0, INOUT (LPARAM)&mht);
hcursor = hcursorFinger;
if (mht.HtResult.tv.hti == s_pThis->m_htiOld)
{
if (mht.HtResult.tv.hti == NULL)
goto ClearText;
return 0;
}
// Target has changed
if (s_pThis->m_htiOld != NULL) {
InvalidateRect(TreeView.m_hWnd, &s_pThis->m_rcTreeItem, TRUE);
}
s_pThis->m_htiOld = mht.HtResult.tv.hti;
if (mht.HtResult.tv.hti != NULL)
{
Assert(mht.HtResult.tv.pTreeItem != NULL);
DebugCode( mht.HtResult.tv.pTreeItem->AssertValid(); )
rc.right++;
hdcTreeView = GetDC(TreeView.m_hWnd);
FrameRect(hdcTreeView, &rc, hbrWindowText);
ReleaseDC(TreeView.m_hWnd, hdcTreeView);
s_pThis->m_rcTreeItem = rc;
if (mht.HtResult.tv.pTreeItem->QueryInterface() == ITreeItem::IID_CZoneRootDomain)
{
s_pThis->m_pZoneRootDomainInit = (CZoneRootDomain *)mht.HtResult.tv.pTreeItem;
if (!(s_pThis->m_pZoneRootDomainInit->m_pZoneInfo->fAutoCreated) &&
(s_pThis->m_pZoneRootDomainInit->m_pZoneInfo->dwZoneType != DNS_ZONE_TYPE_CACHE)) {
FSetWindowText(s_pThis->m_hwndEditServerInit, s_pThis->m_pZoneRootDomainInit->PchGetServerNameA());
FSetWindowText(s_pThis->m_hwndEditZoneInit, s_pThis->m_pZoneRootDomainInit->PchGetFullNameA());
SetCursor(hcursorFinger);
return 0;
} else {
s_pThis->m_pZoneRootDomainInit = NULL;
}
}
hcursor = hcursorFingerNo;
ClearText:
FSetWindowText(s_pThis->m_hwndEditServerInit, szNull);
FSetWindowText(s_pThis->m_hwndEditZoneInit, szNull);
} // if
SetCursor(hcursor);
} // if
else
{
SetCursor(hcursorNo);
} // if...else
return 0;
default:
return FALSE;
} // switch
return TRUE;
} // CZoneWiz::DlgProcWiz0
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK CZoneWiz::DlgProcWiz1(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
DWORD dwWizButtons;
char szSuffix[MAX_PATH];
switch (uMsg)
{
case WM_INITDIALOG:
UNREF(lParam);
Assert(s_pThis != NULL);
Assert(IsWindow(s_pThis->m_hwndWiz));
s_pThis->m_hwndEditZoneName = HGetDlgItem(hdlg,
IDC_EDIT_ZONENAME);
s_pThis->m_hwndEditDatabaseName = HGetDlgItem(hdlg,
IDC_EDIT_DATABASEFILE);
FSetWindowText(s_pThis->m_hwndEditZoneName, s_pThis->m_szZoneName);
FSetWindowText(s_pThis->m_hwndEditDatabaseName, s_pThis->m_szDatabaseName);
return TRUE;
case UN_UPDATECONTROLS:
dwWizButtons = PSWIZB_BACK | PSWIZB_NEXT;
if (!s_pThis->m_szZoneName[0] || !s_pThis->m_szDatabaseName[0]) {
dwWizButtons &= ~PSWIZB_NEXT;
}
s_pThis->SetWizButtons(dwWizButtons);
return 0;
case WM_NOTIFY:
Assert(lParam);
switch (((NMHDR *)lParam)->code)
{
case PSN_SETACTIVE:
if (s_pThis->m_pZoneRootDomainInit != NULL)
{
Assert(s_pThis->m_pZoneRootDomainInit->m_pZoneInfo != NULL);
if (s_pThis->m_szZoneName[0] == 0)
FSetWindowText(s_pThis->m_hwndEditZoneName,
s_pThis->m_pZoneRootDomainInit->PchGetFullNameA());
if (s_pThis->m_szDatabaseName[0] == 0)
FSetWindowText(s_pThis->m_hwndEditDatabaseName,
s_pThis->m_pZoneRootDomainInit->m_pZoneInfo->pszDataFile);
}
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
} // switch
return 0;
case WM_COMMAND:
switch (HIWORD(wParam))
{
case EN_CHANGE:
if ((HWND)lParam == s_pThis->m_hwndEditDatabaseName)
{
CchGetWindowText((HWND)lParam, s_pThis->m_szDatabaseName, LENGTH(s_pThis->m_szDatabaseName));
(void)FStripSpaces(s_pThis->m_szDatabaseName);
}
else
{
Assert((HWND)lParam == s_pThis->m_hwndEditZoneName);
CchGetWindowText((HWND)lParam, s_pThis->m_szZoneName, LENGTH(s_pThis->m_szZoneName));
(void)FStripSpaces(s_pThis->m_szZoneName);
}
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
case EN_SETFOCUS:
if ((HWND)lParam == s_pThis->m_hwndEditDatabaseName)
{
if (!s_pThis->m_szDatabaseName[0])
{
CchLoadString (IDS_DATABASE_SUFFIX, szSuffix, sizeof(szSuffix));
strcpy (s_pThis->m_szDatabaseName, s_pThis->m_szZoneName);
strcat (s_pThis->m_szDatabaseName, szSuffix);
FSetWindowText((HWND)lParam, s_pThis->m_szDatabaseName);
LSendMessage((HWND)lParam, EM_SETSEL, 0, -1);
}
}
break;
} // switch
break;
default:
return FALSE;
} // switch
return TRUE;
} // CZoneWiz::DlgProcWiz1
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK CZoneWiz::DlgProcWiz2(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
UNREF(lParam);
Assert(s_pThis != NULL);
Assert(IsWindow(s_pThis->m_hwndWiz));
s_pThis->m_hwndIpList = HGetDlgItem(hdlg, IDC_IPLIST);
IpListIpEdit_SetButtons(s_pThis->m_hwndIpList, HGetDlgItem(hdlg, IDC_IPEDIT),
IDC_BUTTON_MOVEUP, IDC_BUTTON_MOVEDOWN, IDC_BUTTON_ADD, IDC_BUTTON_REMOVE);
// Clear the list
IpList_SetList(s_pThis->m_hwndIpList, 0, NULL);
break;
case UN_UPDATECONTROLS:
s_pThis->SetWizButtons(IpList_IsEmpty(s_pThis->m_hwndIpList) ? PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
break;
case WM_COMMAND:
IpListIpEdit_HandleButtonCommand(s_pThis->m_hwndIpList, wParam, lParam);
if (wParam == IDC_BUTTON_ADD || wParam == IDC_BUTTON_REMOVE)
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
case WM_NOTIFY:
Assert(lParam);
switch (((NMHDR *)lParam)->code)
{
case PSN_SETACTIVE:
if (s_pThis->m_dwZoneType != DNS_ZONE_TYPE_SECONDARY)
{
// Skip to the next page
PropPage_SetReturnValue(hdlg, -1);
return TRUE;
}
if ((s_pThis->m_pZoneRootDomainInit != NULL) && IpList_IsEmpty(s_pThis->m_hwndIpList))
{
const DNS_SERVER_INFO * pServerInfo;
Assert(s_pThis->m_pZoneRootDomainInit->m_pParentServer != NULL);
pServerInfo = s_pThis->m_pZoneRootDomainInit->m_pParentServer->m_pServerInfo;
if (pServerInfo->aipListenAddrs ) {
IpList_SetList(
s_pThis->m_hwndIpList,
pServerInfo->aipListenAddrs->cAddrCount,
pServerInfo->aipListenAddrs->aipAddrs);
}
}
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
} // switch
break;
default:
return FALSE;
} // switch
return TRUE;
} // CZoneWiz::DlgProcWiz2
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK CZoneWiz::DlgProcWiz3(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
const IRRT rgIrrtSoa[2] = { iRRT_SOA, iRRT_Nil };
switch (uMsg)
{
case WM_INITDIALOG:
UNREF(lParam);
Assert(s_pThis != NULL);
g_ResourceRecordDlgHandler.OnInitDialog(hdlg, rgIrrtSoa);
Assert(s_pThis->m_pParentServer != NULL);
Assert(s_pThis->m_pParentServer->m_pServerInfo != NULL);
if (s_pThis->m_pSOAInit == NULL)
{
char szT[cchDnsNameMax2];
const char * pchServerName = s_pThis->m_pParentServer->m_pServerInfo->pszServerName;
const char * pchUserName;
char szServer[64];
char szRP[64];
if (pchServerName == NULL) {
CchLoadString (IDS_SERVER_NAME, szServer, LENGTH(szServer));
pchServerName = szRP;
}
FSetDlgItemText(hdlg, IDC_EDIT0, pchServerName);
pchUserName = getenv("USERNAME");
if (pchUserName == NULL) {
CchLoadString (IDS_RESPONSIBLE, szRP, LENGTH(szRP));
pchUserName = szRP;
wsprintf(szT, "%s.%s", pchUserName, pchServerName);
}
FSetDlgItemText(hdlg, IDC_EDIT1, szT);
}
break;
case UN_UPDATECONTROLS:
g_ResourceRecordDlgHandler.OnUpdateControls();
break;
case WM_NOTIFY:
Assert(lParam);
switch (((NMHDR *)lParam)->code)
{
case PSN_SETACTIVE:
if (s_pThis->m_pSOAInit != NULL)
{
g_ResourceRecordDlgHandler.InitRecordData(s_pThis->m_pSOAInit);
s_pThis->m_pSOAInit = NULL;
}
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
if (s_pThis->m_dwZoneType == DNS_ZONE_TYPE_SECONDARY)
{
s_pThis->m_fSOADataValid =
g_ResourceRecordDlgHandler.FGetRecordData(
OUT (DNS_RPC_RECORD *)s_pThis->m_rgbSOA,
sizeof(s_pThis->m_rgbSOA));
// Skip to the next page
PropPage_SetReturnValue(hdlg, -1);
return TRUE;
}
s_pThis->SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
break;
case PSN_WIZNEXT:
g_ResourceRecordDlgHandler.OnUpdateControls();
if (!s_pThis->m_fSOADataValid) {
s_pThis->m_fSOADataValid =
g_ResourceRecordDlgHandler.FGetRecordData(
OUT (DNS_RPC_RECORD *)s_pThis->m_rgbSOA,
sizeof(s_pThis->m_rgbSOA));
}
} // switch
return 0;
case WM_COMMAND:
if (HIWORD(wParam) != EN_UPDATE && HIWORD(wParam) != EN_CHANGE)
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
break;
default:
return FALSE;
} // switch
return TRUE;
} // CZoneWiz::DlgProcWiz3
/////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK CZoneWiz::DlgProcWiz4(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
UNREF(lParam);
Assert(s_pThis != NULL);
break;
case UN_UPDATECONTROLS:
g_ResourceRecordDlgHandler.OnUpdateControls();
break;
case WM_NOTIFY:
Assert(lParam);
switch (((NMHDR *)lParam)->code)
{
case PSN_SETACTIVE:
LSendMessage(hdlg, UN_UPDATECONTROLS, 0, 0);
s_pThis->SetWizButtons(PSWIZB_BACK | PSWIZB_FINISH);
break;
case PSN_WIZFINISH:
g_ResourceRecordDlgHandler.OnUpdateControls();
if (!s_pThis->RpcCreateZone()) {
SetWindowLong (hdlg, DWL_MSGRESULT, TRUE);
PropSheet_SetCurSelByID (GetParent(hdlg),
IDD_ZONEWIZ_PAGE1);
return TRUE;
}
} // switch
return 0;
default:
return FALSE;
} // switch
return TRUE;
} // CZoneWiz::DlgProcWiz4
/////////////////////////////////////////////////////////////////////////////
void CZoneWiz::DoWizard(CServer * pParent)
{
PROPSHEETPAGE rgpsp[4];
PROPSHEETHEADER psh;
TCHAR szT[64 + CServer::cchNameMax];
TCHAR szString[64];
Assert(pParent != NULL);
GarbageInit(rgpsp, sizeof(rgpsp));
GarbageInit(&psh, sizeof(psh));
rgpsp[0].dwSize = sizeof(PROPSHEETPAGE);
rgpsp[0].dwFlags = PSP_USETITLE;
rgpsp[0].hInstance = hInstanceSave;
rgpsp[0].pszTemplate = MAKEINTRESOURCE(IDD_ZONEWIZ_PAGE0);
rgpsp[0].pszTitle = szT;
rgpsp[0].pfnDlgProc = DlgProcWiz0;
rgpsp[1].dwSize = sizeof(PROPSHEETPAGE);
rgpsp[1].dwFlags = PSP_USETITLE;
rgpsp[1].hInstance = hInstanceSave;
rgpsp[1].pszTemplate = MAKEINTRESOURCE(IDD_ZONEWIZ_PAGE1);
rgpsp[1].pszTitle = szT;
rgpsp[1].pfnDlgProc = DlgProcWiz1;
rgpsp[2].dwSize = sizeof(PROPSHEETPAGE);
rgpsp[2].dwFlags = PSP_USETITLE;
rgpsp[2].hInstance = hInstanceSave;
rgpsp[2].pszTemplate = MAKEINTRESOURCE(IDD_ZONEWIZ_PAGE2);
rgpsp[2].pszTitle = szT;
rgpsp[2].pfnDlgProc = DlgProcWiz2;
/*
rgpsp[3].dwSize = sizeof(PROPSHEETPAGE);
rgpsp[3].dwFlags = PSP_USETITLE;
rgpsp[3].hInstance = hInstanceSave;
rgpsp[3].pszTemplate = MAKEINTRESOURCE(IDD_RESOURCERECORDv2);
rgpsp[3].pszTitle = szT;
rgpsp[3].pfnDlgProc = DlgProcWiz3;
*/
rgpsp[3].dwSize = sizeof(PROPSHEETPAGE);
rgpsp[3].dwFlags = PSP_USETITLE;
rgpsp[3].hInstance = hInstanceSave;
rgpsp[3].pszTemplate = MAKEINTRESOURCE(IDD_ZONEWIZ_PAGE4);
rgpsp[3].pszTitle = szT;
rgpsp[3].pfnDlgProc = DlgProcWiz4;
CchLoadString (IDS_STATUS_s_CREATE_NEW_ZONE, szString, LENGTH(szString));
wsprintf(szT, szString, pParent->PchGetName());
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD;
psh.pszCaption = NULL;
psh.hwndParent = hwndMain;
psh.hInstance = hInstanceSave;
psh.nStartPage = 0;
psh.nPages = LENGTH(rgpsp);
psh.ppsp = rgpsp;
ZeroInit(this, sizeof(*this));
m_pParentServer = pParent;
m_dwWizButtonsPrev = dwWizButtonsNil;
Assert(s_pThis == NULL);
s_pThis = this;
//DoModelessPropertySheet(&psh);
DoPropertySheet(&psh);
s_pThis = NULL;
Free(m_adwIpAddress);
DebugCode( g_ResourceRecordDlgHandler.Destroy(); )
GarbageInit(this, sizeof(*this));
} // CZoneWiz::DoWizard
/////////////////////////////////////////////////////////////////////////////
void
CZoneWiz::SetWizButtons(DWORD dwWizButtons)
{
Assert(IsWindow(m_hwndWiz));
if (dwWizButtons != m_dwWizButtonsPrev)
{
PropSheet_SetWizButtons(m_hwndWiz, dwWizButtons);
m_dwWizButtonsPrev = dwWizButtons;
}
} // CZoneWiz::SetWizButtons
/////////////////////////////////////////////////////////////////////////////
BOOL
CZoneWiz::RpcCreateZone()
{
DNS_HANDLE hZone = 0;
PDNS_ZONE_INFO pZoneInfo = NULL;
DNS_STATUS err;
CWaitCursor wait;
const char * pchUserName;
char szRP[64];
Assert(s_pThis == this);
Assert(m_szZoneName[0] != 0);
// Get the Ip addresses
m_cIpAddress = IpList_GetListAlloc(m_hwndIpList, OUT &m_adwIpAddress);
ReportFSz(m_adwIpAddress != NULL, "Out of memory");
pchUserName = getenv("USERNAME");
if (pchUserName == NULL) {
CchLoadString (IDS_RESPONSIBLE, szRP, LENGTH(szRP));
pchUserName = szRP;
}
StatusBar.SetTextPrintf(IDS_STATUS_s_CREATE_ZONE, m_szZoneName);
StatusBar.UpdateWindow();
Trace1(mskTraceDNS, "\nDnsCreateZone(%"_aS_")...", m_szZoneName);
err = ::DnsCreateZone(
m_pParentServer->PchGetNameA(), // Server name
OUT &hZone, // Zone handle
m_szZoneName, // Zone name
m_dwZoneType, // Zone type
pchUserName,
m_cIpAddress, // Number of masters
m_adwIpAddress, // Array of masters
FALSE, // fUseDatabase (TRUE => Later)
m_szDatabaseName); // Database file
if (err)
{
TCHAR szZoneError[MAX_PATH];
Trace3(mskTraceDNS, "\nERR: DnsCreateZone(%"_aS_") error code = 0x%08X (%d)",
m_szZoneName, err, err);
DnsReportError(err);
LoadString (hInstanceSave, IDS_ZONE_CREATION_ERROR, szZoneError,
LENGTH(szZoneError));
MsgBox (IDS_DUPLICATE_ZONE, szZoneError, MB_OK);
return FALSE;
}
Assert(hZone != NULL);
Trace1(mskTraceDNSVerbose, "\n - DnsGetZoneInfo(%"_aS_")...", m_szZoneName);
err = ::DnsGetZoneInfo(m_pParentServer->PchGetNameA(), hZone, OUT &pZoneInfo);
if (err)
{
Trace3(mskTraceDNS, "\nERR: DnsGetZoneInfo(%"_aS_") error code = 0x%08X (%d)",
m_szZoneName, err, err);
DnsReportError(err);
return FALSE;
}
Assert(pZoneInfo != NULL);
CZoneRootDomain * pZoneRootDomain = new CZoneRootDomain(m_pParentServer, pZoneInfo);
ReportFSz(pZoneRootDomain != NULL, "Out of memory");
if (pZoneRootDomain == NULL) {
return FALSE;
}
Assert(pZoneRootDomain->m_hti != NULL);
TreeView.SetFocus(pZoneRootDomain->m_hti);
DlgZoneHelper.SetRecordView(CDlgZoneHelper::viewAllRecords);
/*
if (m_dwZoneType != DNS_ZONE_TYPE_SECONDARY ) { // Create SOA record
StatusBar.SetTextPrintf(IDS_STATUS_s_CREATE_SOA_FOR_ZONE, m_szZoneName);
UpdateWindow(hwndMain);
Trace1(mskTraceDNSVerbose,
"\n - Creating SOA record for zone %s...", m_szZoneName);
(void)pZoneRootDomain->PRpcCreateDnsRecord(szNull,
(DNS_RPC_RECORD *)m_rgbSOA);
}
*/
pZoneRootDomain->Refresh();
return TRUE;
} // CZoneWiz::RpcCreateZone