-\r
-\r
-*/\r
-\r
- \r
-// SharedSecret.cpp : implementation file\r
-//\r
-\r
-#include "stdafx.h"\r
-#include "SharedSecret.h"\r
-\r
-#include <DebugServices.h>\r
-#include <ntsecapi.h>\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// Private declarations\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-static BOOL\r
-InitLsaString\r
- (\r
- PLSA_UNICODE_STRING pLsaString,\r
- LPCWSTR pwszString\r
- );\r
-\r
-// SharedSecret dialog\r
-\r
-IMPLEMENT_DYNAMIC(CSharedSecret, CDialog)\r
-\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// CSharedSecret::CSharedSecret\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-CSharedSecret::CSharedSecret(CWnd* pParent /*=NULL*/)\r
- : CDialog(CSharedSecret::IDD, pParent)\r
- , m_secret(_T(""))\r
- , m_secretName(_T(""))\r
-{\r
-}\r
-\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// CSharedSecret::~CSharedSecret\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-CSharedSecret::~CSharedSecret()\r
-{\r
-}\r
-\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// CSharedSecret::DoDataExchange\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-void CSharedSecret::DoDataExchange(CDataExchange* pDX)\r
-{\r
- CDialog::DoDataExchange(pDX);\r
- DDX_Text(pDX, IDC_SECRET, m_secret);\r
- DDX_Text(pDX, IDC_SECRET_NAME, m_secretName);\r
-}\r
-\r
-\r
-BEGIN_MESSAGE_MAP(CSharedSecret, CDialog)\r
-END_MESSAGE_MAP()\r
-\r
-\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// CSharedSecret::Commit\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-void\r
-CSharedSecret::Commit()\r
-{\r
- LSA_OBJECT_ATTRIBUTES attrs;\r
- LSA_HANDLE handle = NULL;\r
- NTSTATUS res;\r
- LSA_UNICODE_STRING lucKeyName;\r
- LSA_UNICODE_STRING lucPrivateData;\r
- BOOL ok;\r
- OSStatus err;\r
-\r
- // If there isn't a trailing dot, add one because the mDNSResponder\r
- // presents names with the trailing dot.\r
-\r
- if ( m_secretName.ReverseFind( '.' ) != m_secretName.GetLength() )\r
- {\r
- m_secretName += '.';\r
- }\r
-\r
- // attrs are reserved, so initialize to zeroes.\r
-\r
- ZeroMemory(&attrs, sizeof( attrs ) );\r
-\r
- // Get a handle to the Policy object on the local system\r
-\r
- res = LsaOpenPolicy( NULL, &attrs, POLICY_ALL_ACCESS, &handle );\r
- err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr );\r
- require_noerr( err, exit );\r
-\r
- // Intializing PLSA_UNICODE_STRING structures\r
-\r
- ok = InitLsaString( &lucKeyName, m_secretName );\r
- err = translate_errno( ok, errno_compat(), kUnknownErr );\r
- require_noerr( err, exit );\r
-\r
- ok = InitLsaString( &lucPrivateData, m_secret );\r
- err = translate_errno( ok, errno_compat(), kUnknownErr );\r
- require_noerr( err, exit );\r
-\r
- // Store the private data.\r
-\r
- res = LsaStorePrivateData( handle, &lucKeyName, &lucPrivateData );\r
- err = translate_errno( res == 0, LsaNtStatusToWinError( res ), kUnknownErr );\r
- require_noerr( err, exit );\r
-\r
-exit:\r
-\r
- if ( handle )\r
- {\r
- LsaClose( handle );\r
- handle = NULL;\r
- }\r
-\r
- return;\r
-}\r
-\r
-\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-// InitLsaString\r
-//---------------------------------------------------------------------------------------------------------------------------\r
-\r
-static BOOL\r
-InitLsaString\r
- (\r
- PLSA_UNICODE_STRING pLsaString,\r
- LPCWSTR pwszString\r
- )\r
-{\r
- size_t dwLen = 0;\r
- BOOL ret = FALSE;\r
- \r
- if ( pLsaString == NULL )\r
- {\r
- goto exit;\r
- }\r
-\r
- if ( pwszString != NULL ) \r
- {\r
- dwLen = wcslen(pwszString);\r
-\r
- // String is too large\r
- if (dwLen > 0x7ffe)\r
- {\r
- goto exit;\r
- }\r
- }\r
-\r
- // Store the string.\r
- \r
- pLsaString->Buffer = (WCHAR *) pwszString;\r
- pLsaString->Length = (USHORT) dwLen * sizeof(WCHAR);\r
- pLsaString->MaximumLength = (USHORT)(dwLen+1) * sizeof(WCHAR);\r
-\r
- ret = TRUE;\r
-\r
-exit:\r
-\r
- return ret;\r
-}\r
+
+
+*/
+
+
+// SharedSecret.cpp : implementation file
+//
+
+
+#include <Secret.h>
+#include "stdafx.h"
+#include "SharedSecret.h"
+#include <WinServices.h>
+
+#include <DebugServices.h>
+
+
+// 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 );
+}