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.
 
 
 
 
 
 

223 lines
6.6 KiB

/////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000-2002.
//
// File: AddApprovalDlg.cpp
//
// Contents: Implementation of CAddApprovalDlg
//
//----------------------------------------------------------------------------
// AddApprovalDlg.cpp : implementation file
//
#include "stdafx.h"
#include "certtmpl.h"
#include "AddApprovalDlg.h"
#include "PolicyOID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern POLICY_OID_LIST g_policyOIDList;
/////////////////////////////////////////////////////////////////////////////
// CAddApprovalDlg dialog
CAddApprovalDlg::CAddApprovalDlg(CWnd* pParent, const PSTR* paszUsedApprovals)
: CHelpDialog(CAddApprovalDlg::IDD, pParent),
m_paszReturnedApprovals (0),
m_paszUsedApprovals (paszUsedApprovals)
{
//{{AFX_DATA_INIT(CAddApprovalDlg)
//}}AFX_DATA_INIT
}
CAddApprovalDlg::~CAddApprovalDlg()
{
if ( m_paszReturnedApprovals )
{
for (int nIndex = 0; m_paszReturnedApprovals[nIndex]; nIndex++)
delete [] m_paszReturnedApprovals[nIndex];
delete [] m_paszReturnedApprovals;
}
}
void CAddApprovalDlg::DoDataExchange(CDataExchange* pDX)
{
CHelpDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddApprovalDlg)
DDX_Control(pDX, IDC_APPROVAL_LIST, m_issuanceList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddApprovalDlg, CHelpDialog)
//{{AFX_MSG_MAP(CAddApprovalDlg)
ON_LBN_SELCHANGE(IDC_APPROVAL_LIST, OnSelchangeApprovalList)
ON_LBN_DBLCLK(IDC_APPROVAL_LIST, OnDblclkApprovalList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddApprovalDlg message handlers
BOOL CAddApprovalDlg::OnInitDialog()
{
CHelpDialog::OnInitDialog();
for (POSITION nextPos = g_policyOIDList.GetHeadPosition (); nextPos; )
{
CPolicyOID* pPolicyOID = g_policyOIDList.GetNext (nextPos);
if ( pPolicyOID )
{
// If this is the Application OID dialog, show only application
// OIDS, otherwise if this is the Issuance OID dialog, show only
// issuance OIDs
if ( pPolicyOID->IsIssuanceOID () )
{
bool bFound = false;
// Don't display an approval that's already been used
if ( m_paszUsedApprovals )
{
for (int nIndex = 0; m_paszUsedApprovals[nIndex]; nIndex++)
{
if ( !strcmp (pPolicyOID->GetOIDA (), m_paszUsedApprovals[nIndex]) )
{
bFound = true;
break;
}
}
}
if ( !bFound )
{
int nIndex = m_issuanceList.AddString (pPolicyOID->GetDisplayName ());
if ( nIndex >= 0 )
{
// security review 2/21/2002 BryanWal ok
LPSTR pszOID = new char[strlen (pPolicyOID->GetOIDA ())+1];
if ( pszOID )
{
strcpy (pszOID, pPolicyOID->GetOIDA ());
m_issuanceList.SetItemDataPtr (nIndex, pszOID);
}
else
break;
}
}
}
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddApprovalDlg::EnableControls()
{
GetDlgItem (IDOK)->EnableWindow (m_issuanceList.GetSelCount () > 0);
}
void CAddApprovalDlg::OnOK()
{
int nSelectedCnt = m_issuanceList.GetSelCount ();
// allocate an array of PSTR pointers and set each item to an approval.
// Set the last to NULL
if ( nSelectedCnt )
{
int* pnSelItems = new int[nSelectedCnt];
if ( pnSelItems )
{
if ( LB_ERR != m_issuanceList.GetSelItems (nSelectedCnt, pnSelItems) )
{
m_paszReturnedApprovals = new PSTR[nSelectedCnt+1];
if ( m_paszReturnedApprovals )
{
// security review 2/21/2002 BryanWal ok
::ZeroMemory (m_paszReturnedApprovals, sizeof (PSTR) * (nSelectedCnt+1));
for (int nIndex = 0; nIndex < nSelectedCnt; nIndex++)
{
PSTR pszPolicyOID = (PSTR) m_issuanceList.GetItemData (pnSelItems[nIndex]);
if ( pszPolicyOID )
{
// security review 2/21/2002 BryanWal ok
PSTR pNewStr = new char[strlen (pszPolicyOID) + 1];
if ( pNewStr )
{
// security review 2/21/2002 BryanWal ok
strcpy (pNewStr, pszPolicyOID);
m_paszReturnedApprovals[nIndex] = pNewStr;
}
else
break;
}
}
}
}
delete [] pnSelItems;
}
}
CHelpDialog::OnOK();
}
bool CAddApprovalDlg::ApprovalAlreadyUsed(PCSTR pszOID) const
{
bool bResult = false;
if ( m_paszUsedApprovals )
{
for (int nIndex = 0; m_paszUsedApprovals[nIndex]; nIndex++)
{
if ( !strcmp (m_paszUsedApprovals[nIndex], pszOID) )
{
bResult = true;
break;
}
}
}
return bResult;
}
void CAddApprovalDlg::DoContextHelp (HWND hWndControl)
{
_TRACE(1, L"Entering CAddApprovalDlg::DoContextHelp\n");
switch (::GetDlgCtrlID (hWndControl))
{
case IDC_STATIC:
break;
default:
// Display context help for a control
if ( !::WinHelp (
hWndControl,
GetContextHelpFile (),
HELP_WM_HELP,
(DWORD_PTR) g_aHelpIDs_IDD_ADD_APPROVAL) )
{
_TRACE(0, L"WinHelp () failed: 0x%x\n", GetLastError ());
}
break;
}
_TRACE(-1, L"Leaving CAddApprovalDlg::DoContextHelp\n");
}
void CAddApprovalDlg::OnSelchangeApprovalList()
{
EnableControls ();
}
void CAddApprovalDlg::OnDblclkApprovalList()
{
OnOK ();
}