X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/f5e6e86cb0d7e0c7608c30d93ecb200173f29055..95d7a4a31d5b4557b29fba1e0cdd09f1216ada8c:/mDNSWindows/ControlPanel/SharedSecret.cpp diff --git a/mDNSWindows/ControlPanel/SharedSecret.cpp b/mDNSWindows/ControlPanel/SharedSecret.cpp old mode 100755 new mode 100644 index 29636df..3d19295 --- a/mDNSWindows/ControlPanel/SharedSecret.cpp +++ b/mDNSWindows/ControlPanel/SharedSecret.cpp @@ -1,215 +1,115 @@ -/* - * 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.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_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 += '.'; - } - - // 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; -} +/* -*- 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. + */ + + +// SharedSecret.cpp : implementation file +// + + +#include +#include "stdafx.h" +#include "SharedSecret.h" +#include + +#include + + +// 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::Load +//--------------------------------------------------------------------------------------------------------------------------- + +void +CSharedSecret::Load( CString zone ) +{ + char zoneUTF8[ 256 ]; + char outDomain[ 256 ]; + char outKey[ 256 ]; + char outSecret[ 256 ]; + + 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 = outKey; + m_secret = outSecret; + } + else + { + m_key = zone; + } +} + + +//--------------------------------------------------------------------------------------------------------------------------- +// CSharedSecret::Commit +//--------------------------------------------------------------------------------------------------------------------------- + +void +CSharedSecret::Commit( CString zone ) +{ + char zoneUTF8[ 256 ]; + char keyUTF8[ 256 ]; + char secretUTF8[ 256 ]; + + StringObjectToUTF8String( zone, zoneUTF8, sizeof( zoneUTF8 ) ); + StringObjectToUTF8String( m_key, keyUTF8, sizeof( keyUTF8 ) ); + StringObjectToUTF8String( m_secret, secretUTF8, sizeof( secretUTF8 ) ); + + LsaSetSecret( zoneUTF8, keyUTF8, secretUTF8 ); +}