Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

191 lines
5.9 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 2002
//
// File: simprop1.cpp
//
//--------------------------------------------------------------------------
// SimProp1.cpp
#include "stdafx.h"
#include "common.h"
#include "helpids.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const TColumnHeaderItem rgzColumnHeader[] =
{
{ IDS_SIM_CERTIFICATE_FOR, 45 },
{ IDS_SIM_ISSUED_BY, 55 },
{ 0, 0 },
};
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CSimX509PropPage property page
// IMPLEMENT_DYNCREATE(CSimX509PropPage, CSimPropPage)
CSimX509PropPage::CSimX509PropPage() : CSimPropPage(CSimX509PropPage::IDD)
{
//{{AFX_DATA_INIT(CSimX509PropPage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_prgzColumnHeader = rgzColumnHeader;
VERIFY( m_strAnySubject.LoadString(IDS_SIM_ANY_SUBJECT) );
VERIFY( m_strAnyTrustedAuthority.LoadString(IDS_SIM_ANY_TRUSTED_AUTHORITY) );
}
CSimX509PropPage::~CSimX509PropPage()
{
}
void CSimX509PropPage::DoDataExchange(CDataExchange* pDX)
{
ASSERT(m_pData != NULL);
CSimPropPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSimX509PropPage)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
if (!pDX->m_bSaveAndValidate)
{
// Fill in the listview
ListView_DeleteAllItems(m_hwndListview);
for (CSimEntry * pSimEntry = m_pData->m_pSimEntryList;
pSimEntry != NULL;
pSimEntry = pSimEntry->m_pNext)
{
AddSimEntry(pSimEntry);
} // for
ListView_SelectItem(m_hwndListview, 0);
} // if
} // DoDataExchange()
/////////////////////////////////////////////////////////////////////
void CSimX509PropPage::AddSimEntry(CSimEntry * pSimEntry)
{
ASSERT(pSimEntry != NULL);
if (pSimEntry->m_eDialogTarget != eX509)
return;
LPTSTR * pargzpsz; // Pointer to allocated array of pointer to strings
pargzpsz = ParseSimString(pSimEntry->PchGetString());
if (pargzpsz == NULL)
return; // Error parsing string
ASSERT(0 == lstrcmpi(pargzpsz[0], szX509));
// Find out the Subject
LPCTSTR pszSubject = PchFindSimAttribute(pargzpsz, szSimSubject, _T("CN="));
// Find out the Issuer
LPCTSTR pszIssuer = PchFindSimAttribute(pargzpsz, szSimIssuer, _T("OU="));
// NTRAID# 423366 DS Admin snapin - Name Mappings UI doesn't show issuer names correctly sometimes
if ( !pszIssuer )
pszIssuer = PchFindSimAttribute(pargzpsz, szSimIssuer, _T("CN="));
// Finally, add the strings to the listview
CString strSubject = m_strAnySubject;
CString strIssuer = m_strAnyTrustedAuthority;
if (pszSubject != NULL)
strSimToUi(IN pszSubject, OUT &strSubject);
if (pszIssuer != NULL)
strSimToUi(IN pszIssuer, OUT &strIssuer);
const LPCTSTR rgzpsz[] = { strSubject, strIssuer, NULL };
ListView_AddStrings(m_hwndListview, IN rgzpsz, (LPARAM)pSimEntry);
delete pargzpsz;
} // AddSimEntry()
BEGIN_MESSAGE_MAP(CSimX509PropPage, CSimPropPage)
//{{AFX_MSG_MAP(CSimX509PropPage)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CSimX509PropPage::OnButtonAdd()
{
CThemeContextActivator activator;
CString strFullPath;
if (!UiGetCertificateFile(OUT &strFullPath))
return;
CCertificate cer;
if (!cer.FLoadCertificate(strFullPath))
return;
CSimCertificateDlg dlg;
dlg.m_uStringIdCaption = IDS_SIM_ADD_CERTIFICATE;
cer.GetSimString(OUT &dlg.m_strData);
if (IDOK != dlg.DoModal())
return;
CSimEntry * pSimEntry = m_pData->PAddSimEntry(dlg.m_strData);
UpdateData(FALSE);
ListView_SelectLParam(m_hwndListview, (LPARAM)pSimEntry);
SetDirty();
}
void CSimX509PropPage::OnButtonEdit()
{
CThemeContextActivator activator;
int iItem;
CSimEntry * pSimEntry = (CSimEntry *)ListView_GetItemLParam(m_hwndListview, -1, OUT &iItem);
if (pSimEntry == NULL || iItem < 0)
{
// No item selected
return;
}
CSimCertificateDlg dlg;
dlg.m_strData = pSimEntry->PchGetString();
if (IDOK != dlg.DoModal())
return;
pSimEntry->SetString(dlg.m_strData);
UpdateData(FALSE);
ListView_SelectLParam(m_hwndListview, (LPARAM)pSimEntry);
SetDirty();
}
BOOL CSimX509PropPage::OnApply()
{
if (!m_pData->FOnApply( GetSafeHwnd() ))
{
// Unable to write the information
return FALSE;
}
UpdateData(FALSE);
UpdateUI();
return CPropertyPage::OnApply();
}
void CSimX509PropPage::DoContextHelp (HWND hWndControl)
{
TRACE0 ("Entering CSimX509PropPage::DoContextHelp\n");
static const DWORD help_map[] =
{
IDC_EDIT_USER_ACCOUNT, IDH_EDIT_USER_ACCOUNT,
IDC_LISTVIEW, IDH_LISTVIEW_X509,
IDC_BUTTON_ADD, IDH_BUTTON_ADD,
IDC_BUTTON_EDIT, IDH_BUTTON_EDIT,
IDC_BUTTON_REMOVE, IDH_BUTTON_REMOVE,
IDCANCEL, IDH_BUTTON_REMOVE, //IDH_CANCEL_BUTTON,
IDOK, IDH_BUTTON_REMOVE, //IDH_OK_BUTTON,
0, 0
};
// Display context help for a control
if ( !::WinHelp (
hWndControl,
DSADMIN_CONTEXT_HELP_FILE,
HELP_WM_HELP,
(DWORD_PTR) help_map) )
{
TRACE1 ("WinHelp () failed: 0x%x\n", GetLastError ());
}
TRACE0 ("Leaving CSimX509PropPage::DoContextHelp\n");
}