Leaked source code of windows server 2003
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.
|
|
///////////////////////////////////////////////////////////////////////////////
//
// 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); }
|