X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/7cb34e5c3616917483a8e75510de0387e51833cc..51e746cfedf68920647bd7ab197adb37f67b5209:/mDNSWindows/ControlPanel/SecondPage.cpp diff --git a/mDNSWindows/ControlPanel/SecondPage.cpp b/mDNSWindows/ControlPanel/SecondPage.cpp index a330e84..eb830df 100755 --- a/mDNSWindows/ControlPanel/SecondPage.cpp +++ b/mDNSWindows/ControlPanel/SecondPage.cpp @@ -1,28 +1,34 @@ -/* +/* -*- Mode: C; tab-width: 4 -*- + * * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * 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 * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. + * http://www.apache.org/licenses/LICENSE-2.0 * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and + * 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. - * - * @APPLE_LICENSE_HEADER_END@ Change History (most recent first): $Log: SecondPage.cpp,v $ +Revision 1.7 2006/08/14 23:25:28 cheshire +Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0 + +Revision 1.6 2005/10/05 20:46:50 herscher + Move Wide-Area preferences to another part of the registry so they don't removed during an update-install. + +Revision 1.5 2005/04/05 04:15:46 shersche +RegQueryString was returning uninitialized strings if the registry key couldn't be found, so always initialize strings before checking the registry key. + +Revision 1.4 2005/04/05 03:52:14 shersche + 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/03 19:55:22 shersche ControlPanel source code isn't saving CVS log info @@ -46,10 +52,16 @@ IMPLEMENT_DYNCREATE(CSecondPage, CPropertyPage) CSecondPage::CSecondPage() : - CPropertyPage(CSecondPage::IDD) + CPropertyPage(CSecondPage::IDD), + m_setupKey( NULL ) { //{{AFX_DATA_INIT(CSecondPage) //}}AFX_DATA_INIT + + OSStatus err; + + err = RegCreateKey( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, &m_setupKey ); + check_noerr( err ); } @@ -59,6 +71,11 @@ CSecondPage::CSecondPage() CSecondPage::~CSecondPage() { + if ( m_setupKey ) + { + RegCloseKey( m_setupKey ); + m_setupKey = NULL; + } } @@ -109,7 +126,6 @@ BOOL CSecondPage::OnSetActive() { CConfigPropertySheet * psheet; - HKEY key = NULL; DWORD dwSize; DWORD enabled; DWORD err; @@ -126,20 +142,15 @@ CSecondPage::OnSetActive() // Now populate the registration domain box - err = RegCreateKey( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\" kServiceName L"\\Parameters\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, &key ); - require_noerr( err, exit ); - - err = Populate( m_regDomainsBox, key, psheet->m_regDomains ); + err = Populate( m_regDomainsBox, m_setupKey, psheet->m_regDomains ); check_noerr( err ); dwSize = sizeof( DWORD ); - err = RegQueryValueEx( key, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize ); + err = RegQueryValueEx( m_setupKey, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize ); m_advertiseServicesButton.SetCheck( ( !err && enabled ) ? BST_CHECKED : BST_UNCHECKED ); m_regDomainsBox.EnableWindow( ( !err && enabled ) ); m_sharedSecretButton.EnableWindow( (!err && enabled ) ); - RegCloseKey( key ); - exit: return b; @@ -168,20 +179,12 @@ CSecondPage::OnOK() void CSecondPage::Commit() { - HKEY key = NULL; - DWORD err; - - err = RegCreateKey( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\" kServiceName L"\\Parameters\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, &key ); - require_noerr( err, exit ); + DWORD err; - err = Commit( m_regDomainsBox, key, m_advertiseServicesButton.GetCheck() == BST_CHECKED ); - check_noerr( err ); - -exit: - - if ( key ) + if ( m_setupKey != NULL ) { - RegCloseKey( key ); + err = Commit( m_regDomainsBox, m_setupKey, m_advertiseServicesButton.GetCheck() == BST_CHECKED ); + check_noerr( err ); } } @@ -244,15 +247,39 @@ CSecondPage::Commit( CComboBox & box, HKEY key, DWORD enabled ) void CSecondPage::OnBnClickedSharedSecret() { - CString string; + CString name; - m_regDomainsBox.GetWindowText( string ); + m_regDomainsBox.GetWindowText( name ); CSharedSecret dlg; - dlg.m_secretName = string; + dlg.m_key = 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: - dlg.DoModal(); + return; } @@ -470,6 +497,7 @@ CSecondPage::RegQueryString( HKEY key, CString valueName, CString & value ) string = (TCHAR*) malloc( stringLen ); require_action( string, exit, err = kUnknownErr ); + *string = '\0'; err = RegQueryValueEx( key, valueName, 0, NULL, (LPBYTE) string, &stringLen );