|
|
#include "stdafx.h"
#include "common.h"
#include "coauth.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__; #endif
#define new DEBUG_NEW
BOOL EqualAuthInfo( COAUTHINFO* pAuthInfo, COAUTHINFO* pAuthInfoOther) { if ( pAuthInfo && pAuthInfoOther ) { if ( (pAuthInfo->dwAuthnSvc != pAuthInfoOther->dwAuthnSvc) || (pAuthInfo->dwAuthzSvc != pAuthInfoOther->dwAuthzSvc) || (pAuthInfo->dwAuthnLevel != pAuthInfoOther->dwAuthnLevel) || (pAuthInfo->dwImpersonationLevel != pAuthInfoOther->dwImpersonationLevel) || (pAuthInfo->dwCapabilities != pAuthInfoOther->dwCapabilities) ) { return FALSE; }
// only compare pwszServerPrincName's if they're both specified
if (pAuthInfo->pwszServerPrincName && pAuthInfoOther->pwszServerPrincName) { if ( lstrcmpW(pAuthInfo->pwszServerPrincName, pAuthInfoOther->pwszServerPrincName) != 0 ) { return FALSE; } } else { // if one was NULL, both should be NULL for equality
if (pAuthInfo->pwszServerPrincName != pAuthInfoOther->pwszServerPrincName) { return FALSE; } } // we never cache authid, so one of them must be NULL
ASSERT(!(pAuthInfo->pAuthIdentityData && pAuthInfoOther->pAuthIdentityData)); if (pAuthInfo->pAuthIdentityData || pAuthInfoOther->pAuthIdentityData) { return FALSE; } } else { if ( pAuthInfo != pAuthInfoOther ) { return FALSE; } }
return TRUE; }
/*
HRESULT CopyAuthIdentity( IN COAUTHIDENTITY * pAuthIdentSrc, IN COAUTHIDENTITY ** ppAuthIdentDest ) { HRESULT hr = E_OUTOFMEMORY; ULONG ulCharLen = 1; COAUTHIDENTITY *pAuthIdentTemp = NULL;
*ppAuthIdentDest = NULL; // Guard against both being set, although presumably this would have
// caused grief before we got to this point.
if ((pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_UNICODE) && (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_ANSI)) { ASSERT(0 && "Both string type flags were set!"); hr = E_UNEXPECTED; goto Cleanup; }
if (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_UNICODE) { ulCharLen = sizeof(WCHAR); } else if (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_ANSI) { ulCharLen = sizeof(CHAR); } else { // The user didn't specify either string bit? How did we get here?
ASSERT(0 && "String type flag was not set!"); hr = E_UNEXPECTED; goto Cleanup; }
pAuthIdentTemp = (COAUTHIDENTITY*) AllocMem(sizeof(COAUTHIDENTITY)); if (!pAuthIdentTemp) goto Cleanup;
CopyMemory(pAuthIdentTemp, pAuthIdentSrc, sizeof(COAUTHIDENTITY));
// Strings need to be allocated individually and copied
pAuthIdentTemp->User = pAuthIdentTemp->Domain = pAuthIdentTemp->Password = NULL;
if (pAuthIdentSrc->User) { pAuthIdentTemp->User = (USHORT *)AllocMem((pAuthIdentTemp->UserLength+1) * ulCharLen);
if (!pAuthIdentTemp->User) goto Cleanup;
CopyMemory(pAuthIdentTemp->User, pAuthIdentSrc->User, (pAuthIdentTemp->UserLength+1) * ulCharLen); }
if (pAuthIdentSrc->Domain) { pAuthIdentTemp->Domain = (USHORT *)AllocMem((pAuthIdentTemp->DomainLength+1) * ulCharLen);
if (!pAuthIdentTemp->Domain) goto Cleanup;
CopyMemory(pAuthIdentTemp->Domain, pAuthIdentSrc->Domain, (pAuthIdentTemp->DomainLength+1) * ulCharLen); } if (pAuthIdentSrc->Password) { pAuthIdentTemp->Password = (USHORT *)AllocMem((pAuthIdentTemp->PasswordLength+1) * ulCharLen);
if (!pAuthIdentTemp->Password) goto Cleanup;
CopyMemory(pAuthIdentTemp->Password, pAuthIdentSrc->Password, (pAuthIdentTemp->PasswordLength+1) * ulCharLen); }
hr = S_OK;
Cleanup: if (SUCCEEDED(hr)) { *ppAuthIdentDest = pAuthIdentTemp; } else { if (pAuthIdentTemp) { FreeMem(pAuthIdentTemp); } }
return hr; }
HRESULT CopyAuthInfo( IN COAUTHINFO * pAuthInfoSrc, IN COAUTHINFO ** ppAuthInfoDest ) { HRESULT hr = E_OUTOFMEMORY; COAUTHINFO *pAuthInfoTemp = NULL; *ppAuthInfoDest = NULL;
if (pAuthInfoSrc == NULL) { return S_OK; }
pAuthInfoTemp = (COAUTHINFO*)AllocMem(sizeof(COAUTHINFO));
if (!pAuthInfoTemp) goto Cleanup;
CopyMemory(pAuthInfoTemp, pAuthInfoSrc, sizeof(COAUTHINFO));
// We need to allocate these fields and make a copy
pAuthInfoTemp->pwszServerPrincName = NULL; pAuthInfoTemp->pAuthIdentityData = NULL;
// only alloc space for pwszServerPrincName if its non-null
if (pAuthInfoSrc->pwszServerPrincName) { pAuthInfoTemp->pwszServerPrincName = (LPWSTR) AllocMem((lstrlenW(pAuthInfoSrc->pwszServerPrincName) + 1) * sizeof(WCHAR));
if (!pAuthInfoTemp->pwszServerPrincName) goto Cleanup; lstrcpyW(pAuthInfoTemp->pwszServerPrincName, pAuthInfoSrc->pwszServerPrincName); } // copy the AuthIdentity if its non-null
if (pAuthInfoSrc->pAuthIdentityData) { hr = CopyAuthIdentity(pAuthInfoSrc->pAuthIdentityData, &pAuthInfoTemp->pAuthIdentityData); if (FAILED(hr)) goto Cleanup; } hr = S_OK; Cleanup:
if (SUCCEEDED(hr)) { *ppAuthInfoDest = pAuthInfoTemp; } else if (pAuthInfoTemp) { FreeMem(pAuthInfoTemp); }
return hr; }
HRESULT CopyServerInfo( IN COSERVERINFO * pServerInfoSrc, IN COSERVERINFO ** ppServerInfoDest ) { HRESULT hr = E_OUTOFMEMORY; COSERVERINFO *pServerInfoTemp = NULL; *ppServerInfoDest = NULL;
if (pServerInfoSrc == NULL) { return S_OK; }
pServerInfoTemp = (COSERVERINFO*)AllocMem(sizeof(COSERVERINFO)); if (!pServerInfoTemp) goto Cleanup;
CopyMemory(pServerInfoTemp, pServerInfoSrc, sizeof(COSERVERINFO));
// We need to allocate these fields and make a copy
pServerInfoTemp->pwszName = NULL;
// only alloc space for pwszServerPrincName if its non-null
if (pServerInfoSrc->pwszName) { pServerInfoTemp->pwszName = (LPWSTR) AllocMem((lstrlenW(pServerInfoSrc->pwszName) + 1) * sizeof(WCHAR));
if (!pServerInfoTemp->pwszName) goto Cleanup; lstrcpyW(pServerInfoTemp->pwszName, pServerInfoSrc->pwszName); }
pServerInfoTemp->pAuthInfo = NULL; // copy the AuthIdentity if its non-null
if (pServerInfoSrc->pAuthInfo) { hr = CopyAuthInfo(pServerInfoSrc->pAuthInfo, &pServerInfoTemp->pAuthInfo); if (FAILED(hr)) goto Cleanup; } hr = S_OK; Cleanup:
if (SUCCEEDED(hr)) { *ppServerInfoDest = pServerInfoTemp; } else if (pServerInfoTemp) { FreeMem(pServerInfoTemp); }
return hr; }
*/
HRESULT CopyServerInfoStruct( IN COSERVERINFO * pServerInfoSrc, IN COSERVERINFO * pServerInfoDest ) { HRESULT hr = E_OUTOFMEMORY; if (pServerInfoSrc == NULL) { return S_OK; }
if (pServerInfoDest == NULL) { return E_POINTER; }
CopyMemory(pServerInfoDest, pServerInfoSrc, sizeof(COSERVERINFO));
// We need to allocate these fields and make a copy
pServerInfoDest->pwszName = NULL;
// only alloc space for pwszServerPrincName if its non-null
if (pServerInfoSrc->pwszName) { pServerInfoDest->pwszName = (LPWSTR) AllocMem((lstrlenW(pServerInfoSrc->pwszName) + 1) * sizeof(WCHAR));
if (!pServerInfoDest->pwszName) goto Cleanup; lstrcpyW(pServerInfoDest->pwszName, pServerInfoSrc->pwszName); }
pServerInfoDest->pAuthInfo = NULL; hr = S_OK; Cleanup: return hr; }
HRESULT CopyAuthInfoStruct( IN COAUTHINFO * pAuthInfoSrc, IN COAUTHINFO * pAuthInfoDest ) { HRESULT hr = E_OUTOFMEMORY;
if (pAuthInfoSrc == NULL) { return S_OK; }
if (pAuthInfoDest == NULL) { return E_POINTER; }
CopyMemory(pAuthInfoDest, pAuthInfoSrc, sizeof(COAUTHINFO));
// We need to allocate these fields and make a copy
pAuthInfoDest->pwszServerPrincName = NULL; pAuthInfoDest->pAuthIdentityData = NULL;
// only alloc space for pwszServerPrincName if its non-null
if (pAuthInfoSrc->pwszServerPrincName) { pAuthInfoDest->pwszServerPrincName = (LPWSTR) AllocMem((lstrlenW(pAuthInfoSrc->pwszServerPrincName) + 1) * sizeof(WCHAR));
if (!pAuthInfoDest->pwszServerPrincName) goto Cleanup; lstrcpyW(pAuthInfoDest->pwszServerPrincName, pAuthInfoSrc->pwszServerPrincName); } pAuthInfoDest->pAuthIdentityData = NULL; hr = S_OK; Cleanup: return hr; }
HRESULT CopyAuthIdentityStruct( IN COAUTHIDENTITY * pAuthIdentSrc, IN COAUTHIDENTITY * pAuthIdentDest ) { HRESULT hr = E_OUTOFMEMORY; ULONG ulCharLen = 1;
if (pAuthIdentSrc == NULL) { hr = E_POINTER; goto Cleanup; } if (pAuthIdentDest == NULL) { hr = E_POINTER; goto Cleanup; } // Guard against both being set, although presumably this would have
// caused grief before we got to this point.
if ((pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_UNICODE) && (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_ANSI)) { ASSERT(0 && "Both string type flags were set!"); hr = E_UNEXPECTED; goto Cleanup; }
if (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_UNICODE) { ulCharLen = sizeof(WCHAR); } else if (pAuthIdentSrc->Flags & SEC_WINNT_AUTH_IDENTITY_ANSI) { ulCharLen = sizeof(CHAR); } else { // The user didn't specify either string bit? How did we get here?
ASSERT(0 && "String type flag was not set!"); hr = E_UNEXPECTED; goto Cleanup; }
CopyMemory(pAuthIdentDest, pAuthIdentSrc, sizeof(COAUTHIDENTITY));
// Strings need to be allocated individually and copied
pAuthIdentDest->User = pAuthIdentDest->Domain = pAuthIdentDest->Password = NULL;
if (pAuthIdentSrc->User) { pAuthIdentDest->User = (USHORT *)AllocMem((pAuthIdentDest->UserLength+1) * ulCharLen);
if (!pAuthIdentDest->User) goto Cleanup;
CopyMemory(pAuthIdentDest->User, pAuthIdentSrc->User, (pAuthIdentDest->UserLength+1) * ulCharLen); }
if (pAuthIdentSrc->Domain) { pAuthIdentDest->Domain = (USHORT *)AllocMem((pAuthIdentDest->DomainLength+1) * ulCharLen);
if (!pAuthIdentDest->Domain) goto Cleanup;
CopyMemory(pAuthIdentDest->Domain, pAuthIdentSrc->Domain, (pAuthIdentDest->DomainLength+1) * ulCharLen); } if (pAuthIdentSrc->Password) { pAuthIdentDest->Password = (USHORT *)AllocMem((pAuthIdentDest->PasswordLength+1) * ulCharLen);
if (!pAuthIdentDest->Password) goto Cleanup;
CopyMemory(pAuthIdentDest->Password, pAuthIdentSrc->Password, (pAuthIdentDest->PasswordLength+1) * ulCharLen); } hr = S_OK;
Cleanup: return hr; }
|