X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/7cb34e5c3616917483a8e75510de0387e51833cc..cc340f17b1c2189bb2fe03df9e50871ecda4f8e7:/mDNSWindows/ControlPanel/SharedSecret.cpp?ds=inline diff --git a/mDNSWindows/ControlPanel/SharedSecret.cpp b/mDNSWindows/ControlPanel/SharedSecret.cpp old mode 100755 new mode 100644 index 6c42aca..7ba6a2a --- a/mDNSWindows/ControlPanel/SharedSecret.cpp +++ b/mDNSWindows/ControlPanel/SharedSecret.cpp @@ -1,198 +1,226 @@ -/* - * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * 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. - * - * 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 - * limitations under the License. - * - * @APPLE_LICENSE_HEADER_END@ - - Change History (most recent first): - +/* + * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * 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. + * + * 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 + * 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 "stdafx.h" -#include "SharedSecret.h" - -#include -#include - -//--------------------------------------------------------------------------------------------------------------------------- -// Private declarations -//--------------------------------------------------------------------------------------------------------------------------- - -static BOOL -InitLsaString - ( - PLSA_UNICODE_STRING pLsaString, - LPCWSTR pwszString - ); - -// SharedSecret dialog - -IMPLEMENT_DYNAMIC(CSharedSecret, CDialog) - - -//--------------------------------------------------------------------------------------------------------------------------- -// CSharedSecret::CSharedSecret -//--------------------------------------------------------------------------------------------------------------------------- - -CSharedSecret::CSharedSecret(CWnd* pParent /*=NULL*/) - : CDialog(CSharedSecret::IDD, pParent) - , m_secret(_T("")) - , m_secretName(_T("")) -{ -} - - -//--------------------------------------------------------------------------------------------------------------------------- -// CSharedSecret::~CSharedSecret -//--------------------------------------------------------------------------------------------------------------------------- - -CSharedSecret::~CSharedSecret() -{ -} - - -//--------------------------------------------------------------------------------------------------------------------------- -// CSharedSecret::DoDataExchange -//--------------------------------------------------------------------------------------------------------------------------- - -void CSharedSecret::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - DDX_Text(pDX, IDC_SECRET, m_secret); - DDX_Text(pDX, IDC_SECRET_NAME, m_secretName); -} - - -BEGIN_MESSAGE_MAP(CSharedSecret, CDialog) -END_MESSAGE_MAP() - - - -//--------------------------------------------------------------------------------------------------------------------------- -// CSharedSecret::Commit -//--------------------------------------------------------------------------------------------------------------------------- - -void -CSharedSecret::Commit() -{ - LSA_OBJECT_ATTRIBUTES attrs; - LSA_HANDLE handle = NULL; - NTSTATUS res; - LSA_UNICODE_STRING lucKeyName; - LSA_UNICODE_STRING lucPrivateData; - BOOL ok; - OSStatus err; - - // If there isn't a trailing dot, add one because the mDNSResponder - // presents names with the trailing dot. - - if ( m_secretName.ReverseFind( '.' ) != m_secretName.GetLength() ) - { - m_secretName += '.'; - } - - // 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( &lucKeyName, m_secretName ); - err = translate_errno( ok, errno_compat(), kUnknownErr ); - require_noerr( err, exit ); - - ok = InitLsaString( &lucPrivateData, m_secret ); - err = translate_errno( ok, errno_compat(), kUnknownErr ); - require_noerr( err, exit ); - - // Store the private data. - - res = LsaStorePrivateData( handle, &lucKeyName, &lucPrivateData ); - err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr ); - require_noerr( err, exit ); - -exit: - - if ( handle ) - { - LsaClose( handle ); - handle = NULL; - } - - return; -} - - -//--------------------------------------------------------------------------------------------------------------------------- -// InitLsaString -//--------------------------------------------------------------------------------------------------------------------------- - -static BOOL -InitLsaString - ( - PLSA_UNICODE_STRING pLsaString, - LPCWSTR pwszString - ) -{ - 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; - -exit: - - return ret; -} + + +*/ + + +// SharedSecret.cpp : implementation file +// + +#include "stdafx.h" +#include "SharedSecret.h" + +#include +#include + +//--------------------------------------------------------------------------------------------------------------------------- +// Private declarations +//--------------------------------------------------------------------------------------------------------------------------- + +static BOOL +InitLsaString + ( + PLSA_UNICODE_STRING pLsaString, + LPCWSTR pwszString + ); + +// SharedSecret dialog + +IMPLEMENT_DYNAMIC(CSharedSecret, CDialog) + + +//--------------------------------------------------------------------------------------------------------------------------- +// CSharedSecret::CSharedSecret +//--------------------------------------------------------------------------------------------------------------------------- + +CSharedSecret::CSharedSecret(CWnd* pParent /*=NULL*/) + : CDialog(CSharedSecret::IDD, pParent) + , m_key(_T("")) + , m_secret(_T("")) +{ +} + + +//--------------------------------------------------------------------------------------------------------------------------- +// CSharedSecret::~CSharedSecret +//--------------------------------------------------------------------------------------------------------------------------- + +CSharedSecret::~CSharedSecret() +{ +} + + +//--------------------------------------------------------------------------------------------------------------------------- +// CSharedSecret::DoDataExchange +//--------------------------------------------------------------------------------------------------------------------------- + +void CSharedSecret::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + DDX_Text(pDX, IDC_KEY, m_key ); + DDX_Text(pDX, IDC_SECRET, m_secret ); +} + + +BEGIN_MESSAGE_MAP(CSharedSecret, CDialog) +END_MESSAGE_MAP() + + + +//--------------------------------------------------------------------------------------------------------------------------- +// CSharedSecret::Commit +//--------------------------------------------------------------------------------------------------------------------------- + +void +CSharedSecret::Commit( 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 += '.'; + } + + if ( m_key.ReverseFind( '.' ) != m_key.GetLength() ) + { + m_key += '.'; + } + + // + // + // 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 ) + { + LsaClose( handle ); + handle = NULL; + } + + return; +} + + +//--------------------------------------------------------------------------------------------------------------------------- +// InitLsaString +//--------------------------------------------------------------------------------------------------------------------------- + +static BOOL +InitLsaString + ( + PLSA_UNICODE_STRING pLsaString, + LPCWSTR pwszString + ) +{ + 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; + +exit: + + return ret; +}