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.
151 lines
4.5 KiB
151 lines
4.5 KiB
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) Microsoft Corp. All rights reserved.
|
|
//
|
|
// FILE
|
|
//
|
|
// ntsamauth.h
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// Declares the class NTSamAuthentication.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef NTSAMAUTH_H
|
|
#define NTSAMAUTH_H
|
|
|
|
#include <iastl.h>
|
|
|
|
namespace IASTL
|
|
{
|
|
class IASRequest;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CLASS
|
|
//
|
|
// NTSamAuthentication
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This class implements a request handler for authenticating users against
|
|
// the SAM database.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
class ATL_NO_VTABLE NTSamAuthentication
|
|
: public IASTL::IASRequestHandlerSync,
|
|
public CComCoClass<NTSamAuthentication, &__uuidof(NTSamAuthentication)>
|
|
{
|
|
public:
|
|
|
|
IAS_DECLARE_REGISTRY(NTSamAuthentication, 1, 0, IASTypeLibrary)
|
|
|
|
// IIasComponent
|
|
STDMETHOD(Initialize)();
|
|
STDMETHOD(Shutdown)();
|
|
STDMETHOD(PutProperty)(LONG Id, VARIANT* pValue);
|
|
|
|
// These functions are public so they can be used for change password.
|
|
static bool enforceLmRestriction(
|
|
IASTL::IASRequest& request
|
|
);
|
|
static void doMsChapAuthentication(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
BYTE identity,
|
|
PBYTE challenge,
|
|
PBYTE ntResponse,
|
|
PBYTE lmResponse
|
|
);
|
|
static void doMsChap2Authentication(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
BYTE identity,
|
|
IAS_OCTET_STRING& challenge,
|
|
PBYTE response,
|
|
PBYTE peerChallenge
|
|
);
|
|
|
|
private:
|
|
virtual IASREQUESTSTATUS onSyncRequest(IRequest* pRequest) throw ();
|
|
|
|
// Helper functions to store various attributes.
|
|
static void storeAuthenticationType(
|
|
IASTL::IASRequest& request,
|
|
DWORD authType
|
|
);
|
|
static void storeLogonResult(
|
|
IASTL::IASRequest& request,
|
|
DWORD status,
|
|
HANDLE token,
|
|
const LARGE_INTEGER& kickOffTime
|
|
);
|
|
static void storeTokenGroups(
|
|
IASTL::IASRequest& request,
|
|
HANDLE token
|
|
);
|
|
|
|
// Various flavors of MS-CHAPv1
|
|
static bool tryMsChap(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
PBYTE challenge
|
|
);
|
|
static bool tryMsChapCpw1(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
PBYTE challenge
|
|
);
|
|
static bool tryMsChapCpw2(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
PBYTE challenge
|
|
);
|
|
|
|
// Various flavors of MS-CHAPv2
|
|
static bool tryMsChap2(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
IAS_OCTET_STRING& challenge
|
|
);
|
|
static bool tryMsChap2Cpw(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username,
|
|
IAS_OCTET_STRING& challenge
|
|
);
|
|
|
|
// Various authentication types supported by NTLM.
|
|
static bool tryMd5Chap(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username
|
|
);
|
|
static bool tryMsChapAll(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username
|
|
);
|
|
static bool tryMsChap2All(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username
|
|
);
|
|
static bool tryPap(
|
|
IASTL::IASRequest& request,
|
|
PCWSTR domainName,
|
|
PCWSTR username
|
|
);
|
|
|
|
static bool allowLM;
|
|
};
|
|
|
|
#endif // NTSAMAUTH_H
|