|
|
/*/////////////////////////////////////////////////////////////////////////////
//
// 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_ */
|