summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2004-05-15 04:08:08 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2004-05-15 04:08:08 +0000
commit40ea20074a236fc123a3a6ee5fa03d20a2e5c7c0 (patch)
tree456f98841af8faaeceed8c7e9e98f563c5e73d5a
parentf47f267901f3f82eab007d0e974d5fa066142832 (diff)
downloadkrb5-40ea20074a236fc123a3a6ee5fa03d20a2e5c7c0.tar.gz
krb5-40ea20074a236fc123a3a6ee5fa03d20a2e5c7c0.tar.xz
krb5-40ea20074a236fc123a3a6ee5fa03d20a2e5c7c0.zip
2004-05-15 Jeffrey Altman <jaltman@mit.edu>
* cc_mslsa.c: Do not use the FAILED() macro to test the result of ConstructTicketRequest(). ConstructTicketRequest() returns positive errors and FAILED() only considers negative values to be a failure condition. Also, close potential memory leak of LSA allocated memory. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16338 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/ccache/ChangeLog7
-rw-r--r--src/lib/krb5/ccache/cc_mslsa.c26
2 files changed, 20 insertions, 13 deletions
diff --git a/src/lib/krb5/ccache/ChangeLog b/src/lib/krb5/ccache/ChangeLog
index aacadc5ae5..aabd2f29a6 100644
--- a/src/lib/krb5/ccache/ChangeLog
+++ b/src/lib/krb5/ccache/ChangeLog
@@ -1,3 +1,10 @@
+2004-05-15 Jeffrey Altman <jaltman@mit.edu>
+
+ * cc_mslsa.c: The FAILED() macro only considered an error
+ to be a failure if the value is negative. ConstructTicketRequest()
+ returns positive errors. Do not use FAILED() to test the result.
+ Also, fix a potential leak of LSA allocated memory.
+
2004-04-24 Ken Raeburn <raeburn@mit.edu>
* ccbase.c: Include ctype.h.
diff --git a/src/lib/krb5/ccache/cc_mslsa.c b/src/lib/krb5/ccache/cc_mslsa.c
index 9d06753590..73d6b7096d 100644
--- a/src/lib/krb5/ccache/cc_mslsa.c
+++ b/src/lib/krb5/ccache/cc_mslsa.c
@@ -491,10 +491,10 @@ IsKerberosLogon(VOID)
return Success;
}
-static NTSTATUS
+static DWORD
ConstructTicketRequest(UNICODE_STRING DomainName, PKERB_RETRIEVE_TKT_REQUEST * outRequest, ULONG * outSize)
{
- NTSTATUS Status;
+ DWORD Error;
UNICODE_STRING TargetPrefix;
USHORT TargetSize;
ULONG RequestSize;
@@ -546,12 +546,12 @@ ConstructTicketRequest(UNICODE_STRING DomainName, PKERB_RETRIEVE_TKT_REQUEST * o
pTicketRequest->TargetName.Length = 0;
pTicketRequest->TargetName.MaximumLength = TargetSize;
pTicketRequest->TargetName.Buffer = (PWSTR) (pTicketRequest + 1);
- Status = ConcatenateUnicodeStrings(&(pTicketRequest->TargetName),
+ Error = ConcatenateUnicodeStrings(&(pTicketRequest->TargetName),
TargetPrefix,
DomainName);
*outRequest = pTicketRequest;
*outSize = RequestSize;
- return Status;
+ return Error;
}
static BOOL
@@ -604,6 +604,7 @@ GetMSTGT(HANDLE LogonHandle, ULONG PackageId,KERB_EXTERNAL_TICKET **ticket)
BOOL bIsLsaError = FALSE;
NTSTATUS Status = 0;
NTSTATUS SubStatus = 0;
+ DWORD Error;
KERB_QUERY_TKT_CACHE_REQUEST CacheRequest;
PKERB_RETRIEVE_TKT_REQUEST pTicketRequest;
@@ -662,16 +663,16 @@ GetMSTGT(HANDLE LogonHandle, ULONG PackageId,KERB_EXTERNAL_TICKET **ticket)
// the required fields are not supported on Windows 2000. :(
if ( supported && GetSecurityLogonSessionData(&pSessionData) ) {
if ( pSessionData->DnsDomainName.Buffer ) {
- Status = ConstructTicketRequest(pSessionData->DnsDomainName,
+ Error = ConstructTicketRequest(pSessionData->DnsDomainName,
&pTicketRequest, &RequestSize);
- if ( FAILED(Status) ) {
+ LsaFreeReturnBuffer(pSessionData);
+ if ( Error )
goto cleanup;
- }
} else {
+ LsaFreeReturnBuffer(pSessionData);
bIsLsaError = TRUE;
goto cleanup;
}
- LsaFreeReturnBuffer(pSessionData);
} else {
CHAR UserDnsDomain[256];
WCHAR UnicodeUserDnsDomain[256];
@@ -691,11 +692,10 @@ GetMSTGT(HANDLE LogonHandle, ULONG PackageId,KERB_EXTERNAL_TICKET **ticket)
wrapper.Length = wcslen(UnicodeUserDnsDomain) * sizeof(WCHAR);
wrapper.MaximumLength = 256;
- Status = ConstructTicketRequest(wrapper,
+ Error = ConstructTicketRequest(wrapper,
&pTicketRequest, &RequestSize);
- if ( FAILED(Status) ) {
+ if ( Error )
goto cleanup;
- }
}
} else {
#ifdef PURGE_ALL
@@ -744,9 +744,9 @@ GetMSTGT(HANDLE LogonHandle, ULONG PackageId,KERB_EXTERNAL_TICKET **ticket)
}
#endif /* PURGE_ALL */
- Status = ConstructTicketRequest(pTicketResponse->Ticket.TargetDomainName,
+ Error = ConstructTicketRequest(pTicketResponse->Ticket.TargetDomainName,
&pTicketRequest, &RequestSize);
- if ( FAILED(Status) ) {
+ if ( Error ) {
goto cleanup;
}