]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - mDNSWindows/ControlPanel/SharedSecret.cpp
mDNSResponder-544.tar.gz
[apple/mdnsresponder.git] / mDNSWindows / ControlPanel / SharedSecret.cpp
index e690b4979464a80d928bf94a540087bc7b702e28..3d1929588e8151ac23f19e1ab1857eb0790fe431 100644 (file)
@@ -1,54 +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.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
 
@@ -61,8 +39,8 @@ IMPLEMENT_DYNAMIC(CSharedSecret, CDialog)
 
 CSharedSecret::CSharedSecret(CWnd* pParent /*=NULL*/)
        : CDialog(CSharedSecret::IDD, pParent)
+       , m_key(_T(""))
        , m_secret(_T(""))
-       , m_secretName(_T(""))
 {
 }
 
@@ -83,8 +61,8 @@ CSharedSecret::~CSharedSecret()
 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 );
 }
 
 
@@ -92,107 +70,46 @@ BEGIN_MESSAGE_MAP(CSharedSecret, CDialog)
 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 );
 }