|
|
/*///////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // FILE // // authif.h // // SYNOPSIS // // Declares the interface for extensions to the Internet Authentication // Service. // // MODIFICATION HISTORY // // 09/28/1998 Original version. // /////////////////////////////////////////////////////////////////////////////*/
#ifndef _AUTHIF_H_ #define _AUTHIF_H_ #if _MSC_VER >= 1000 #pragma once #endif
/* * Enumerates the attribute types that are passed to the extension DLL. The * RADIUS standard attributes are included for convenience and should not be * considered exhaustive. */ typedef enum _RADIUS_ATTRIBUTE_TYPE {
/* Used to terminate attribute arrays. */ ratMinimum = 0,
/* RADIUS standard attributes. */ ratUserName = 1, ratUserPassword = 2, ratCHAPPassword = 3, ratNASIPAddress = 4, ratNASPort = 5, ratServiceType = 6, ratFramedProtocol = 7, ratFramedIPAddress = 8, ratFramedIPNetmask = 9, ratFramedRouting = 10, ratFilterId = 11, ratFramedMTU = 12, ratFramedCompression = 13, ratLoginIPHost = 14, ratLoginService = 15, ratLoginPort = 16, ratReplyMessage = 18, ratCallbackNumber = 19, ratCallbackId = 20, ratFramedRoute = 22, ratFramedIPXNetwork = 23, ratState = 24, ratClass = 25, ratVendorSpecific = 26, ratSessionTimeout = 27, ratIdleTimeout = 28, ratTerminationAction = 29, ratCalledStationId = 30, ratCallingStationId = 31, ratNASIdentifier = 32, ratProxyState = 33, ratLoginLATService = 34, ratLoginLATNode = 35, ratLoginLATGroup = 36, ratFramedAppleTalkLink = 37, ratFramedAppleTalkNetwork = 38, ratFramedAppleTalkZone = 39, ratAcctStatusType = 40, ratAcctDelayTime = 41, ratAcctInputOctets = 42, ratAcctOutputOctets = 43, ratAcctSessionId = 44, ratAcctAuthentic = 45, ratAcctSessionTime = 46, ratAcctInputPackets = 47, ratAcctOutputPackets = 48, ratAcctTerminationCause = 49, ratCHAPChallenge = 60, ratNASPortType = 61, ratPortLimit = 62,
/* Extended attribute types used to pass additional information. */ ratCode = 262, /* Request type code. */ ratIdentifier = 263, /* Request identifier. */ ratAuthenticator = 264, /* Request authenticator. */ ratSrcIPAddress = 265, /* Source IP address. */ ratSrcPort = 266, /* Source IP port. */ ratProvider = 267, /* Authentication provider. */ ratStrippedUserName = 268, /* User-Name with realm stripped. */ ratFQUserName = 269, /* Fully-Qualified-User-Name. */ ratPolicyName = 270 /* Remote Access Policy name. */ } RADIUS_ATTRIBUTE_TYPE;
/* * Enumerates the different authentication providers used for processing a * request. Used for the ratProvider extended attribute. */ typedef enum _RADIUS_AUTHENTICATION_PROVIDER { rapUnknown, rapUsersFile, rapProxy, rapWindowsNT, rapMCIS, rapODBC, rapNone } RADIUS_AUTHENTICATION_PROVIDER;
/* * Enumerates the different RADIUS data types. A type of 'rdtUnknown' means * the attribute was not recognized by the dictionary. */ typedef enum _RADIUS_DATA_TYPE { rdtUnknown, rdtString, rdtAddress, rdtInteger, rdtTime } RADIUS_DATA_TYPE;
/* * Struct representing a RADIUS or extended attribute. */ typedef struct _RADIUS_ATTRIBUTE { DWORD dwAttrType; /* Attribute type */ RADIUS_DATA_TYPE fDataType; /* RADIUS_DATA_TYPE of the value */ DWORD cbDataLength; /* Length of the value (in bytes) */ union { DWORD dwValue; /* For rdtAddress, rdtInteger, and rdtTime */ PCSTR lpValue; /* For rdtUnknown, and rdtString */ }; } RADIUS_ATTRIBUTE, *PRADIUS_ATTRIBUTE;
/* * Enumerates the different actions an extension DLL can generate in * response to an Access-Request. */ typedef enum _RADIUS_ACTION { raContinue, raReject, raAccept } RADIUS_ACTION, *PRADIUS_ACTION;
/* * Routines exported by a RADIUS extension DLL. */
/* * RadiusExtensionInit is optional. If it exists, it will be invoked prior to * the service coming on-line. A return value other than NO_ERROR prevents the * service from initializing. */ #define RADIUS_EXTENSION_INIT "RadiusExtensionInit" typedef DWORD (WINAPI *PRADIUS_EXTENSION_INIT)( VOID );
/* * RadiusExtensionTerm is optional. If it exists, it will be invoked prior to * unloading the DLL to give the extension a chance to clean-up. */ #define RADIUS_EXTENSION_TERM "RadiusExtensionTerm" typedef VOID (WINAPI *PRADIUS_EXTENSION_TERM)( VOID );
/* * RadiusExtensionProcess is mandatory for NT4. For Windows 2000, an * extension may export RadiusExtensionProcessEx (q.v.) instead. * * Parameters: * pAttrs Array of attributes from the request. It is terminated by an * attribute with dwAttrType set to ratMinimum. These attributes * should be treated as read-only and must not be referenced * after the function returns. * pfAction For Access-Requests, this parameter will be non-NULL with * *pfAction == raContinue. The extension DLL can set *pfAction * to abort further processing and force an Access-Accept or * Access-Reject. For all other request types, this parameter * will be NULL. * * Return Value: * A return value other than NO_ERROR causes the request to be discarded. */ #define RADIUS_EXTENSION_PROCESS "RadiusExtensionProcess" typedef DWORD (WINAPI *PRADIUS_EXTENSION_PROCESS)( IN CONST RADIUS_ATTRIBUTE *pAttrs, OUT OPTIONAL PRADIUS_ACTION pfAction );
/* * RadiusExtensionProcessEx is only supported on Windows 2000. If it exits, * RadiusExtensionProcess is ignored. * * Parameters: * pInAttrs Array of attributes from the request. It is terminated by an * attribute with dwAttrType set to ratMinimum. These attributes * should be treated as read-only and must not be referenced * after the function returns. * pOutAttrs Array of attributes to add to the response. It is terminated * by an attribute with dwAttrType set to ratMinimum. * *pOutAttrs may be set to NULL if no attributes are returned. * pfAction For Access-Requests, this parameter will be non-NULL with * *pfAction == raContinue. The extension DLL can set *pfAction * to abort further processing and force an Access-Accept or * Access-Reject. For all other request types, this parameter * will be NULL. * * Return Value: * A return value other than NO_ERROR causes the request to be discarded. */ #define RADIUS_EXTENSION_PROCESS_EX "RadiusExtensionProcessEx" typedef DWORD (WINAPI *PRADIUS_EXTENSION_PROCESS_EX)( IN CONST RADIUS_ATTRIBUTE *pInAttrs, OUT PRADIUS_ATTRIBUTE *pOutAttrs, OUT OPTIONAL PRADIUS_ACTION pfAction );
/* * RadiusExtensionFreeAttributes must be defined if RadiusExtensionProcessEx * is defined. It is used to free the attributes returned by * RadiusExtensionProcessEx * * Parameters: * pAttrs Array of attributes to be freed. */ #define RADIUS_EXTENSION_FREE_ATTRIBUTES "RadiusExtensionFreeAttributes" typedef VOID (WINAPI *PRADIUS_EXTENSION_FREE_ATTRIBUTES)( IN PRADIUS_ATTRIBUTE pAttrs );
/* * Defines used for installation of an extension DLL. * The following registry values are used for loading extensions: * * HKLM\System\CurrentControlSet\Services\AuthSrv\Parameters * ExtensionDLLs (REG_MULTI_SZ) <list of DLL paths> * AuthorizationDLLs (REG_MULTI_SZ) <list of DLL paths> * * ExtensionDLLs are invoked before any of the built-in authentication * providers. They receive all the attributes from the request plus all * the extended attribute types. * * AuthorizationDLLs are invoked after the built-in authentication and * authorization providers. They receive all the attributes from the * response plus all the extended attributes types. AuthorizationDLLs may * not return an action of raAccept. */
#define AUTHSRV_PARAMETERS_KEY_W \ L"System\\CurrentControlSet\\Services\\AuthSrv\\Parameters"
#define AUTHSRV_EXTENSIONS_VALUE_W \ L"ExtensionDLLs"
#define AUTHSRV_AUTHORIZATION_VALUE_W \ L"AuthorizationDLLs"
#endif /* _AUTHIF_H_ */
|