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.
 
 
 
 
 
 

165 lines
4.0 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-2002.
//
// File: CRL.cpp
//
// Contents: implementation of the CCRL class.
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "CRL.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCRL::CCRL(const PCCRL_CONTEXT pCRLContext, CCertStore& rCertStore) :
CCertMgrCookie (CERTMGR_CRL),
m_pCRLContext (::CertDuplicateCRLContext (pCRLContext)),
m_rCertStore (rCertStore),
m_pCRLInfo (0)
{
ASSERT (CERTMGR_CRL == m_objecttype);
m_rCertStore.AddRef ();
ASSERT (m_pCRLContext);
if ( m_pCRLContext )
m_pCRLInfo = m_pCRLContext->pCrlInfo;
}
CCRL::~CCRL()
{
ASSERT (CERTMGR_CRL == m_objecttype);
m_rCertStore.Release ();
if ( m_pCRLContext )
::CertFreeCRLContext (m_pCRLContext);
}
PCCRL_CONTEXT CCRL::GetCRLContext() const
{
ASSERT (CERTMGR_CRL == m_objecttype);
return m_pCRLContext;
}
CCertStore& CCRL::GetCertStore() const
{
ASSERT (CERTMGR_CRL == m_objecttype);
return m_rCertStore;
}
CString CCRL::GetIssuerName ()
{
ASSERT (CERTMGR_CRL == m_objecttype);
ASSERT (m_pCRLInfo);
if ( m_pCRLInfo )
{
// Decode issuer name if not already present
if ( m_szIssuerName.IsEmpty () )
{
HRESULT hResult = ConvertNameBlobToString (m_pCRLInfo->Issuer,
m_szIssuerName);
if ( !SUCCEEDED (hResult) )
return _T("");
}
}
else
return _T("");
return m_szIssuerName;
}
CString CCRL::GetEffectiveDate()
{
ASSERT (CERTMGR_CRL == m_objecttype);
ASSERT (m_pCRLInfo);
if ( m_pCRLInfo )
{
// Format date/time string if not already present
if ( m_szEffectiveDate.IsEmpty () )
{
HRESULT hResult = FormatDate (m_pCRLInfo->ThisUpdate, m_szEffectiveDate);
if ( !SUCCEEDED (hResult) )
m_szEffectiveDate = _T("");
}
}
else
m_szEffectiveDate = _T("");
return m_szEffectiveDate;
}
CString CCRL::GetNextUpdate()
{
ASSERT (CERTMGR_CRL == m_objecttype);
ASSERT (m_pCRLInfo);
if ( m_pCRLInfo )
{
// Format date/time string if not already present
if ( m_szNextUpdate.IsEmpty () )
{
HRESULT hResult = FormatDate (m_pCRLInfo->NextUpdate, m_szNextUpdate);
if ( !SUCCEEDED (hResult) )
m_szNextUpdate = _T("");
}
}
else
m_szNextUpdate = _T("");
return m_szNextUpdate;
}
int CCRL::CompareEffectiveDate (const CCRL& crl) const
{
ASSERT (CERTMGR_CRL == m_objecttype);
int compVal = 0;
ASSERT (m_pCRLInfo && crl.m_pCRLInfo);
if ( m_pCRLInfo && crl.m_pCRLInfo )
{
compVal = ::CompareFileTime (&m_pCRLInfo->ThisUpdate,
&crl.m_pCRLInfo->ThisUpdate);
}
return compVal;
}
int CCRL::CompareNextUpdate (const CCRL& crl) const
{
ASSERT (CERTMGR_CRL == m_objecttype);
int compVal = 0;
ASSERT (m_pCRLInfo && crl.m_pCRLInfo);
if ( m_pCRLInfo && crl.m_pCRLInfo )
{
compVal = ::CompareFileTime (&m_pCRLInfo->NextUpdate,
&crl.m_pCRLInfo->NextUpdate);
}
return compVal;
}
void CCRL::Refresh()
{
m_szEffectiveDate = L"";
m_szIssuerName = L"";
m_szNextUpdate = L"";
}
BOOL CCRL::DeleteFromStore()
{
BOOL bResult = FALSE;
ASSERT (m_pCRLContext);
if ( m_pCRLContext )
{
bResult = ::CertDeleteCRLFromStore (
::CertDuplicateCRLContext (m_pCRLContext));
if ( bResult )
m_rCertStore.SetDirty ();
}
return bResult;
}