1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker *
3*48a54d36SAndroid Build Coastguard Worker * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
4*48a54d36SAndroid Build Coastguard Worker *
5*48a54d36SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*48a54d36SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*48a54d36SAndroid Build Coastguard Worker * You may obtain a copy of the License at
8*48a54d36SAndroid Build Coastguard Worker *
9*48a54d36SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*48a54d36SAndroid Build Coastguard Worker *
11*48a54d36SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*48a54d36SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*48a54d36SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*48a54d36SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*48a54d36SAndroid Build Coastguard Worker * limitations under the License.
16*48a54d36SAndroid Build Coastguard Worker */
17*48a54d36SAndroid Build Coastguard Worker
18*48a54d36SAndroid Build Coastguard Worker #include <Secret.h>
19*48a54d36SAndroid Build Coastguard Worker #include "RegistrationPage.h"
20*48a54d36SAndroid Build Coastguard Worker #include "resource.h"
21*48a54d36SAndroid Build Coastguard Worker
22*48a54d36SAndroid Build Coastguard Worker #include "ConfigPropertySheet.h"
23*48a54d36SAndroid Build Coastguard Worker extern "C"
24*48a54d36SAndroid Build Coastguard Worker {
25*48a54d36SAndroid Build Coastguard Worker #include <ClientCommon.h>
26*48a54d36SAndroid Build Coastguard Worker }
27*48a54d36SAndroid Build Coastguard Worker #include <WinServices.h>
28*48a54d36SAndroid Build Coastguard Worker
29*48a54d36SAndroid Build Coastguard Worker #define MAX_KEY_LENGTH 255
30*48a54d36SAndroid Build Coastguard Worker
31*48a54d36SAndroid Build Coastguard Worker
IMPLEMENT_DYNCREATE(CRegistrationPage,CPropertyPage)32*48a54d36SAndroid Build Coastguard Worker IMPLEMENT_DYNCREATE(CRegistrationPage, CPropertyPage)
33*48a54d36SAndroid Build Coastguard Worker
34*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
35*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::CRegistrationPage
36*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
37*48a54d36SAndroid Build Coastguard Worker
38*48a54d36SAndroid Build Coastguard Worker CRegistrationPage::CRegistrationPage()
39*48a54d36SAndroid Build Coastguard Worker :
40*48a54d36SAndroid Build Coastguard Worker CPropertyPage(CRegistrationPage::IDD),
41*48a54d36SAndroid Build Coastguard Worker m_ignoreChanges( false ),
42*48a54d36SAndroid Build Coastguard Worker m_hostnameSetupKey( NULL ),
43*48a54d36SAndroid Build Coastguard Worker m_registrationSetupKey( NULL ),
44*48a54d36SAndroid Build Coastguard Worker m_statusKey( NULL )
45*48a54d36SAndroid Build Coastguard Worker {
46*48a54d36SAndroid Build Coastguard Worker //{{AFX_DATA_INIT(CRegistrationPage)
47*48a54d36SAndroid Build Coastguard Worker //}}AFX_DATA_INIT
48*48a54d36SAndroid Build Coastguard Worker
49*48a54d36SAndroid Build Coastguard Worker OSStatus err;
50*48a54d36SAndroid Build Coastguard Worker
51*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\Hostnames", 0,
52*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &m_hostnameSetupKey, NULL );
53*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
54*48a54d36SAndroid Build Coastguard Worker
55*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, 0,
56*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &m_registrationSetupKey, NULL );
57*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
58*48a54d36SAndroid Build Coastguard Worker
59*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\State\\Hostnames", 0,
60*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &m_statusKey, NULL );
61*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
62*48a54d36SAndroid Build Coastguard Worker
63*48a54d36SAndroid Build Coastguard Worker
64*48a54d36SAndroid Build Coastguard Worker }
65*48a54d36SAndroid Build Coastguard Worker
~CRegistrationPage()66*48a54d36SAndroid Build Coastguard Worker CRegistrationPage::~CRegistrationPage()
67*48a54d36SAndroid Build Coastguard Worker {
68*48a54d36SAndroid Build Coastguard Worker if ( m_hostnameSetupKey )
69*48a54d36SAndroid Build Coastguard Worker {
70*48a54d36SAndroid Build Coastguard Worker RegCloseKey( m_hostnameSetupKey );
71*48a54d36SAndroid Build Coastguard Worker m_hostnameSetupKey = NULL;
72*48a54d36SAndroid Build Coastguard Worker }
73*48a54d36SAndroid Build Coastguard Worker
74*48a54d36SAndroid Build Coastguard Worker if ( m_registrationSetupKey )
75*48a54d36SAndroid Build Coastguard Worker {
76*48a54d36SAndroid Build Coastguard Worker RegCloseKey( m_registrationSetupKey );
77*48a54d36SAndroid Build Coastguard Worker m_registrationSetupKey = NULL;
78*48a54d36SAndroid Build Coastguard Worker }
79*48a54d36SAndroid Build Coastguard Worker
80*48a54d36SAndroid Build Coastguard Worker if ( m_statusKey )
81*48a54d36SAndroid Build Coastguard Worker {
82*48a54d36SAndroid Build Coastguard Worker RegCloseKey( m_statusKey );
83*48a54d36SAndroid Build Coastguard Worker m_statusKey = NULL;
84*48a54d36SAndroid Build Coastguard Worker }
85*48a54d36SAndroid Build Coastguard Worker }
86*48a54d36SAndroid Build Coastguard Worker
87*48a54d36SAndroid Build Coastguard Worker
88*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
89*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::DoDataExchange
90*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
91*48a54d36SAndroid Build Coastguard Worker
DoDataExchange(CDataExchange * pDX)92*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::DoDataExchange(CDataExchange* pDX)
93*48a54d36SAndroid Build Coastguard Worker {
94*48a54d36SAndroid Build Coastguard Worker CPropertyPage::DoDataExchange(pDX);
95*48a54d36SAndroid Build Coastguard Worker //{{AFX_DATA_MAP(CRegistrationPage)
96*48a54d36SAndroid Build Coastguard Worker //}}AFX_DATA_MAP
97*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_HOSTNAME, m_hostnameControl);
98*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_USERNAME, m_usernameControl);
99*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_PASSWORD, m_passwordControl);
100*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_ADVERTISE_SERVICES, m_advertiseServices);
101*48a54d36SAndroid Build Coastguard Worker }
102*48a54d36SAndroid Build Coastguard Worker
BEGIN_MESSAGE_MAP(CRegistrationPage,CPropertyPage)103*48a54d36SAndroid Build Coastguard Worker BEGIN_MESSAGE_MAP(CRegistrationPage, CPropertyPage)
104*48a54d36SAndroid Build Coastguard Worker //{{AFX_MSG_MAP(CRegistrationPage)
105*48a54d36SAndroid Build Coastguard Worker //}}AFX_MSG_MAP
106*48a54d36SAndroid Build Coastguard Worker ON_EN_CHANGE(IDC_HOSTNAME, OnEnChangeHostname)
107*48a54d36SAndroid Build Coastguard Worker ON_EN_CHANGE(IDC_USERNAME, OnEnChangeUsername)
108*48a54d36SAndroid Build Coastguard Worker ON_EN_CHANGE(IDC_PASSWORD, OnEnChangePassword)
109*48a54d36SAndroid Build Coastguard Worker ON_BN_CLICKED(IDC_ADVERTISE_SERVICES, OnBnClickedAdvertiseServices)
110*48a54d36SAndroid Build Coastguard Worker END_MESSAGE_MAP()
111*48a54d36SAndroid Build Coastguard Worker
112*48a54d36SAndroid Build Coastguard Worker
113*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
114*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnEnChangedHostname
115*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
116*48a54d36SAndroid Build Coastguard Worker
117*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::OnEnChangeHostname()
118*48a54d36SAndroid Build Coastguard Worker {
119*48a54d36SAndroid Build Coastguard Worker if ( !m_ignoreChanges )
120*48a54d36SAndroid Build Coastguard Worker {
121*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
122*48a54d36SAndroid Build Coastguard Worker }
123*48a54d36SAndroid Build Coastguard Worker }
124*48a54d36SAndroid Build Coastguard Worker
125*48a54d36SAndroid Build Coastguard Worker
126*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
127*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnEnChangedUsername
128*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
129*48a54d36SAndroid Build Coastguard Worker
OnEnChangeUsername()130*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::OnEnChangeUsername()
131*48a54d36SAndroid Build Coastguard Worker {
132*48a54d36SAndroid Build Coastguard Worker if ( !m_ignoreChanges )
133*48a54d36SAndroid Build Coastguard Worker {
134*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
135*48a54d36SAndroid Build Coastguard Worker }
136*48a54d36SAndroid Build Coastguard Worker }
137*48a54d36SAndroid Build Coastguard Worker
138*48a54d36SAndroid Build Coastguard Worker
139*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
140*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnEnChangedPassword
141*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
142*48a54d36SAndroid Build Coastguard Worker
OnEnChangePassword()143*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::OnEnChangePassword()
144*48a54d36SAndroid Build Coastguard Worker {
145*48a54d36SAndroid Build Coastguard Worker if ( !m_ignoreChanges )
146*48a54d36SAndroid Build Coastguard Worker {
147*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
148*48a54d36SAndroid Build Coastguard Worker }
149*48a54d36SAndroid Build Coastguard Worker }
150*48a54d36SAndroid Build Coastguard Worker
151*48a54d36SAndroid Build Coastguard Worker
152*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
153*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnBnClickedAdvertiseServices
154*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
155*48a54d36SAndroid Build Coastguard Worker
OnBnClickedAdvertiseServices()156*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::OnBnClickedAdvertiseServices()
157*48a54d36SAndroid Build Coastguard Worker {
158*48a54d36SAndroid Build Coastguard Worker if ( !m_ignoreChanges )
159*48a54d36SAndroid Build Coastguard Worker {
160*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
161*48a54d36SAndroid Build Coastguard Worker }
162*48a54d36SAndroid Build Coastguard Worker }
163*48a54d36SAndroid Build Coastguard Worker
164*48a54d36SAndroid Build Coastguard Worker
165*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
166*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::SetModified
167*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
168*48a54d36SAndroid Build Coastguard Worker
SetModified(BOOL bChanged)169*48a54d36SAndroid Build Coastguard Worker void CRegistrationPage::SetModified( BOOL bChanged )
170*48a54d36SAndroid Build Coastguard Worker {
171*48a54d36SAndroid Build Coastguard Worker m_modified = bChanged ? true : false;
172*48a54d36SAndroid Build Coastguard Worker
173*48a54d36SAndroid Build Coastguard Worker CPropertyPage::SetModified( bChanged );
174*48a54d36SAndroid Build Coastguard Worker }
175*48a54d36SAndroid Build Coastguard Worker
176*48a54d36SAndroid Build Coastguard Worker
177*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
178*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnSetActive
179*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
180*48a54d36SAndroid Build Coastguard Worker
181*48a54d36SAndroid Build Coastguard Worker BOOL
OnSetActive()182*48a54d36SAndroid Build Coastguard Worker CRegistrationPage::OnSetActive()
183*48a54d36SAndroid Build Coastguard Worker {
184*48a54d36SAndroid Build Coastguard Worker TCHAR name[kDNSServiceMaxDomainName + 1];
185*48a54d36SAndroid Build Coastguard Worker DWORD nameLen = ( kDNSServiceMaxDomainName + 1 ) * sizeof( TCHAR );
186*48a54d36SAndroid Build Coastguard Worker DWORD err;
187*48a54d36SAndroid Build Coastguard Worker
188*48a54d36SAndroid Build Coastguard Worker BOOL b = CPropertyPage::OnSetActive();
189*48a54d36SAndroid Build Coastguard Worker
190*48a54d36SAndroid Build Coastguard Worker m_ignoreChanges = true;
191*48a54d36SAndroid Build Coastguard Worker m_modified = FALSE;
192*48a54d36SAndroid Build Coastguard Worker
193*48a54d36SAndroid Build Coastguard Worker if ( m_hostnameSetupKey )
194*48a54d36SAndroid Build Coastguard Worker {
195*48a54d36SAndroid Build Coastguard Worker err = RegQueryValueEx( m_hostnameSetupKey, L"", NULL, NULL, (LPBYTE) name, &nameLen );
196*48a54d36SAndroid Build Coastguard Worker
197*48a54d36SAndroid Build Coastguard Worker if ( !err )
198*48a54d36SAndroid Build Coastguard Worker {
199*48a54d36SAndroid Build Coastguard Worker char hostnameUTF8[ 256 ];
200*48a54d36SAndroid Build Coastguard Worker char outDomain[ 256 ];
201*48a54d36SAndroid Build Coastguard Worker char outUsername[ 256 ];
202*48a54d36SAndroid Build Coastguard Worker char outPassword[ 256 ];
203*48a54d36SAndroid Build Coastguard Worker CString hostname = name;
204*48a54d36SAndroid Build Coastguard Worker CString username;
205*48a54d36SAndroid Build Coastguard Worker CString password;
206*48a54d36SAndroid Build Coastguard Worker
207*48a54d36SAndroid Build Coastguard Worker m_hostnameControl.SetWindowText( hostname );
208*48a54d36SAndroid Build Coastguard Worker
209*48a54d36SAndroid Build Coastguard Worker StringObjectToUTF8String( hostname, hostnameUTF8, sizeof( hostnameUTF8 ) );
210*48a54d36SAndroid Build Coastguard Worker
211*48a54d36SAndroid Build Coastguard Worker if ( LsaGetSecret( hostnameUTF8, outDomain, sizeof( outDomain ) / sizeof( TCHAR ), outUsername, sizeof( outUsername ) / sizeof( TCHAR ), outPassword, sizeof( outPassword ) / sizeof( TCHAR ) ) )
212*48a54d36SAndroid Build Coastguard Worker {
213*48a54d36SAndroid Build Coastguard Worker username = outUsername;
214*48a54d36SAndroid Build Coastguard Worker m_usernameControl.SetWindowText( username );
215*48a54d36SAndroid Build Coastguard Worker
216*48a54d36SAndroid Build Coastguard Worker password = outPassword;
217*48a54d36SAndroid Build Coastguard Worker m_passwordControl.SetWindowText( password );
218*48a54d36SAndroid Build Coastguard Worker }
219*48a54d36SAndroid Build Coastguard Worker }
220*48a54d36SAndroid Build Coastguard Worker }
221*48a54d36SAndroid Build Coastguard Worker
222*48a54d36SAndroid Build Coastguard Worker m_advertiseServices.SetCheck( 0 );
223*48a54d36SAndroid Build Coastguard Worker
224*48a54d36SAndroid Build Coastguard Worker if ( m_registrationSetupKey )
225*48a54d36SAndroid Build Coastguard Worker {
226*48a54d36SAndroid Build Coastguard Worker HKEY subKey = NULL;
227*48a54d36SAndroid Build Coastguard Worker DWORD dwSize;
228*48a54d36SAndroid Build Coastguard Worker DWORD enabled = 0;
229*48a54d36SAndroid Build Coastguard Worker TCHAR subKeyName[MAX_KEY_LENGTH];
230*48a54d36SAndroid Build Coastguard Worker DWORD cSubKeys = 0;
231*48a54d36SAndroid Build Coastguard Worker DWORD cbMaxSubKey;
232*48a54d36SAndroid Build Coastguard Worker DWORD cchMaxClass;
233*48a54d36SAndroid Build Coastguard Worker OSStatus err;
234*48a54d36SAndroid Build Coastguard Worker
235*48a54d36SAndroid Build Coastguard Worker err = RegQueryInfoKey( m_registrationSetupKey, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
236*48a54d36SAndroid Build Coastguard Worker if ( !err )
237*48a54d36SAndroid Build Coastguard Worker {
238*48a54d36SAndroid Build Coastguard Worker if ( cSubKeys > 0 )
239*48a54d36SAndroid Build Coastguard Worker {
240*48a54d36SAndroid Build Coastguard Worker dwSize = MAX_KEY_LENGTH;
241*48a54d36SAndroid Build Coastguard Worker
242*48a54d36SAndroid Build Coastguard Worker err = RegEnumKeyEx( m_registrationSetupKey, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
243*48a54d36SAndroid Build Coastguard Worker if ( !err )
244*48a54d36SAndroid Build Coastguard Worker {
245*48a54d36SAndroid Build Coastguard Worker err = RegOpenKey( m_registrationSetupKey, subKeyName, &subKey );
246*48a54d36SAndroid Build Coastguard Worker if ( !err )
247*48a54d36SAndroid Build Coastguard Worker {
248*48a54d36SAndroid Build Coastguard Worker dwSize = sizeof( DWORD );
249*48a54d36SAndroid Build Coastguard Worker err = RegQueryValueEx( subKey, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize );
250*48a54d36SAndroid Build Coastguard Worker if ( !err && enabled )
251*48a54d36SAndroid Build Coastguard Worker {
252*48a54d36SAndroid Build Coastguard Worker m_advertiseServices.SetCheck( enabled );
253*48a54d36SAndroid Build Coastguard Worker }
254*48a54d36SAndroid Build Coastguard Worker
255*48a54d36SAndroid Build Coastguard Worker RegCloseKey( subKey );
256*48a54d36SAndroid Build Coastguard Worker subKey = NULL;
257*48a54d36SAndroid Build Coastguard Worker }
258*48a54d36SAndroid Build Coastguard Worker }
259*48a54d36SAndroid Build Coastguard Worker }
260*48a54d36SAndroid Build Coastguard Worker }
261*48a54d36SAndroid Build Coastguard Worker }
262*48a54d36SAndroid Build Coastguard Worker
263*48a54d36SAndroid Build Coastguard Worker m_ignoreChanges = false;
264*48a54d36SAndroid Build Coastguard Worker
265*48a54d36SAndroid Build Coastguard Worker return b;
266*48a54d36SAndroid Build Coastguard Worker }
267*48a54d36SAndroid Build Coastguard Worker
268*48a54d36SAndroid Build Coastguard Worker
269*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
270*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::OnOK
271*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
272*48a54d36SAndroid Build Coastguard Worker
273*48a54d36SAndroid Build Coastguard Worker void
OnOK()274*48a54d36SAndroid Build Coastguard Worker CRegistrationPage::OnOK()
275*48a54d36SAndroid Build Coastguard Worker {
276*48a54d36SAndroid Build Coastguard Worker if ( m_modified )
277*48a54d36SAndroid Build Coastguard Worker {
278*48a54d36SAndroid Build Coastguard Worker Commit();
279*48a54d36SAndroid Build Coastguard Worker }
280*48a54d36SAndroid Build Coastguard Worker }
281*48a54d36SAndroid Build Coastguard Worker
282*48a54d36SAndroid Build Coastguard Worker
283*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
284*48a54d36SAndroid Build Coastguard Worker // CRegistrationPage::Commit
285*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
286*48a54d36SAndroid Build Coastguard Worker
287*48a54d36SAndroid Build Coastguard Worker void
Commit()288*48a54d36SAndroid Build Coastguard Worker CRegistrationPage::Commit()
289*48a54d36SAndroid Build Coastguard Worker {
290*48a54d36SAndroid Build Coastguard Worker CString hostname;
291*48a54d36SAndroid Build Coastguard Worker char hostnameUTF8[ 256 ];
292*48a54d36SAndroid Build Coastguard Worker CString username;
293*48a54d36SAndroid Build Coastguard Worker char usernameUTF8[ 256 ];
294*48a54d36SAndroid Build Coastguard Worker CString password;
295*48a54d36SAndroid Build Coastguard Worker char passwordUTF8[ 256 ];
296*48a54d36SAndroid Build Coastguard Worker DWORD enabled = 1;
297*48a54d36SAndroid Build Coastguard Worker BOOL secret = FALSE;
298*48a54d36SAndroid Build Coastguard Worker DWORD err;
299*48a54d36SAndroid Build Coastguard Worker
300*48a54d36SAndroid Build Coastguard Worker m_hostnameControl.GetWindowText( hostname );
301*48a54d36SAndroid Build Coastguard Worker hostname.MakeLower();
302*48a54d36SAndroid Build Coastguard Worker hostname.TrimRight( '.' );
303*48a54d36SAndroid Build Coastguard Worker StringObjectToUTF8String( hostname, hostnameUTF8, sizeof( hostnameUTF8 ) );
304*48a54d36SAndroid Build Coastguard Worker
305*48a54d36SAndroid Build Coastguard Worker m_usernameControl.GetWindowText( username );
306*48a54d36SAndroid Build Coastguard Worker m_passwordControl.GetWindowText( password );
307*48a54d36SAndroid Build Coastguard Worker
308*48a54d36SAndroid Build Coastguard Worker if ( username.GetLength() && password.GetLength() )
309*48a54d36SAndroid Build Coastguard Worker {
310*48a54d36SAndroid Build Coastguard Worker StringObjectToUTF8String( username, usernameUTF8, sizeof( usernameUTF8 ) );
311*48a54d36SAndroid Build Coastguard Worker StringObjectToUTF8String( password, passwordUTF8, sizeof( passwordUTF8 ) );
312*48a54d36SAndroid Build Coastguard Worker secret = TRUE;
313*48a54d36SAndroid Build Coastguard Worker }
314*48a54d36SAndroid Build Coastguard Worker
315*48a54d36SAndroid Build Coastguard Worker if ( m_hostnameSetupKey != NULL )
316*48a54d36SAndroid Build Coastguard Worker {
317*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( m_hostnameSetupKey, L"", 0, REG_SZ, (LPBYTE) (LPCTSTR) hostname, ( hostname.GetLength() + 1 ) * sizeof( TCHAR ) );
318*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
319*48a54d36SAndroid Build Coastguard Worker
320*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( m_hostnameSetupKey, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
321*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
322*48a54d36SAndroid Build Coastguard Worker
323*48a54d36SAndroid Build Coastguard Worker if ( secret )
324*48a54d36SAndroid Build Coastguard Worker {
325*48a54d36SAndroid Build Coastguard Worker LsaSetSecret( hostnameUTF8, usernameUTF8, passwordUTF8 );
326*48a54d36SAndroid Build Coastguard Worker }
327*48a54d36SAndroid Build Coastguard Worker }
328*48a54d36SAndroid Build Coastguard Worker
329*48a54d36SAndroid Build Coastguard Worker if ( m_registrationSetupKey != NULL )
330*48a54d36SAndroid Build Coastguard Worker {
331*48a54d36SAndroid Build Coastguard Worker TCHAR subKeyName[MAX_KEY_LENGTH];
332*48a54d36SAndroid Build Coastguard Worker DWORD cSubKeys = 0;
333*48a54d36SAndroid Build Coastguard Worker DWORD cbMaxSubKey;
334*48a54d36SAndroid Build Coastguard Worker DWORD cchMaxClass;
335*48a54d36SAndroid Build Coastguard Worker DWORD dwSize;
336*48a54d36SAndroid Build Coastguard Worker int i;
337*48a54d36SAndroid Build Coastguard Worker OSStatus err = kNoErr;
338*48a54d36SAndroid Build Coastguard Worker
339*48a54d36SAndroid Build Coastguard Worker // First, remove all the entries that are there
340*48a54d36SAndroid Build Coastguard Worker
341*48a54d36SAndroid Build Coastguard Worker err = RegQueryInfoKey( m_registrationSetupKey, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
342*48a54d36SAndroid Build Coastguard Worker if ( !err )
343*48a54d36SAndroid Build Coastguard Worker {
344*48a54d36SAndroid Build Coastguard Worker for ( i = 0; i < (int) cSubKeys; i++ )
345*48a54d36SAndroid Build Coastguard Worker {
346*48a54d36SAndroid Build Coastguard Worker dwSize = MAX_KEY_LENGTH;
347*48a54d36SAndroid Build Coastguard Worker
348*48a54d36SAndroid Build Coastguard Worker err = RegEnumKeyEx( m_registrationSetupKey, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
349*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
350*48a54d36SAndroid Build Coastguard Worker
351*48a54d36SAndroid Build Coastguard Worker err = RegDeleteKey( m_registrationSetupKey, subKeyName );
352*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
353*48a54d36SAndroid Build Coastguard Worker }
354*48a54d36SAndroid Build Coastguard Worker }
355*48a54d36SAndroid Build Coastguard Worker
356*48a54d36SAndroid Build Coastguard Worker if ( m_advertiseServices.GetCheck() )
357*48a54d36SAndroid Build Coastguard Worker {
358*48a54d36SAndroid Build Coastguard Worker const char * domainUTF8;
359*48a54d36SAndroid Build Coastguard Worker CString domain;
360*48a54d36SAndroid Build Coastguard Worker char label[ 64 ];
361*48a54d36SAndroid Build Coastguard Worker HKEY subKey = NULL;
362*48a54d36SAndroid Build Coastguard Worker
363*48a54d36SAndroid Build Coastguard Worker domainUTF8 = GetNextLabel( hostnameUTF8, label );
364*48a54d36SAndroid Build Coastguard Worker domain = domainUTF8;
365*48a54d36SAndroid Build Coastguard Worker
366*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( m_registrationSetupKey, domain, 0,
367*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &subKey, NULL );
368*48a54d36SAndroid Build Coastguard Worker if ( !err )
369*48a54d36SAndroid Build Coastguard Worker {
370*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( subKey, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
371*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
372*48a54d36SAndroid Build Coastguard Worker
373*48a54d36SAndroid Build Coastguard Worker RegCloseKey( subKey );
374*48a54d36SAndroid Build Coastguard Worker subKey = NULL;
375*48a54d36SAndroid Build Coastguard Worker }
376*48a54d36SAndroid Build Coastguard Worker
377*48a54d36SAndroid Build Coastguard Worker if ( secret )
378*48a54d36SAndroid Build Coastguard Worker {
379*48a54d36SAndroid Build Coastguard Worker LsaSetSecret( domainUTF8, usernameUTF8, passwordUTF8 );
380*48a54d36SAndroid Build Coastguard Worker }
381*48a54d36SAndroid Build Coastguard Worker }
382*48a54d36SAndroid Build Coastguard Worker }
383*48a54d36SAndroid Build Coastguard Worker
384*48a54d36SAndroid Build Coastguard Worker exit:
385*48a54d36SAndroid Build Coastguard Worker
386*48a54d36SAndroid Build Coastguard Worker return;
387*48a54d36SAndroid Build Coastguard Worker }
388