X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/c9d2d929f6ad52e6996754033ee77c725b90d1d4..0b74dd16dce34c1c64267ece7abda266fa586255:/mDNSWindows/ControlPanel/SharedSecret.cpp diff --git a/mDNSWindows/ControlPanel/SharedSecret.cpp b/mDNSWindows/ControlPanel/SharedSecret.cpp index 8f0260b..3d19295 100644 --- a/mDNSWindows/ControlPanel/SharedSecret.cpp +++ b/mDNSWindows/ControlPanel/SharedSecret.cpp @@ -1,60 +1,32 @@ -/* +/* -*- 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: SharedSecret.cpp,v $ -Revision 1.4 2005/10/18 06:13:41 herscher - Prepend "$" to key name to ensure that secure updates work if the domain name and key name are the same - -Revision 1.3 2005/04/06 02:04:49 shersche - Registering with shared secret doesn't work - -Revision 1.2 2005/03/03 19:55:22 shersche - ControlPanel source code isn't saving CVS log info - - -*/ + */ // SharedSecret.cpp : implementation file // + +#include #include "stdafx.h" #include "SharedSecret.h" +#include #include -#include - -//--------------------------------------------------------------------------------------------------------------------------- -// Private declarations -//--------------------------------------------------------------------------------------------------------------------------- -static BOOL -InitLsaString - ( - PLSA_UNICODE_STRING pLsaString, - LPCWSTR pwszString - ); // SharedSecret dialog @@ -98,129 +70,46 @@ BEGIN_MESSAGE_MAP(CSharedSecret, CDialog) END_MESSAGE_MAP() - //--------------------------------------------------------------------------------------------------------------------------- -// CSharedSecret::Commit +// CSharedSecret::Load //--------------------------------------------------------------------------------------------------------------------------- void -CSharedSecret::Commit( CString zone ) +CSharedSecret::Load( CString zone ) { - LSA_OBJECT_ATTRIBUTES attrs; - LSA_HANDLE handle = NULL; - NTSTATUS res; - LSA_UNICODE_STRING lucZoneName; - LSA_UNICODE_STRING lucKeyName; - LSA_UNICODE_STRING lucSecretName; - BOOL ok; - OSStatus err; - - // If there isn't a trailing dot, add one because the mDNSResponder - // presents names with the trailing dot. - - if ( zone.ReverseFind( '.' ) != zone.GetLength() ) - { - zone += '.'; - } + char zoneUTF8[ 256 ]; + char outDomain[ 256 ]; + char outKey[ 256 ]; + char outSecret[ 256 ]; - if ( m_key.ReverseFind( '.' ) != m_key.GetLength() ) + StringObjectToUTF8String( zone, zoneUTF8, sizeof( zoneUTF8 ) ); + + if ( LsaGetSecret( zoneUTF8, outDomain, sizeof( outDomain ) / sizeof( TCHAR ), outKey, sizeof( outKey ) / sizeof( TCHAR ), outSecret, sizeof( outSecret ) / sizeof( TCHAR ) ) ) { - m_key += '.'; + m_key = outKey; + m_secret = outSecret; } - - // - // - // Prepend "$" to the key name, so that there will - // be no conflict between the zone name and the key - // name - - m_key.Insert( 0, L"$" ); - - // attrs are reserved, so initialize to zeroes. - - ZeroMemory( &attrs, sizeof( attrs ) ); - - // Get a handle to the Policy object on the local system - - res = LsaOpenPolicy( NULL, &attrs, POLICY_ALL_ACCESS, &handle ); - err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr ); - require_noerr( err, exit ); - - // Intializing PLSA_UNICODE_STRING structures - - ok = InitLsaString( &lucZoneName, zone ); - err = translate_errno( ok, errno_compat(), kUnknownErr ); - require_noerr( err, exit ); - - ok = InitLsaString( &lucKeyName, m_key ); - err = translate_errno( ok, errno_compat(), kUnknownErr ); - require_noerr( err, exit ); - - ok = InitLsaString( &lucSecretName, m_secret ); - err = translate_errno( ok, errno_compat(), kUnknownErr ); - require_noerr( err, exit ); - - // Store the private data. - - res = LsaStorePrivateData( handle, &lucZoneName, &lucKeyName ); - err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr ); - require_noerr( err, exit ); - - res = LsaStorePrivateData( handle, &lucKeyName, &lucSecretName ); - err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr ); - require_noerr( err, exit ); - -exit: - - if ( handle ) + else { - LsaClose( handle ); - handle = NULL; + m_key = zone; } - - return; } //--------------------------------------------------------------------------------------------------------------------------- -// InitLsaString +// CSharedSecret::Commit //--------------------------------------------------------------------------------------------------------------------------- -static BOOL -InitLsaString - ( - PLSA_UNICODE_STRING pLsaString, - LPCWSTR pwszString - ) +void +CSharedSecret::Commit( CString zone ) { - size_t dwLen = 0; - BOOL ret = FALSE; - - if ( pLsaString == NULL ) - { - goto exit; - } - - if ( pwszString != NULL ) - { - dwLen = wcslen(pwszString); - - // String is too large - if (dwLen > 0x7ffe) - { - goto exit; - } - } - - // Store the string. - - pLsaString->Buffer = (WCHAR *) pwszString; - pLsaString->Length = (USHORT) dwLen * sizeof(WCHAR); - pLsaString->MaximumLength = (USHORT)(dwLen+1) * sizeof(WCHAR); - - ret = TRUE; + char zoneUTF8[ 256 ]; + char keyUTF8[ 256 ]; + char secretUTF8[ 256 ]; -exit: + StringObjectToUTF8String( zone, zoneUTF8, sizeof( zoneUTF8 ) ); + StringObjectToUTF8String( m_key, keyUTF8, sizeof( keyUTF8 ) ); + StringObjectToUTF8String( m_secret, secretUTF8, sizeof( secretUTF8 ) ); - return ret; + LsaSetSecret( zoneUTF8, keyUTF8, secretUTF8 ); }