/********************************************************************/ /** Copyright(c) 1985-1997 Microsoft Corporation. **/ /********************************************************************/ //*** // // Filename: raseap.h // // Description: Header for EAP module // // History: May 11,1997 NarenG Created original version. // #ifndef _RASEAP_H_ #define _RASEAP_H_ //General macros #define GEN_RAND_ENCODE_SEED ((CHAR) ( 1 + rand() % 250 )) // // Tracing and event logging for EAP // #define EapLogError( LogId, NumStrings, lpwsSubStringArray, dwRetCode ) \ RouterLogError( g_hLogEvents, LogId, NumStrings, lpwsSubStringArray, \ dwRetCode ) #define EapLogWarning( LogId, NumStrings, lpwsSubStringArray ) \ RouterLogWarning( g_hLogEvents, LogId, NumStrings, lpwsSubStringArray, 0 ) #define EapLogInformation( LogId, NumStrings, lpwsSubStringArray ) \ RouterLogInformation(g_hLogEvents,LogId, NumStrings, lpwsSubStringArray,0) #define EapLogErrorString(LogId,NumStrings,lpwsSubStringArray,dwRetCode, \ dwPos ) \ RouterLogErrorString( g_hLogEvents, LogId, NumStrings, \ lpwsSubStringArray, dwRetCode, dwPos ) #define EapLogWarningString( LogId,NumStrings,lpwsSubStringArray,dwRetCode, \ dwPos ) \ RouterLogWarningString( g_hLogEvents, LogId, NumStrings, \ lpwsSubStringArray, dwRetCode, dwPos ) #define EapLogInformationString( LogId, NumStrings, lpwsSubStringArray, \ dwRetCode, dwPos ) \ RouterLogInformationString( g_hLogEvents, LogId, \ NumStrings, lpwsSubStringArray, dwRetCode,dwPos) #define TRACE_RASEAP (0x00010000|TRACE_USE_MASK|TRACE_USE_MSEC|TRACE_USE_DATE) #define EAP_TRACE(a) TracePrintfExA(g_dwTraceIdEap,TRACE_RASEAP,a ) #define EAP_TRACE1(a,b) TracePrintfExA(g_dwTraceIdEap,TRACE_RASEAP,a,b ) #define EAP_TRACE2(a,b,c) TracePrintfExA(g_dwTraceIdEap,TRACE_RASEAP,a,b,c ) #define EAP_TRACE3(a,b,c,d) TracePrintfExA(g_dwTraceIdEap,TRACE_RASEAP,a,b,c,d ) #define EAP_DUMPW(X,Y) TraceDumpEx(g_dwTraceIdEap,1,(LPBYTE)X,Y,4,1,NULL) #define EAP_DUMPB(X,Y) TraceDumpEx(g_dwTraceIdEap,1,(LPBYTE)X,Y,1,1,NULL) // // Defines states within the EAP protocol. // typedef enum _EAPSTATE { EAPSTATE_Initial, EAPSTATE_IdentityRequestSent, EAPSTATE_Working, EAPSTATE_EapPacketSentToAuthServer, EAPSTATE_EapPacketSentToClient, EAPSTATE_NotificationSentToClient }EAPSTATE; typedef enum _EAPTYPE { EAPTYPE_Identity = 1, EAPTYPE_Notification, EAPTYPE_Nak, EAPTYPE_MD5Challenge, EAPTYPE_SKey, EAPTYPE_GenericTokenCard }EAPTYPE; typedef struct _EAPCB { EAPSTATE EapState; HPORT hPort; BOOL fAuthenticator; BOOL fRouter; LPVOID pWorkBuffer; DWORD dwEapIndex; DWORD dwEapTypeToBeUsed; CHAR szIdentity[DNLEN+UNLEN+2]; DWORD dwIdExpected; HANDLE hTokenImpersonateUser; PRAS_CUSTOM_AUTH_DATA pCustomAuthConnData; PRAS_CUSTOM_AUTH_DATA pCustomAuthUserData; PPP_EAP_UI_DATA EapUIData; BOOL fLogon; BOOL fNonInteractive; BOOL fPortWillBeBundled; BOOL fThisIsACallback; CHAR szPassword[ PWLEN + 1 ]; DWORD dwUIInvocationId; RAS_AUTH_ATTRIBUTE * pUserAttributes; RAS_AUTH_ATTRIBUTE * pSavedAttributesFromAuthenticator; DWORD dwSavedAuthResultCode; PBYTE pEAPSendBuf; DWORD cbEAPSendBuf; BOOL fSentPacketToRadiusServer; BOOL fSendWithTimeoutInteractive; BYTE * pStateAttribute; DWORD cbStateAttribute; // CHAR chSeed; //Random seed used for encoding password DATA_BLOB DBPassword; } EAPCB, *PEAPCB; #define EAP_FLAG_RESUME_FROM_HIBERNATE 0x00000001 typedef struct _EAP_INFO { HINSTANCE hInstance; DWORD fFlags; DWORD (APIENTRY *RasEapGetCredentials)( IN DWORD dwTypeId, IN VOID * pWorkBuf, OUT VOID ** pInfo); PPP_EAP_INFO RasEapInfo; } EAP_INFO, *PEAP_INFO; // // Prototypes // DWORD EapBegin( OUT VOID** ppWorkBuf, IN VOID* pInfo ); DWORD EapEnd( IN VOID* pWorkBuf ); DWORD EapMakeMessage( IN VOID* pWorkBuf, IN PPP_CONFIG* pReceiveBuf, OUT PPP_CONFIG* pSendBuf, IN DWORD cbSendBuf, OUT PPPAP_RESULT* pResult, IN PPPAP_INPUT* pInput ); DWORD MakeRequestAttributes( IN EAPCB * pEapCb, IN PPP_CONFIG* pReceiveBuf ); DWORD MakeAuthenticateeMessage( IN EAPCB* pEapCb, IN PPP_CONFIG* pReceiveBuf, OUT PPP_CONFIG* pSendBuf, IN DWORD cbSendBuf, OUT PPPAP_RESULT* pResult, IN PPPAP_INPUT* pInput ); DWORD MakeAuthenticatorMessage( IN EAPCB* pEapCb, IN PPP_CONFIG* pReceiveBuf, OUT PPP_CONFIG* pSendBuf, IN DWORD cbSendBuf, OUT PPPAP_RESULT* pResult, IN PPPAP_INPUT* pInput ); DWORD EapDllBegin( IN EAPCB * pEapCb, IN DWORD dwEapIndex ); BOOL InRadiusMode( VOID ); DWORD EapDllWork( IN EAPCB * pEapCb, IN PPP_CONFIG* pReceiveBuf, OUT PPP_CONFIG* pSendBuf, IN DWORD cbSendBuf, OUT PPPAP_RESULT* pResult, IN PPPAP_INPUT* pInput ); DWORD EapDllEnd( EAPCB * pEapCb ); DWORD GetEapTypeIndex( IN DWORD dwEapType ); DWORD ChapWrapperBegin( OUT VOID ** ppWorkBuffer, IN PPP_EAP_INPUT * pPppEapInput ); DWORD ChapWrapperEnd( IN VOID* pWorkBuf ); DWORD ChapWrapperMakeMessage( IN VOID* pWorkBuf, IN PPP_EAP_PACKET* pReceivePacket, OUT PPP_EAP_PACKET* pSendPacket, IN DWORD cbSendPacket, OUT PPP_EAP_OUTPUT* pEapOutput, IN PPP_EAP_INPUT* pEapInput ); VOID MapEapInputToApInput( IN PPP_EAP_INPUT* pPppEapInput, OUT PPPAP_INPUT * pInput ); // // Globals. // #ifdef RASEAPGLOBALS #define GLOBALS #define EXTERN #else #define EXTERN extern #endif EXTERN EAP_INFO * gblpEapTable #ifdef GLOBALS = NULL; #endif ; EXTERN DWORD gbldwNumEapProtocols #ifdef GLOBALS = 0; #endif ; EXTERN DWORD gbldwGuid #ifdef GLOBALS = 1; #endif ; /* Next packet identifier to assign. Unlike CPs, APs must handle updating ** this sequence number themselves because the engine can't make as many ** assumptions about the protocol. It is stored global to all ports and ** authentication sessions to make it less likely that an ID will be used in ** sequential authentication sessions. Not to be confused with the 'bIdSent' ** updated on a per-port basis and used for matching. */ EXTERN BYTE bNextId #ifdef GLOBALS = 0 #endif ; EXTERN DWORD g_dwTraceIdEap #ifdef GLOBALS = INVALID_TRACEID; #endif ; EXTERN HANDLE g_hLogEvents #ifdef GLOBALS = NULL; #endif ; #undef EXTERN #undef GLOBALS #endif // _RASEAP_H_