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.
100 lines
2.2 KiB
100 lines
2.2 KiB
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1998, Microsoft Corp. All rights reserved.
|
|
//
|
|
// FILE
|
|
//
|
|
// AuthBase.cpp
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// This file defines the class AuthBase.
|
|
//
|
|
// MODIFICATION HISTORY
|
|
//
|
|
// 02/12/1998 Original version.
|
|
// 03/27/1998 Prevent attribute leak when component fails to initialize.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <ias.h>
|
|
#include <iasutil.h>
|
|
#include <sdoias.h>
|
|
|
|
#include <authbase.h>
|
|
|
|
HRESULT AuthBase::initialize() throw ()
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
void AuthBase::finalize() throw ()
|
|
{
|
|
}
|
|
|
|
void AuthBase::onAccept(IASRequest& request, HANDLE token)
|
|
{
|
|
DWORD returnLength;
|
|
|
|
//////////
|
|
// Determine the needed buffer size.
|
|
//////////
|
|
|
|
BOOL success = GetTokenInformation(
|
|
token,
|
|
TokenGroups,
|
|
NULL,
|
|
0,
|
|
&returnLength
|
|
);
|
|
|
|
DWORD status = GetLastError();
|
|
|
|
// Should have failed with ERROR_INSUFFICIENT_BUFFER.
|
|
if (success || status != ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
IASTraceFailure("GetTokenInformation", status);
|
|
_w32_issue_error(status);
|
|
}
|
|
|
|
//////////
|
|
// Allocate an attribute.
|
|
//////////
|
|
|
|
IASAttribute groups(true);
|
|
|
|
//////////
|
|
// Allocate a buffer to hold the TOKEN_GROUPS array.
|
|
//////////
|
|
|
|
groups->Value.OctetString.lpValue = (PBYTE)CoTaskMemAlloc(returnLength);
|
|
if (!groups->Value.OctetString.lpValue)
|
|
{
|
|
_com_issue_error(E_OUTOFMEMORY);
|
|
}
|
|
|
|
//////////
|
|
// Get the Token Groups info.
|
|
//////////
|
|
|
|
GetTokenInformation(
|
|
token,
|
|
TokenGroups,
|
|
groups->Value.OctetString.lpValue,
|
|
returnLength,
|
|
&groups->Value.OctetString.dwLength
|
|
);
|
|
|
|
//////////
|
|
// Set the id and type of the initialized attribute.
|
|
//////////
|
|
|
|
groups->dwId = IAS_ATTRIBUTE_TOKEN_GROUPS;
|
|
groups->Value.itType = IASTYPE_OCTET_STRING;
|
|
|
|
//////////
|
|
// Inject the Token-Groups into the request.
|
|
//////////
|
|
|
|
groups.store(request);
|
|
}
|