-/*
+/* -*- 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.2 2005/03/03 19:55:22 shersche
-<rdar://problem/4034481> ControlPanel source code isn't saving CVS log info
-
-
-*/
+ */
// SharedSecret.cpp : implementation file
//
+
+#include <Secret.h>
#include "stdafx.h"
#include "SharedSecret.h"
+#include <WinServices.h>
#include <DebugServices.h>
-#include <ntsecapi.h>
-
-//---------------------------------------------------------------------------------------------------------------------------
-// Private declarations
-//---------------------------------------------------------------------------------------------------------------------------
-static BOOL
-InitLsaString
- (
- PLSA_UNICODE_STRING pLsaString,
- LPCWSTR pwszString
- );
// SharedSecret dialog
CSharedSecret::CSharedSecret(CWnd* pParent /*=NULL*/)
: CDialog(CSharedSecret::IDD, pParent)
+ , m_key(_T(""))
, m_secret(_T(""))
- , m_secretName(_T(""))
{
}
void CSharedSecret::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
- DDX_Text(pDX, IDC_SECRET, m_secret);
- DDX_Text(pDX, IDC_SECRET_NAME, m_secretName);
+ DDX_Text(pDX, IDC_KEY, m_key );
+ DDX_Text(pDX, IDC_SECRET, m_secret );
}
END_MESSAGE_MAP()
-
//---------------------------------------------------------------------------------------------------------------------------
-// CSharedSecret::Commit
+// CSharedSecret::Load
//---------------------------------------------------------------------------------------------------------------------------
void
-CSharedSecret::Commit()
+CSharedSecret::Load( CString zone )
{
- 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 );
+ char zoneUTF8[ 256 ];
+ char outDomain[ 256 ];
+ char outKey[ 256 ];
+ char outSecret[ 256 ];
- // Intializing PLSA_UNICODE_STRING structures
+ StringObjectToUTF8String( zone, zoneUTF8, sizeof( zoneUTF8 ) );
- 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 )
+ if ( LsaGetSecret( zoneUTF8, outDomain, sizeof( outDomain ) / sizeof( TCHAR ), outKey, sizeof( outKey ) / sizeof( TCHAR ), outSecret, sizeof( outSecret ) / sizeof( TCHAR ) ) )
{
- LsaClose( handle );
- handle = NULL;
+ m_key = outKey;
+ m_secret = outSecret;
+ }
+ else
+ {
+ 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 );
}