|
|
// Copyright (C) 1997 Microsoft Corporation
//
// replica page
//
// 12-22-97 sburns
#include "headers.hxx"
#include "page.hpp"
#include "ReplicaPage.hpp"
#include "resource.h"
#include "ds.hpp"
#include "common.hpp"
#include "state.hpp"
#include "dns.hpp"
#include <ValidateDomainName.hpp>
#include <ValidateDomainName.h>
ReplicaPage::ReplicaPage() : DCPromoWizardPage( IDD_REPLICA, IDS_REPLICA_PAGE_TITLE, IDS_REPLICA_PAGE_SUBTITLE) { LOG_CTOR(ReplicaPage); }
ReplicaPage::~ReplicaPage() { LOG_DTOR(ReplicaPage); }
void ReplicaPage::Enable() { int next = !Win::GetTrimmedDlgItemText(hwnd, IDC_DOMAIN).empty() ? PSWIZB_NEXT : 0;
Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_BACK | next); }
bool ReplicaPage::OnCommand( HWND /* windowFrom */ , unsigned controlIDFrom, unsigned code) { // LOG_FUNCTION(ReplicaPage::OnCommand);
switch (controlIDFrom) { case IDC_BROWSE: { if (code == BN_CLICKED) { String domain = BrowseForDomain(hwnd); if (!domain.empty()) { Win::SetDlgItemText(hwnd, IDC_DOMAIN, domain); }
return true; } break; } case IDC_DOMAIN: { if (code == EN_CHANGE) { SetChanged(controlIDFrom); Enable(); } break; } default: { // do nothing
break; } }
return false; }
void ReplicaPage::OnInit() { LOG_FUNCTION(ReplicaPage::OnInit);
Win::Edit_LimitText( Win::GetDlgItem(hwnd, IDC_DOMAIN), DNS_DOMAIN_NAME_MAX_LIMIT_DUE_TO_POLICY);
State& state = State::GetInstance();
if (state.UsingAnswerFile()) { // Ignore the answerfile if we got the domain name from the
// ReplicateFromMediaPage.
if ( !state.ReplicateFromMedia() || state.GetReplicaDomainDNSName().empty()) { Win::SetDlgItemText( hwnd, IDC_DOMAIN, state.GetAnswerFileOption( AnswerFile::OPTION_REPLICA_DOMAIN_NAME)); } } else { // default domain is that the server is joined to.
Win::SetDlgItemText( hwnd, IDC_DOMAIN, state.GetComputer().GetDomainDnsName()); } }
bool ReplicaPage::ShouldSkipPage() { LOG_FUNCTION(ReplicaPage::ShouldSkipPage);
bool result = false;
State& state = State::GetInstance();
do { // check to see if we got the domain name from the
// ReplicateFromMediaPage. If so, then we don't need to show this
// page.
if ( state.ReplicateFromMedia() && !state.GetReplicaDomainDNSName().empty() ) { // dns domain name is from the ReplicateFromMediaPage, which
// saved that name in the state instance. So put that name
// in the ui.
Win::SetDlgItemText( hwnd, IDC_DOMAIN, state.GetReplicaDomainDNSName());
result = true; break; }
if (state.RunHiddenUnattended()) { result = true; break; } } while (0);
LOG(result ? L"true" : L"false");
return result; }
bool ReplicaPage::OnSetActive() { LOG_FUNCTION(ReplicaPage::OnSetActive); ASSERT(State::GetInstance().GetOperation() == State::REPLICA); Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_BACK);
State& state = State::GetInstance(); if (ShouldSkipPage()) { LOG(L"skipping ReplicaPage");
Wizard& wiz = GetWizard();
if (wiz.IsBacktracking()) { // backup once again
wiz.Backtrack(hwnd); return true; }
int nextPage = ReplicaPage::Validate(); if (nextPage != -1) { wiz.SetNextPageID(hwnd, nextPage); } else { state.ClearHiddenWhileUnattended(); } }
Enable(); return true; }
int ReplicaPage::Validate() { LOG_FUNCTION(ReplicaPage::Validate);
int nextPage = -1;
// SPB:251431 do validation even if this page is untouched, as upstream
// pages may have been changed in such a fashion that re-validation is
// required.
// if (!WasChanged(IDC_DOMAIN))
// {
// return nextPage;
// }
do { String domain = Win::GetTrimmedDlgItemText(hwnd, IDC_DOMAIN); if (domain.empty()) { popup.Gripe(hwnd, IDC_DOMAIN, IDS_MUST_ENTER_DOMAIN); break; }
State& state = State::GetInstance();
if ( !ValidateDomainDnsNameSyntax( hwnd, IDC_DOMAIN, popup, // only warn on non RFC names if running interactively
!state.RunHiddenUnattended()) ) { break; }
// now ensure that the domain exists
String dnsName; if (!ValidateDomainExists(hwnd, IDC_DOMAIN, dnsName)) { break; } if (!dnsName.empty()) { // the user specified the netbios name of the domain, and
// confirmed it, so use the dns domain name returned.
Win::SetDlgItemText(hwnd, IDC_DOMAIN, dnsName); domain = dnsName; } if (!state.IsDomainInForest(domain)) { popup.Gripe( hwnd, IDC_DOMAIN, String::format( IDS_DOMAIN_NOT_IN_FOREST, domain.c_str(), state.GetUserForestName().c_str())); break; } // valid
ClearChanges(); state.SetReplicaDomainDNSName(domain);
nextPage = IDD_PATHS; } while (0);
return nextPage; }
|