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.
|
|
//#--------------------------------------------------------------
//
// File: valattrib.cpp
//
// Synopsis: Implementation of CValAttributes class methods
// The class is responsible for taking the attributes
// in a RADIUS packet and validating their type and
// value
//
// History: 11/22/97 MKarki Created
//
// Copyright (C) Microsoft Corporation
// All rights reserved.
//
//----------------------------------------------------------------
#include "radcommon.h"
#include "valattrib.h"
//+++-------------------------------------------------------------
//
// Function: CValAttributes
//
// Synopsis: This is the constructor of the CValAttributes
// class
//
// Arguments: NONE
//
// Returns: NONE
//
// History: MKarki Created 11/22/97
//
//----------------------------------------------------------------
CValAttributes::CValAttributes( VOID ) :m_pCDictionary (NULL) { } // end of CValAttributes constructor
//+++-------------------------------------------------------------
//
// Function: ~CValAttributes
//
// Synopsis: This is the destructor of the CValAttributes
// class
//
// Arguments: NONE
//
// Returns: NONE
//
// History: MKarki Created 11/22/97
//
//----------------------------------------------------------------
CValAttributes::~CValAttributes( VOID ) { } // end of CValAttributes destructor
//+++-------------------------------------------------------------
//
// Function: Init
//
// Synopsis: This is the CValAttributes public method used
// to intialize the class object
//
// Arguments:
// [in] CDictionary*
//
// Returns: BOOL - status
//
// History: MKarki Created 11/22/97
//
//----------------------------------------------------------------
BOOL CValAttributes::Init( CDictionary *pCDictionary, CReportEvent *pCReportEvent ) { BOOL bRetVal = FALSE;
_ASSERT (pCDictionary && pCReportEvent);
m_pCDictionary = pCDictionary;
m_pCReportEvent = pCReportEvent;
return (TRUE);
} // end of CValAttributes::Init method
//+++-------------------------------------------------------------
//
// Function: Validate
//
// Synopsis: This is the CValAttributes public method used
// to validate the packet attributes
//
// Arguments:
// [in] CPacketRadius*
//
// Returns: HRESULT - status
//
// History: MKarki Created 11/22/97
//
//----------------------------------------------------------------
HRESULT CValAttributes::Validate ( CPacketRadius *pCPacketRadius ) { // We only care about Access-Requests.
if (pCPacketRadius->GetInCode() == ACCESS_REQUEST) { // We're looking for the Signature and EAP-Message attributes.
BOOL hasSignature = FALSE, hasEapMessage = FALSE;
// Loop through the attributes.
PATTRIBUTEPOSITION p, end; p = pCPacketRadius->GetInAttributes(); end = p + pCPacketRadius->GetInRadiusAttributeCount(); for ( ; p != end; ++p) { if (p->pAttribute->dwId == RADIUS_ATTRIBUTE_SIGNATURE) { hasSignature = TRUE; } else if (p->pAttribute->dwId == RADIUS_ATTRIBUTE_EAP_MESSAGE) { hasEapMessage = TRUE; } }
// If EAP-Message is present, then Signature must be as well.
if (hasEapMessage && !hasSignature) { IASTraceString("Message Authenticator must accompany EAP-Message.");
// Generate audit event.
PCWSTR strings[] = { pCPacketRadius->GetClientName() }; IASReportEvent( RADIUS_E_NO_SIGNATURE_WITH_EAP_MESSAGE, 1, 0, strings, NULL );
m_pCReportEvent->Process ( RADIUS_MALFORMED_PACKET, pCPacketRadius->GetInCode(), pCPacketRadius->GetInLength(), pCPacketRadius->GetInAddress(), NULL, pCPacketRadius->GetInPacket() );
return RADIUS_E_ERRORS_OCCURRED; } }
return S_OK; }
|