+++ /dev/null
-/* -*- Mode: C; tab-width: 4 -*-
- *
- * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-
- Change History (most recent first):
-
-$Log: FirstPage.cpp,v $
-Revision 1.7 2009/06/22 23:25:10 herscher
-<rdar://problem/5265747> ControlPanel doesn't display key and password in dialog box. Refactor Lsa calls into Secret.h and Secret.c, which is used by both the ControlPanel and mDNSResponder system service.
-
-Revision 1.6 2006/08/14 23:25:28 cheshire
-Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
-
-Revision 1.5 2005/10/05 20:46:50 herscher
-<rdar://problem/4192011> Move Wide-Area preferences to another part of the registry so they don't removed during an update-install.
-
-Revision 1.4 2005/04/05 03:52:14 shersche
-<rdar://problem/4066485> Registering with shared secret key doesn't work. Additionally, mDNSResponder wasn't dynamically re-reading it's DynDNS setup after setting a shared secret key.
-
-Revision 1.3 2005/03/07 18:27:42 shersche
-<rdar://problem/4037940> Fix problem when ControlPanel commits changes to the browse domain list
-
-Revision 1.2 2005/03/03 19:55:22 shersche
-<rdar://problem/4034481> ControlPanel source code isn't saving CVS log info
-
-
-*/
-
-#include "FirstPage.h"
-#include "resource.h"
-
-#include "ConfigPropertySheet.h"
-#include "SharedSecret.h"
-
-#define MAX_KEY_LENGTH 255
-
-
-IMPLEMENT_DYNCREATE(CFirstPage, CPropertyPage)
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::CFirstPage
-//---------------------------------------------------------------------------------------------------------------------------
-
-CFirstPage::CFirstPage()
-:
- CPropertyPage(CFirstPage::IDD),
- m_ignoreHostnameChange( false ),
- m_statusKey( NULL ),
- m_setupKey( NULL )
-{
- //{{AFX_DATA_INIT(CFirstPage)
- //}}AFX_DATA_INIT
-
- OSStatus err;
-
- err = RegCreateKey( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\State\\Hostnames", &m_statusKey );
- check_noerr( err );
-
- err = RegCreateKey( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\Hostnames", &m_setupKey );
- check_noerr( err );
-}
-
-CFirstPage::~CFirstPage()
-{
- if ( m_statusKey )
- {
- RegCloseKey( m_statusKey );
- m_statusKey = NULL;
- }
-
- if ( m_setupKey )
- {
- RegCloseKey( m_setupKey );
- m_setupKey = NULL;
- }
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::DoDataExchange
-//---------------------------------------------------------------------------------------------------------------------------
-
-void CFirstPage::DoDataExchange(CDataExchange* pDX)
-{
- CPropertyPage::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CFirstPage)
- //}}AFX_DATA_MAP
- DDX_Control(pDX, IDC_EDIT1, m_hostnameControl);
- DDX_Control(pDX, IDC_FAILURE, m_failureIcon);
- DDX_Control(pDX, IDC_SUCCESS, m_successIcon);
-}
-
-BEGIN_MESSAGE_MAP(CFirstPage, CPropertyPage)
- //{{AFX_MSG_MAP(CFirstPage)
- //}}AFX_MSG_MAP
- ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedSharedSecret)
- ON_EN_CHANGE(IDC_EDIT1, OnEnChangeHostname)
-END_MESSAGE_MAP()
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::OnEnChangedHostname
-//---------------------------------------------------------------------------------------------------------------------------
-
-void CFirstPage::OnEnChangeHostname()
-{
- if ( !m_ignoreHostnameChange )
- {
- SetModified( TRUE );
- }
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::OnBnClickedSharedSecret
-//---------------------------------------------------------------------------------------------------------------------------
-
-void CFirstPage::OnBnClickedSharedSecret()
-{
- CString name;
-
- m_hostnameControl.GetWindowText( name );
-
- CSharedSecret dlg;
-
- dlg.Load( name );
-
- if ( dlg.DoModal() == IDOK )
- {
- DWORD wakeup = 0;
- DWORD dwSize = sizeof( DWORD );
- OSStatus err;
-
- dlg.Commit( name );
-
- // We have now updated the secret, however the system service
- // doesn't know about it yet. So we're going to update the
- // registry with a dummy value which will cause the system
- // service to re-initialize it's DynDNS setup
- //
-
- RegQueryValueEx( m_setupKey, L"Wakeup", NULL, NULL, (LPBYTE) &wakeup, &dwSize );
-
- wakeup++;
-
- err = RegSetValueEx( m_setupKey, L"Wakeup", 0, REG_DWORD, (LPBYTE) &wakeup, sizeof( DWORD ) );
- require_noerr( err, exit );
- }
-
-exit:
-
- return;
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::SetModified
-//---------------------------------------------------------------------------------------------------------------------------
-
-void CFirstPage::SetModified( BOOL bChanged )
-{
- m_modified = bChanged ? true : false;
-
- CPropertyPage::SetModified( bChanged );
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::OnSetActive
-//---------------------------------------------------------------------------------------------------------------------------
-
-BOOL
-CFirstPage::OnSetActive()
-{
- TCHAR name[kDNSServiceMaxDomainName + 1];
- DWORD nameLen = ( kDNSServiceMaxDomainName + 1 ) * sizeof( TCHAR );
- DWORD err;
-
- BOOL b = CPropertyPage::OnSetActive();
-
- m_modified = FALSE;
-
- if ( m_setupKey )
- {
- err = RegQueryValueEx( m_setupKey, L"", NULL, NULL, (LPBYTE) name, &nameLen );
-
- if ( !err )
- {
- m_ignoreHostnameChange = true;
- m_hostnameControl.SetWindowText( name );
- m_ignoreHostnameChange = false;
- }
- }
-
- // Check the status of this hostname
-
- err = CheckStatus();
- check_noerr( err );
-
- return b;
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::OnOK
-//---------------------------------------------------------------------------------------------------------------------------
-
-void
-CFirstPage::OnOK()
-{
- if ( m_modified )
- {
- Commit();
- }
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::Commit
-//---------------------------------------------------------------------------------------------------------------------------
-
-void
-CFirstPage::Commit()
-{
- DWORD enabled = 1;
- CString name;
- DWORD err;
-
- m_hostnameControl.GetWindowText( name );
-
- // Convert to lower case
-
- name.MakeLower();
-
- // Remove trailing dot
-
- name.TrimRight( '.' );
-
- err = RegSetValueEx( m_setupKey, L"", 0, REG_SZ, (LPBYTE) (LPCTSTR) name, ( name.GetLength() + 1 ) * sizeof( TCHAR ) );
- require_noerr( err, exit );
-
- err = RegSetValueEx( m_setupKey, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
- require_noerr( err, exit );
-
-exit:
-
- return;
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::CheckStatus
-//---------------------------------------------------------------------------------------------------------------------------
-
-OSStatus
-CFirstPage::CheckStatus()
-{
- DWORD status = 0;
- DWORD dwSize = sizeof( DWORD );
- OSStatus err;
-
- // Get the status field
-
- err = RegQueryValueEx( m_statusKey, L"Status", NULL, NULL, (LPBYTE) &status, &dwSize );
- require_noerr( err, exit );
-
- ShowStatus( status );
-
-exit:
-
- return kNoErr;
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::ShowStatus
-//---------------------------------------------------------------------------------------------------------------------------
-
-void
-CFirstPage::ShowStatus( DWORD status )
-{
- if ( status )
- {
- m_failureIcon.ShowWindow( SW_HIDE );
- m_successIcon.ShowWindow( SW_SHOW );
- }
- else
- {
- m_failureIcon.ShowWindow( SW_SHOW );
- m_successIcon.ShowWindow( SW_HIDE );
- }
-}
-
-
-//---------------------------------------------------------------------------------------------------------------------------
-// CFirstPage::OnRegistryChanged
-//---------------------------------------------------------------------------------------------------------------------------
-
-void
-CFirstPage::OnRegistryChanged()
-{
- CheckStatus();
-}