// Copyright (c) 2001 Microsoft Corporation // // File: POP3Page.cpp // // Synopsis: Defines the POP3 internal page of the CYS wizard // // History: 06/17/2002 JeffJon Created #include "pch.h" #include "resource.h" #include "InstallationUnitProvider.h" #include "POP3Page.h" static PCWSTR POP3_PAGE_HELP = L"cys.chm::/mail_server_role.htm#mailsrvoptions"; POP3Page::POP3Page() : defaultAuthMethodIndex(0), ADIntegratedIndex(CB_ERR), localAccountsIndex(CB_ERR), passwordFilesIndex(CB_ERR), CYSWizardPage( IDD_POP3_PAGE, IDS_POP3_TITLE, IDS_POP3_SUBTITLE, POP3_PAGE_HELP) { LOG_CTOR(POP3Page); } POP3Page::~POP3Page() { LOG_DTOR(POP3Page); } void POP3Page::OnInit() { LOG_FUNCTION(POP3Page::OnInit); CYSWizardPage::OnInit(); bool isDC = State::GetInstance().IsDC(); bool isJoinedToDomain = State::GetInstance().IsJoinedToDomain(); // Add the strings to the combobox // The order of the insertion is extremely important so that // the combo box index matches the authentication method index // in the POP3 service. // - The SAM auth method needs to be added first if the local server // isn't a DC // - AD integrated needs to be added next if the local server is a DC // or is joined to a domain // - Hash (encrypted password files) needs to be added last if (!isDC) { localAccountsIndex = Win::ComboBox_AddString( Win::GetDlgItem(hwnd, IDC_AUTH_METHOD_COMBO), String::load(IDS_LOCAL_ACCOUNTS)); if (localAccountsIndex == CB_ERR) { LOG(L"Failed to add local accounts string to combobox"); } } if (isDC || isJoinedToDomain) { ADIntegratedIndex = Win::ComboBox_AddString( Win::GetDlgItem(hwnd, IDC_AUTH_METHOD_COMBO), String::load(IDS_AD_INTEGRATED)); if (ADIntegratedIndex == CB_ERR) { LOG(L"Failed to add AD integrated string to combobox"); } } passwordFilesIndex = Win::ComboBox_AddString( Win::GetDlgItem(hwnd, IDC_AUTH_METHOD_COMBO), String::load(IDS_ENCRYPTED_PASSWORD_FILES)); if (passwordFilesIndex == CB_ERR) { LOG(L"Failed to add encrypted password files string to combobox"); } // Now figure out which one to select by default // If the machine is a DC or is joined to a domain // default to AD integrated authentication, else // default to local Windows accounts int defaultAuthMethodIndex = localAccountsIndex; if (State::GetInstance().IsDC() && ADIntegratedIndex != CB_ERR) { defaultAuthMethodIndex = ADIntegratedIndex; } else { defaultAuthMethodIndex = localAccountsIndex; } // Make sure we have a valid default if (defaultAuthMethodIndex == CB_ERR) { defaultAuthMethodIndex = 0; } // Select the default Win::ComboBox_SetCurSel( Win::GetDlgItem( hwnd, IDC_AUTH_METHOD_COMBO), defaultAuthMethodIndex); LOG( String::format( L"Defaulting combobox to: %1!d!", defaultAuthMethodIndex)); // Set the limit text for the domain name page Win::Edit_LimitText( Win::GetDlgItem(hwnd, IDC_EMAIL_DOMAIN_EDIT), DNS_MAX_NAME_LENGTH); } bool POP3Page::OnSetActive() { LOG_FUNCTION(POP3Page::OnSetActive); SetButtonState(); return true; } void POP3Page::SetButtonState() { LOG_FUNCTION(POP3Page::SetButtonState); String emailDomainName = Win::GetDlgItemText( hwnd, IDC_EMAIL_DOMAIN_EDIT); Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), (!emailDomainName.empty()) ? PSWIZB_NEXT | PSWIZB_BACK : PSWIZB_BACK); } bool POP3Page::OnCommand( HWND /*windowFrom*/, unsigned int controlIDFrom, unsigned int code) { if (code == EN_CHANGE && controlIDFrom == IDC_EMAIL_DOMAIN_EDIT) { SetButtonState(); } return false; } int POP3Page::Validate() { LOG_FUNCTION(POP3Page::Validate); int nextPage = -1; do { String emailDomainName = Win::GetDlgItemText( hwnd, IDC_EMAIL_DOMAIN_EDIT); DNS_STATUS status = MyDnsValidateName(emailDomainName, DnsNameDomain); if (status != ERROR_SUCCESS) { String message = String::format( IDS_BAD_DNS_SYNTAX, emailDomainName.c_str(), DNS_MAX_NAME_LENGTH); popup.Gripe(hwnd, IDC_EMAIL_DOMAIN_EDIT, message); nextPage = -1; break; } POP3InstallationUnit& pop3InstallationUnit = InstallationUnitProvider::GetInstance().GetPOP3InstallationUnit(); pop3InstallationUnit.SetDomainName(emailDomainName); int authIndex = Win::ComboBox_GetCurSel( Win::GetDlgItem( hwnd, IDC_AUTH_METHOD_COMBO)); if (authIndex == CB_ERR) { LOG(L"Failed to get the selected index, reverting to default"); ASSERT(authIndex != CB_ERR); authIndex = defaultAuthMethodIndex; } // Set the auth method in the installation unit // Since the auth method is a 1 based index and the // combo selection is a zero based index, add 1. pop3InstallationUnit.SetAuthMethodIndex(authIndex + 1); nextPage = IDD_MILESTONE_PAGE; } while (false); LOG(String::format( L"nextPage = %1!d!", nextPage)); return nextPage; }