//#-------------------------------------------------------------- // // File: prevalidator.cpp // // Synopsis: Implementation of CPreValidator class methods // // // History: 9/23/97 MKarki Created // // Copyright (C) 1997-98 Microsoft Corporation // All rights reserved. // //---------------------------------------------------------------- #include "radcommon.h" #include "radpkt.h" #include "prevalidator.h" #include //+++------------------------------------------------------------- // // Function: CPreValidator // // Synopsis: This is the constructor of the CPreValidator class // // Arguments: NONE // // Returns: NONE // // // History: MKarki Created 9/26/97 // //---------------------------------------------------------------- CPreValidator::CPreValidator( VOID ) : m_pCValAccess (NULL), m_pCValAttributes (NULL), m_pCValAccounting (NULL), m_pCValProxy (NULL) { } // end of CPreValidator constructor //+++------------------------------------------------------------- // // Function: ~CPreValidator // // Synopsis: This is the destructor of the CPreValidator class // // Arguments: NONE // // Returns: NONE // // // History: MKarki Created 9/26/97 // //---------------------------------------------------------------- CPreValidator::~CPreValidator( VOID ) { if (m_pCValProxy) {delete m_pCValProxy;} if (m_pCValAttributes) {delete m_pCValAttributes;} if (m_pCValAccess) {delete m_pCValAccess;} if (m_pCValAccounting) {delete m_pCValAccounting;} } // end of CPreValidator::~CPreValidator //+++------------------------------------------------------------- // // Function: Init // // Synopsis: This is the CPreValidator class initialization method // // Arguments: // [in] - CDictionary* // [in] - CPreProcsssor* // [in] - CClients* // [in] - CHashMD5* // [in] - CProxyState* // [in] - CSendToPipe* // [in] - CReportEvent* // // Returns: BOOL - status // // Called By: CController::OnInit class public method // // History: MKarki Created 9/26/97 // //---------------------------------------------------------------- BOOL CPreValidator::Init( CDictionary *pCDictionary, CPreProcessor *pCPreProcessor, CClients *pCClients, CHashMD5 *pCHashMD5, CProxyState *pCProxyState, CSendToPipe *pCSendToPipe, CReportEvent *pCReportEvent ) { BOOL bRetVal = FALSE; BOOL bStatus = FALSE; _ASSERT ( (NULL != pCDictionary) && (NULL != pCPreProcessor)&& (NULL != pCClients) && (NULL != pCHashMD5) && (NULL != pCProxyState) && (NULL != pCSendToPipe) && (NULL != pCReportEvent) ); // // attribute validator // m_pCValAttributes = new (std::nothrow) CValAttributes(); if (NULL == m_pCValAttributes) { IASTracePrintf ( "Memory allocation for Attribute Validator failed during " "Pre-Validation" ); goto Cleanup; } // // initalize the attribute validator class object // bStatus = m_pCValAttributes->Init (pCDictionary, pCReportEvent); if (FALSE == bStatus) { IASTracePrintf ("Attribute Validator Initialization failed"); goto Cleanup; } // // Accounting Request validator // m_pCValAccounting = new (std::nothrow) CValAccounting (); if (NULL == m_pCValAccounting) { IASTracePrintf ( "Memory allocation for accounting validator failed " "during pre-validation" ); goto Cleanup; } bStatus = m_pCValAccounting->Init ( m_pCValAttributes, pCPreProcessor, pCClients, pCHashMD5, pCReportEvent ); if (FALSE == bStatus) { IASTracePrintf ("Accounting Validator Initialization failed"); goto Cleanup; } // // Access Request validator // m_pCValAccess = new (std::nothrow) CValAccess(); if (NULL == m_pCValAccess) { IASTracePrintf ( "Memory allocation for access validator failed " "during pre-validation" ); goto Cleanup; } bStatus = m_pCValAccess->Init ( m_pCValAttributes, pCPreProcessor, pCClients, pCHashMD5, pCReportEvent ); if (FALSE == bStatus) { IASTracePrintf ("Accounting Validator Initialization failed"); goto Cleanup; } // // Proxy Packet validator // m_pCValProxy = new (std::nothrow) CValProxy (); if (NULL == m_pCValAttributes) { IASTracePrintf ( "Memory allocation for proxy alidator failed " "during pre-validation" ); goto Cleanup; } // // initialize the CValProxy class object // bStatus = m_pCValProxy->Init ( m_pCValAttributes, pCPreProcessor, pCClients, pCHashMD5, pCProxyState, pCSendToPipe, pCReportEvent ); if (FALSE == bStatus) { IASTracePrintf ("Proxy Validator Initialization failed"); goto Cleanup; } // // success // bRetVal = TRUE; Cleanup: if (FALSE == bRetVal) { if (m_pCValProxy) {delete m_pCValProxy;} if (m_pCValAttributes) {delete m_pCValAttributes;} if (m_pCValAccess) {delete m_pCValAccess;} if (m_pCValAccounting) {delete m_pCValAccounting;} } return (bRetVal); } // end of CPreValidator::Init method //+++------------------------------------------------------------- // // Function: StartInValidation // // Synopsis: This is the CPreValidator class method used to // initiate the validation of an inbound RADIUS packet // // Arguments: [in] - CPacketRadius* // // Returns: HRESULT - status // // History: MKarki Created 9/26/97 // // Called By: CPacketReceiver::ReceivePacket class private method // //---------------------------------------------------------------- HRESULT CPreValidator::StartInValidation( CPacketRadius * pCPacketRadius ) { HRESULT hr = S_OK; PACKETTYPE ePacketType; _ASSERT (NULL != pCPacketRadius); __try { // // get the packet type for this RADIUS packet // ePacketType = pCPacketRadius->GetInCode (); // // call the appropriate validator depending upon the packet // type // switch (ePacketType) { case ACCESS_REQUEST: hr = m_pCValAccess->ValidateInPacket (pCPacketRadius); break; case ACCOUNTING_REQUEST: hr = m_pCValAccounting->ValidateInPacket (pCPacketRadius); break; case ACCESS_REJECT: case ACCESS_CHALLENGE: case ACCESS_ACCEPT: case ACCOUNTING_RESPONSE: hr = m_pCValProxy->ValidateInPacket (pCPacketRadius); break; default: // // should never reach here // _ASSERT (0); IASTracePrintf ( "Packet of Unknown Type:%d, in pre-validator", static_cast (ePacketType) ); hr = E_FAIL; break; } } __finally { } return (hr); } // end of CPreValidator::StartInValidation method //+++------------------------------------------------------------- // // Function: StartOutValidation // // Synopsis: This is the CPreValidator class method used to // initiate the validation of an outbound RADIUS packet // // Arguments: // [in] CPacketRadius* // // Returns: HRESULT - status // // History: MKarki Created 9/26/97 // // Called By: // //---------------------------------------------------------------- HRESULT CPreValidator::StartOutValidation( CPacketRadius * pCPacketRadius ) { HRESULT hr = S_OK; __try { /* bStatus = pCValidator->ValidateOutPacket (pCPacketRadius); if (FALSE == bStatus) { __leave; } */ // // we have completeted the pre-validation successfully // } __finally { // // nothing here for now // } return (hr); } // end of CPreValidator::StartOutValidation method