Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/secur32/lsa.c | 56 ++++----- dlls/secur32/negotiate.c | 41 ++++--- dlls/secur32/schannel.c | 64 +++++----- dlls/secur32/secur32.c | 148 ++++++++--------------- dlls/secur32/secur32_priv.h | 8 +- dlls/secur32/thunks.c | 235 ++++++++++++++++-------------------- dlls/secur32/wrapper.c | 40 +++--- 7 files changed, 255 insertions(+), 337 deletions(-)
diff --git a/dlls/secur32/lsa.c b/dlls/secur32/lsa.c index 6e586eb03c2..74eba65e10c 100644 --- a/dlls/secur32/lsa.c +++ b/dlls/secur32/lsa.c @@ -21,6 +21,7 @@ */
#include <stdarg.h> +#include <stdlib.h>
#include "ntstatus.h" #define WIN32_NO_STATUS @@ -32,9 +33,9 @@ #include "ntsecpkg.h" #include "winternl.h" #include "rpc.h" -#include "secur32_priv.h"
#include "wine/debug.h" +#include "secur32_priv.h"
WINE_DEFAULT_DEBUG_CHANNEL(secur32);
@@ -91,7 +92,7 @@ NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE lsa_handle, ULONG package_id static struct lsa_connection *alloc_lsa_connection(void) { struct lsa_connection *ret; - if (!(ret = heap_alloc(sizeof(*ret)))) return NULL; + if (!(ret = malloc(sizeof(*ret)))) return NULL; ret->magic = LSA_MAGIC; return ret; } @@ -127,7 +128,7 @@ NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE LsaHandle)
if (!lsa_conn || lsa_conn->magic != LSA_MAGIC) return STATUS_INVALID_HANDLE; lsa_conn->magic = 0; - heap_free(lsa_conn); + free(lsa_conn);
return STATUS_SUCCESS; } @@ -145,7 +146,7 @@ NTSTATUS WINAPI LsaEnumerateLogonSessions(PULONG LogonSessionCount, NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID buffer) { TRACE("%p\n", buffer); - heap_free(buffer); + free(buffer); return STATUS_SUCCESS; }
@@ -209,26 +210,26 @@ static NTSTATUS NTAPI lsa_DeleteCredential(LUID *logon_id, ULONG package_id, LSA static void * NTAPI lsa_AllocateLsaHeap(ULONG size) { TRACE("%u\n", size); - return heap_alloc(size); + return malloc(size); }
static void NTAPI lsa_FreeLsaHeap(void *p) { TRACE("%p\n", p); - heap_free(p); + free(p); }
static NTSTATUS NTAPI lsa_AllocateClientBuffer(PLSA_CLIENT_REQUEST req, ULONG size, void **p) { TRACE("%p,%u,%p\n", req, size, p); - *p = heap_alloc(size); + *p = malloc(size); return *p ? STATUS_SUCCESS : STATUS_NO_MEMORY; }
static NTSTATUS NTAPI lsa_FreeClientBuffer(PLSA_CLIENT_REQUEST req, void *p) { TRACE("%p,%p\n", req, p); - heap_free(p); + free(p); return STATUS_SUCCESS; }
@@ -351,13 +352,13 @@ static SECURITY_STATUS WINAPI lsa_AcquireCredentialsHandleA( if (principal) { int len = MultiByteToWideChar( CP_ACP, 0, principal, -1, NULL, 0 ); - if (!(principalW = heap_alloc( len * sizeof(SEC_WCHAR) ))) goto done; + if (!(principalW = malloc( len * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, principal, -1, principalW, len ); } if (package) { int len = MultiByteToWideChar( CP_ACP, 0, package, -1, NULL, 0 ); - if (!(packageW = heap_alloc( len * sizeof(SEC_WCHAR) ))) goto done; + if (!(packageW = malloc( len * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, package, -1, packageW, len ); } if (auth_data) @@ -366,23 +367,23 @@ static SECURITY_STATUS WINAPI lsa_AcquireCredentialsHandleA(
if (id->Flags == SEC_WINNT_AUTH_IDENTITY_ANSI) { - if (!(auth_dataW = heap_alloc( sizeof(SEC_WINNT_AUTH_IDENTITY_W) ))) goto done; + if (!(auth_dataW = malloc( sizeof(SEC_WINNT_AUTH_IDENTITY_W) ))) goto done; if (id->UserLength) { len_user = MultiByteToWideChar( CP_ACP, 0, (char *)id->User, id->UserLength, NULL, 0 ); - if (!(user = heap_alloc( len_user * sizeof(SEC_WCHAR) ))) goto done; + if (!(user = malloc( len_user * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (char *)id->User, id->UserLength, user, len_user ); } if (id->DomainLength) { len_domain = MultiByteToWideChar( CP_ACP, 0, (char *)id->Domain, id->DomainLength, NULL, 0 ); - if (!(domain = heap_alloc( len_domain * sizeof(SEC_WCHAR) ))) goto done; + if (!(domain = malloc( len_domain * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (char *)id->Domain, id->DomainLength, domain, len_domain ); } if (id->PasswordLength) { len_passwd = MultiByteToWideChar( CP_ACP, 0, (char *)id->Password, id->PasswordLength, NULL, 0 ); - if (!(passwd = heap_alloc( len_passwd * sizeof(SEC_WCHAR) ))) goto done; + if (!(passwd = malloc( len_passwd * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (char *)id->Password, id->PasswordLength, passwd, len_passwd ); } auth_dataW->Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; @@ -399,12 +400,12 @@ static SECURITY_STATUS WINAPI lsa_AcquireCredentialsHandleA( status = lsa_AcquireCredentialsHandleW( principalW, packageW, credentials_use, logon_id, auth_dataW, get_key_fn, get_key_arg, credential, ts_expiry ); done: - if (auth_dataW != (SEC_WINNT_AUTH_IDENTITY_W *)id) heap_free( auth_dataW ); - heap_free( packageW ); - heap_free( principalW ); - heap_free( user ); - heap_free( domain ); - heap_free( passwd ); + if (auth_dataW != (SEC_WINNT_AUTH_IDENTITY_W *)id) free( auth_dataW ); + free( packageW ); + free( principalW ); + free( user ); + free( domain ); + free( passwd ); return status; }
@@ -487,13 +488,13 @@ static SECURITY_STATUS WINAPI lsa_InitializeSecurityContextA( if (target_name) { int len = MultiByteToWideChar( CP_ACP, 0, target_name, -1, NULL, 0 ); - if (!(targetW = heap_alloc( len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(targetW = malloc( len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; MultiByteToWideChar( CP_ACP, 0, target_name, -1, targetW, len ); }
status = lsa_InitializeSecurityContextW( credential, context, targetW, context_req, reserved1, target_data_rep, input, reserved2, new_context, output, context_attr, ts_expiry ); - heap_free( targetW ); + free( targetW ); return status; }
@@ -583,7 +584,8 @@ static SecPkgInfoA *package_infoWtoA( const SecPkgInfoW *info ) int size_name = WideCharToMultiByte( CP_ACP, 0, info->Name, -1, NULL, 0, NULL, NULL ); int size_comment = WideCharToMultiByte( CP_ACP, 0, info->Comment, -1, NULL, 0, NULL, NULL );
- if (!(ret = heap_alloc( sizeof(*ret) + size_name + size_comment ))) return NULL; + /* freed with FreeContextBuffer */ + if (!(ret = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*ret) + size_name + size_comment ))) return NULL; ret->fCapabilities = info->fCapabilities; ret->wVersion = info->wVersion; ret->wRPCID = info->wRPCID; @@ -801,9 +803,9 @@ static void add_package(struct lsa_package *package) struct lsa_package *new_loaded_packages;
if (!loaded_packages) - new_loaded_packages = heap_alloc(sizeof(*new_loaded_packages)); + new_loaded_packages = malloc(sizeof(*new_loaded_packages)); else - new_loaded_packages = heap_realloc(loaded_packages, sizeof(*new_loaded_packages) * (loaded_packages_count + 1)); + new_loaded_packages = realloc(loaded_packages, sizeof(*new_loaded_packages) * (loaded_packages_count + 1));
if (new_loaded_packages) { @@ -904,7 +906,7 @@ void load_auth_packages(void) { SecPkgInfoW *info;
- info = heap_alloc(loaded_packages[i].lsa_table_count * sizeof(*info)); + info = malloc(loaded_packages[i].lsa_table_count * sizeof(*info)); if (info) { NTSTATUS status; @@ -913,7 +915,7 @@ void load_auth_packages(void) if (status == STATUS_SUCCESS) SECUR32_addPackages(provider, loaded_packages[i].lsa_table_count, NULL, info);
- heap_free(info); + free(info); } } } diff --git a/dlls/secur32/negotiate.c b/dlls/secur32/negotiate.c index 6d45d0c5d54..498ef9ec35a 100644 --- a/dlls/secur32/negotiate.c +++ b/dlls/secur32/negotiate.c @@ -18,6 +18,7 @@ */
#include <stdarg.h> +#include <stdlib.h> #include "windef.h" #include "winbase.h" #include "sspi.h" @@ -78,7 +79,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleW( pLogonID, pAuthData, pGetKeyFn, pGetKeyArgument, phCredential, ptsExpiry);
if (!pszPackage) return SEC_E_SECPKG_NOT_FOUND; - if (!(cred = heap_alloc_zero( sizeof(*cred) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(cred = calloc( 1, sizeof(*cred) ))) return SEC_E_INSUFFICIENT_MEMORY;
if ((package = SECUR32_findPackageW( kerberosW ))) { @@ -103,7 +104,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleW( return SEC_E_OK; }
- heap_free( cred ); + free( cred ); return ret; }
@@ -126,7 +127,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleA( if (pszPackage) { int package_len = MultiByteToWideChar( CP_ACP, 0, pszPackage, -1, NULL, 0 ); - if (!(package = heap_alloc( package_len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(package = malloc( package_len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; MultiByteToWideChar( CP_ACP, 0, pszPackage, -1, package, package_len ); } if (pAuthData) @@ -136,14 +137,14 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleA(
if (identity->Flags == SEC_WINNT_AUTH_IDENTITY_ANSI) { - if (!(identityW = heap_alloc( sizeof(*identityW) ))) goto done; + if (!(identityW = malloc( sizeof(*identityW) ))) goto done;
if (!identity->UserLength) user_len = 0; else { user_len = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->User, identity->UserLength, NULL, 0 ); - if (!(user = heap_alloc( user_len * sizeof(SEC_WCHAR) ))) goto done; + if (!(user = malloc( user_len * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->User, identity->UserLength, user, user_len ); } @@ -152,7 +153,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleA( { domain_len = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->Domain, identity->DomainLength, NULL, 0 ); - if (!(domain = heap_alloc( domain_len * sizeof(SEC_WCHAR) ))) goto done; + if (!(domain = malloc( domain_len * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->Domain, identity->DomainLength, domain, domain_len ); } @@ -161,7 +162,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleA( { passwd_len = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->Password, identity->PasswordLength, NULL, 0 ); - if (!(passwd = heap_alloc( passwd_len * sizeof(SEC_WCHAR) ))) goto done; + if (!(passwd = malloc( passwd_len * sizeof(SEC_WCHAR) ))) goto done; MultiByteToWideChar( CP_ACP, 0, (LPCSTR)identity->Password, identity->PasswordLength, passwd, passwd_len ); } @@ -178,11 +179,11 @@ static SECURITY_STATUS SEC_ENTRY nego_AcquireCredentialsHandleA( ret = nego_AcquireCredentialsHandleW( NULL, package, fCredentialUse, pLogonID, identityW, pGetKeyFn, pGetKeyArgument, phCredential, ptsExpiry ); done: - heap_free( package ); - heap_free( user ); - heap_free( domain ); - heap_free( passwd ); - heap_free( identityW ); + free( package ); + free( user ); + free( domain ); + free( passwd ); + free( identityW ); return ret; }
@@ -210,7 +211,7 @@ static SECURITY_STATUS SEC_ENTRY nego_InitializeSecurityContextW( else if (phCredential) { handle = cred = (struct sec_handle *)phCredential->dwLower; - if (!(new_ctxt = ctxt = heap_alloc_zero( sizeof(*ctxt) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(new_ctxt = ctxt = calloc( 1, sizeof(*ctxt) ))) return SEC_E_INSUFFICIENT_MEMORY; ctxt->krb = cred->krb; ctxt->ntlm = cred->ntlm; } @@ -244,7 +245,7 @@ static SECURITY_STATUS SEC_ENTRY nego_InitializeSecurityContextW( } }
- heap_free( new_ctxt ); + free( new_ctxt ); return ret; }
@@ -268,13 +269,13 @@ static SECURITY_STATUS SEC_ENTRY nego_InitializeSecurityContextA( if (pszTargetName) { int target_len = MultiByteToWideChar( CP_ACP, 0, pszTargetName, -1, NULL, 0 ); - if (!(target = heap_alloc( target_len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(target = malloc( target_len * sizeof(SEC_WCHAR) ))) return SEC_E_INSUFFICIENT_MEMORY; MultiByteToWideChar( CP_ACP, 0, pszTargetName, -1, target, target_len ); } ret = nego_InitializeSecurityContextW( phCredential, phContext, target, fContextReq, Reserved1, TargetDataRep, pInput, Reserved2, phNewContext, pOutput, pfContextAttr, ptsExpiry ); - heap_free( target ); + free( target ); return ret; }
@@ -300,7 +301,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcceptSecurityContext( else if (phCredential) { handle = cred = (struct sec_handle *)phCredential->dwLower; - if (!(new_ctxt = ctxt = heap_alloc_zero( sizeof(*ctxt) ))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(new_ctxt = ctxt = calloc( 1, sizeof(*ctxt) ))) return SEC_E_INSUFFICIENT_MEMORY; ctxt->krb = cred->krb; ctxt->ntlm = cred->ntlm; } @@ -334,7 +335,7 @@ static SECURITY_STATUS SEC_ENTRY nego_AcceptSecurityContext( } }
- heap_free( new_ctxt ); + free( new_ctxt ); return ret; }
@@ -374,7 +375,7 @@ static SECURITY_STATUS SEC_ENTRY nego_DeleteSecurityContext(PCtxtHandle phContex ret = ctxt->ntlm->fnTableW.DeleteSecurityContext( &ctxt->handle_ntlm ); } TRACE( "freeing %p\n", ctxt ); - heap_free( ctxt ); + free( ctxt ); return ret; }
@@ -533,7 +534,7 @@ static SECURITY_STATUS SEC_ENTRY nego_FreeCredentialsHandle(PCredHandle phCreden if (cred->krb) cred->krb->fnTableW.FreeCredentialsHandle( &cred->handle_krb ); if (cred->ntlm) cred->ntlm->fnTableW.FreeCredentialsHandle( &cred->handle_ntlm );
- heap_free( cred ); + free( cred ); return SEC_E_OK; }
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c index 9d092f109fe..50a1c848c0e 100644 --- a/dlls/secur32/schannel.c +++ b/dlls/secur32/schannel.c @@ -20,6 +20,7 @@
#include <assert.h> #include <stdarg.h> +#include <stdlib.h> #include <errno.h>
#define NONAMELESSUNION @@ -98,7 +99,7 @@ static ULONG_PTR schan_alloc_handle(void *object, enum schan_handle_type type) { /* Grow the table */ SIZE_T new_size = schan_handle_table_size + (schan_handle_table_size >> 1); - struct schan_handle *new_table = heap_realloc(schan_handle_table, new_size * sizeof(*schan_handle_table)); + struct schan_handle *new_table = realloc(schan_handle_table, new_size * sizeof(*schan_handle_table)); if (!new_table) { ERR("Failed to grow the handle table\n"); @@ -521,7 +522,7 @@ static SECURITY_STATUS schan_AcquireClientCredentials(const SCHANNEL_CRED *schan return SEC_E_NO_AUTHENTICATING_AUTHORITY; }
- if (!(creds = heap_alloc(sizeof(*creds)))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(creds = malloc(sizeof(*creds)))) return SEC_E_INSUFFICIENT_MEMORY; creds->credential_use = SECPKG_CRED_OUTBOUND; creds->enabled_protocols = enabled_protocols;
@@ -545,7 +546,7 @@ static SECURITY_STATUS schan_AcquireClientCredentials(const SCHANNEL_CRED *schan return status;
fail: - heap_free(creds); + free(creds); RtlFreeHeap(GetProcessHeap(), 0, key_blob.pbData); return SEC_E_INTERNAL_ERROR; } @@ -566,14 +567,13 @@ static SECURITY_STATUS schan_AcquireServerCredentials(const SCHANNEL_CRED *schan ULONG_PTR handle; struct schan_credentials *creds;
- creds = heap_alloc_zero(sizeof(*creds)); - if (!creds) return SEC_E_INSUFFICIENT_MEMORY; + if (!(creds = calloc(1, sizeof(*creds)))) return SEC_E_INSUFFICIENT_MEMORY; creds->credential_use = SECPKG_CRED_INBOUND;
handle = schan_alloc_handle(creds, SCHAN_HANDLE_CRED); if (handle == SCHAN_INVALID_HANDLE) { - heap_free(creds); + free(creds); return SEC_E_INTERNAL_ERROR; }
@@ -636,7 +636,7 @@ static SECURITY_STATUS SEC_ENTRY schan_FreeCredentialsHandle( if (!creds) return SEC_E_INVALID_HANDLE;
if (creds->credential_use == SECPKG_CRED_OUTBOUND) schan_funcs->free_certificate_credentials(creds); - heap_free(creds); + free(creds); return SEC_E_OK; }
@@ -675,10 +675,10 @@ static void schan_resize_current_buffer(const struct schan_buffers *s, SIZE_T mi
while (new_size < min_size) new_size *= 2;
- if (b->pvBuffer) - new_data = heap_realloc(b->pvBuffer, new_size); + if (b->pvBuffer) /* freed with FreeContextBuffer */ + new_data = RtlReAllocateHeap(GetProcessHeap(), 0, b->pvBuffer, new_size); else - new_data = heap_alloc(new_size); + new_data = RtlAllocateHeap(GetProcessHeap(), 0, new_size);
if (!new_data) { @@ -925,21 +925,20 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW( return SEC_E_INVALID_HANDLE; }
- ctx = heap_alloc(sizeof(*ctx)); - if (!ctx) return SEC_E_INSUFFICIENT_MEMORY; + if (!(ctx = malloc(sizeof(*ctx)))) return SEC_E_INSUFFICIENT_MEMORY;
ctx->cert = NULL; handle = schan_alloc_handle(ctx, SCHAN_HANDLE_CTX); if (handle == SCHAN_INVALID_HANDLE) { - heap_free(ctx); + free(ctx); return SEC_E_INTERNAL_ERROR; }
if (!schan_funcs->create_session(&ctx->session, cred)) { schan_free_handle(handle, SCHAN_HANDLE_CTX); - heap_free(ctx); + free(ctx); return SEC_E_INTERNAL_ERROR; }
@@ -954,13 +953,13 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW( if (pszTargetName && *pszTargetName) { UINT len = WideCharToMultiByte( CP_UNIXCP, 0, pszTargetName, -1, NULL, 0, NULL, NULL ); - char *target = heap_alloc( len ); + char *target = malloc( len );
if (target) { WideCharToMultiByte( CP_UNIXCP, 0, pszTargetName, -1, target, len, NULL, NULL ); schan_funcs->set_session_target( ctx->session, target ); - heap_free( target ); + free( target ); } }
@@ -1077,7 +1076,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextA( if (pszTargetName) { INT len = MultiByteToWideChar(CP_ACP, 0, pszTargetName, -1, NULL, 0); - if (!(target_name = heap_alloc(len * sizeof(*target_name)))) return SEC_E_INSUFFICIENT_MEMORY; + if (!(target_name = malloc(len * sizeof(*target_name)))) return SEC_E_INSUFFICIENT_MEMORY; MultiByteToWideChar(CP_ACP, 0, pszTargetName, -1, target_name, len); }
@@ -1085,7 +1084,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextA( fContextReq, Reserved1, TargetDataRep, pInput, Reserved2, phNewContext, pOutput, pfContextAttr, ptsExpiry);
- heap_free(target_name); + free(target_name); return ret; }
@@ -1244,7 +1243,8 @@ static SECURITY_STATUS SEC_ENTRY schan_QueryContextAttributesW( return GetLastError();
bindings->BindingsLength = sizeof(*bindings->Bindings) + sizeof(prefix)-1 + hash_size; - bindings->Bindings = heap_alloc_zero(bindings->BindingsLength); + /* freed with FreeContextBuffer */ + bindings->Bindings = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, bindings->BindingsLength); if(!bindings->Bindings) return SEC_E_INSUFFICIENT_MEMORY;
@@ -1386,7 +1386,7 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle buffer = &message->pBuffers[idx];
data_size = buffer->cbBuffer; - data = heap_alloc(data_size); + data = malloc(data_size); memcpy(data, buffer->pvBuffer, data_size);
if (schan_find_sec_buffer_idx(message, 0, SECBUFFER_STREAM_HEADER) != -1) @@ -1404,7 +1404,7 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle
b = &ctx->transport.out; b->desc->pBuffers[b->current_buffer_idx].cbBuffer = b->offset; - heap_free(data); + free(data);
TRACE("Returning %#x.\n", status);
@@ -1520,7 +1520,7 @@ static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle }
data_size = expected_size - ctx->header_size; - data = heap_alloc(data_size); + data = malloc(data_size);
init_schan_buffers(&ctx->transport.in, message, schan_decrypt_message_get_next_buffer); ctx->transport.in.limit = expected_size; @@ -1541,7 +1541,7 @@ static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle
if (status != SEC_E_OK) { - heap_free(data); + free(data); ERR("Returning %x\n", status); return status; } @@ -1555,7 +1555,7 @@ static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle TRACE("Received %ld bytes\n", received);
memcpy(buf_ptr + ctx->header_size, data, received); - heap_free(data); + free(data);
schan_decrypt_fill_buffer(message, SECBUFFER_DATA, buf_ptr + ctx->header_size, received); @@ -1586,7 +1586,7 @@ static SECURITY_STATUS SEC_ENTRY schan_DeleteSecurityContext(PCtxtHandle context
if (ctx->cert) CertFreeCertificateContext(ctx->cert); schan_funcs->dispose_session(ctx->session); - heap_free(ctx); + free(ctx); return SEC_E_OK; }
@@ -1597,7 +1597,7 @@ static const SecurityFunctionTableA schanTableA = { schan_AcquireCredentialsHandleA, schan_FreeCredentialsHandle, NULL, /* Reserved2 */ - schan_InitializeSecurityContextA, + schan_InitializeSecurityContextA, NULL, /* AcceptSecurityContext */ NULL, /* CompleteAuthToken */ schan_DeleteSecurityContext, @@ -1628,7 +1628,7 @@ static const SecurityFunctionTableW schanTableW = { schan_AcquireCredentialsHandleW, schan_FreeCredentialsHandle, NULL, /* Reserved2 */ - schan_InitializeSecurityContextW, + schan_InitializeSecurityContextW, NULL, /* AcceptSecurityContext */ NULL, /* CompleteAuthToken */ schan_DeleteSecurityContext, @@ -1691,7 +1691,7 @@ void SECUR32_initSchannelSP(void) return; }
- schan_handle_table = heap_alloc(64 * sizeof(*schan_handle_table)); + schan_handle_table = malloc(64 * sizeof(*schan_handle_table)); if (!schan_handle_table) { ERR("Failed to allocate schannel handle table.\n"); @@ -1710,7 +1710,7 @@ void SECUR32_initSchannelSP(void) return;
fail: - heap_free(schan_handle_table); + free(schan_handle_table); schan_handle_table = NULL; return; } @@ -1729,7 +1729,7 @@ void SECUR32_deinitSchannelSP(void) { struct schan_context *ctx = schan_free_handle(i, SCHAN_HANDLE_CTX); schan_funcs->dispose_session(ctx->session); - heap_free(ctx); + free(ctx); } } i = schan_handle_count; @@ -1740,10 +1740,10 @@ void SECUR32_deinitSchannelSP(void) struct schan_credentials *cred; cred = schan_free_handle(i, SCHAN_HANDLE_CRED); schan_funcs->free_certificate_credentials(cred); - heap_free(cred); + free(cred); } } - heap_free(schan_handle_table); + free(schan_handle_table);
__wine_init_unix_lib(hsecur32, DLL_PROCESS_DETACH, NULL, NULL); schan_funcs = NULL; diff --git a/dlls/secur32/secur32.c b/dlls/secur32/secur32.c index fda7d7ef865..08bac24686a 100644 --- a/dlls/secur32/secur32.c +++ b/dlls/secur32/secur32.c @@ -174,56 +174,10 @@ PSecurityFunctionTableW WINAPI InitSecurityInterfaceW(void) return &securityFunctionTableW; }
-static WCHAR *SECUR32_strdupW(const WCHAR *str) +static WCHAR *strdupW( const WCHAR *str ) { WCHAR *ret = NULL; - if (str && (ret = heap_alloc((wcslen(str) + 1) * sizeof(WCHAR)))) wcscpy(ret, str); - return ret; -} - -PWSTR SECUR32_AllocWideFromMultiByte(PCSTR str) -{ - PWSTR ret; - - if (str) - { - int charsNeeded = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); - - if (charsNeeded) - { - ret = heap_alloc(charsNeeded * sizeof(WCHAR)); - if (ret) - MultiByteToWideChar(CP_ACP, 0, str, -1, ret, charsNeeded); - } - else - ret = NULL; - } - else - ret = NULL; - return ret; -} - -PSTR SECUR32_AllocMultiByteFromWide(PCWSTR str) -{ - PSTR ret; - - if (str) - { - int charsNeeded = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, - NULL, NULL); - - if (charsNeeded) - { - ret = heap_alloc(charsNeeded); - if (ret) - WideCharToMultiByte(CP_ACP, 0, str, -1, ret, charsNeeded, - NULL, NULL); - } - else - ret = NULL; - } - else - ret = NULL; + if (str && (ret = malloc( (wcslen(str) + 1) * sizeof(WCHAR) ))) wcscpy( ret, str ); return ret; }
@@ -369,6 +323,17 @@ static void _makeFnTableW(PSecurityFunctionTableW fnTableW, } }
+static WCHAR *strdupAW( const char *str ) +{ + WCHAR *ret = NULL; + if (str) + { + int len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); + if ((ret = malloc( len * sizeof(WCHAR) ))) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len ); + } + return ret; +} + static void _copyPackageInfo(PSecPkgInfoW info, const SecPkgInfoA *inInfoA, const SecPkgInfoW *inInfoW) { @@ -380,13 +345,13 @@ static void _copyPackageInfo(PSecPkgInfoW info, const SecPkgInfoA *inInfoA, memcpy(info, inInfoW ? inInfoW : (const SecPkgInfoW *)inInfoA, sizeof(*info)); if (inInfoW) { - info->Name = SECUR32_strdupW(inInfoW->Name); - info->Comment = SECUR32_strdupW(inInfoW->Comment); + info->Name = strdupW(inInfoW->Name); + info->Comment = strdupW(inInfoW->Comment); } else { - info->Name = SECUR32_AllocWideFromMultiByte(inInfoA->Name); - info->Comment = SECUR32_AllocWideFromMultiByte(inInfoA->Comment); + info->Name = strdupAW(inInfoA->Name); + info->Comment = strdupAW(inInfoA->Comment); } } } @@ -400,8 +365,7 @@ SecureProvider *SECUR32_addProvider(const SecurityFunctionTableA *fnTableA,
if (!providerTable) { - providerTable = heap_alloc(sizeof(SecureProviderTable)); - if (!providerTable) + if (!(providerTable = malloc(sizeof(*ret)))) { LeaveCriticalSection(&cs); return NULL; @@ -410,8 +374,7 @@ SecureProvider *SECUR32_addProvider(const SecurityFunctionTableA *fnTableA, list_init(&providerTable->table); }
- ret = heap_alloc(sizeof(SecureProvider)); - if (!ret) + if (!(ret = malloc(sizeof(*ret)))) { LeaveCriticalSection(&cs); return NULL; @@ -422,17 +385,17 @@ SecureProvider *SECUR32_addProvider(const SecurityFunctionTableA *fnTableA,
if (fnTableA || fnTableW) { - ret->moduleName = moduleName ? SECUR32_strdupW(moduleName) : NULL; + ret->moduleName = moduleName ? strdupW(moduleName) : NULL; _makeFnTableA(&ret->fnTableA, fnTableA, fnTableW); _makeFnTableW(&ret->fnTableW, fnTableA, fnTableW); ret->loaded = !moduleName; } else { - ret->moduleName = SECUR32_strdupW(moduleName); + ret->moduleName = strdupW(moduleName); ret->loaded = FALSE; } - + LeaveCriticalSection(&cs); return ret; } @@ -449,8 +412,7 @@ void SECUR32_addPackages(SecureProvider *provider, ULONG toAdd,
if (!packageTable) { - packageTable = heap_alloc(sizeof(SecurePackageTable)); - if (!packageTable) + if (!(packageTable = malloc(sizeof(*packageTable)))) { LeaveCriticalSection(&cs); return; @@ -459,19 +421,17 @@ void SECUR32_addPackages(SecureProvider *provider, ULONG toAdd, packageTable->numPackages = 0; list_init(&packageTable->table); } - + for (i = 0; i < toAdd; i++) { - SecurePackage *package = heap_alloc(sizeof(SecurePackage)); - if (!package) - continue; + SecurePackage *package; + + if (!(package = malloc(sizeof(*package)))) continue;
list_add_tail(&packageTable->table, &package->entry);
package->provider = provider; - _copyPackageInfo(&package->infoW, - infoA ? &infoA[i] : NULL, - infoW ? &infoW[i] : NULL); + _copyPackageInfo(&package->infoW, infoA ? &infoA[i] : NULL, infoW ? &infoW[i] : NULL); } packageTable->numPackages += toAdd;
@@ -599,14 +559,11 @@ SecurePackage *SECUR32_findPackageW(PCWSTR packageName) LIST_FOR_EACH_ENTRY(ret, &packageTable->table, SecurePackage, entry) { matched = !lstrcmpiW(ret->infoW.Name, packageName); - if (matched) - break; + if (matched) break; } - - if (!matched) - return NULL; + if (!matched) return NULL;
- if (ret->provider && !ret->provider->loaded) + if (ret->provider && !ret->provider->loaded) { ret->provider->lib = LoadLibraryW(ret->provider->moduleName); if (ret->provider->lib) @@ -668,28 +625,26 @@ static void SECUR32_freeProviders(void) LIST_FOR_EACH_ENTRY_SAFE(package, package_next, &packageTable->table, SecurePackage, entry) { - heap_free(package->infoW.Name); - heap_free(package->infoW.Comment); - heap_free(package); + free(package->infoW.Name); + free(package->infoW.Comment); + free(package); }
- heap_free(packageTable); + free(packageTable); packageTable = NULL; }
if (providerTable) { SecureProvider *provider, *provider_next; - LIST_FOR_EACH_ENTRY_SAFE(provider, provider_next, &providerTable->table, - SecureProvider, entry) + LIST_FOR_EACH_ENTRY_SAFE(provider, provider_next, &providerTable->table, SecureProvider, entry) { - heap_free(provider->moduleName); - if (provider->lib) - FreeLibrary(provider->lib); - heap_free(provider); + free(provider->moduleName); + if (provider->lib) FreeLibrary(provider->lib); + free(provider); }
- heap_free(providerTable); + free(providerTable); providerTable = NULL; }
@@ -704,9 +659,9 @@ static void SECUR32_freeProviders(void) * The sample ssp seems to use LocalAlloc/LocalFee, but there doesn't seem to * be any guarantee, nor is there an alloc function in secur32. */ -SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv) +SECURITY_STATUS WINAPI FreeContextBuffer( void *pv ) { - heap_free(pv); + RtlFreeHeap( GetProcessHeap(), 0, pv ); return SEC_E_OK; }
@@ -738,8 +693,8 @@ SECURITY_STATUS WINAPI EnumerateSecurityPackagesW(PULONG pcPackages, } if (bytesNeeded) { - *ppPackageInfo = heap_alloc(bytesNeeded); - if (*ppPackageInfo) + /* freed with FeeContextBuffer */ + if ((*ppPackageInfo = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { ULONG i = 0; PWSTR nextString; @@ -803,8 +758,8 @@ static PSecPkgInfoA thunk_PSecPkgInfoWToA(ULONG cPackages, bytesNeeded += WideCharToMultiByte(CP_ACP, 0, info[i].Comment, -1, NULL, 0, NULL, NULL); } - ret = heap_alloc(bytesNeeded); - if (ret) + /* freed with FreeContextBuffer */ + if ((ret = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { PSTR nextString;
@@ -895,7 +850,7 @@ SECURITY_STATUS WINAPI EnumerateSecurityPackagesA(PULONG pcPackages, * nSize returns the number of characters written when lpNameBuffer is not * NULL or the size of the buffer needed to hold the name when the buffer * is too short or lpNameBuffer is NULL. - * + * * It the buffer is too short, ERROR_INSUFFICIENT_BUFFER error will be set. */ BOOLEAN WINAPI GetComputerObjectNameA( @@ -908,8 +863,7 @@ BOOLEAN WINAPI GetComputerObjectNameA( TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize);
if (lpNameBuffer) { - bufferW = heap_alloc(sizeW * sizeof(WCHAR)); - if (bufferW == NULL) { + if (!(bufferW = malloc(sizeW * sizeof(WCHAR)))) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } @@ -922,7 +876,7 @@ BOOLEAN WINAPI GetComputerObjectNameA( } else *nSize = sizeW; - heap_free(bufferW); + free(bufferW); return rc; }
@@ -1115,7 +1069,7 @@ BOOLEAN WINAPI GetUserNameExA( ULONG sizeW = *nSize; TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize); if (lpNameBuffer) { - bufferW = heap_alloc(sizeW * sizeof(WCHAR)); + bufferW = malloc(sizeW * sizeof(WCHAR)); if (bufferW == NULL) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; @@ -1138,7 +1092,7 @@ BOOLEAN WINAPI GetUserNameExA( } else *nSize = sizeW; - heap_free(bufferW); + free(bufferW); return rc; }
diff --git a/dlls/secur32/secur32_priv.h b/dlls/secur32/secur32_priv.h index 9d191fc4872..75c6cde2e42 100644 --- a/dlls/secur32/secur32_priv.h +++ b/dlls/secur32/secur32_priv.h @@ -23,9 +23,8 @@
#include <sys/types.h> #include <limits.h> -#include "wine/heap.h" -#include "wine/list.h" #include "schannel.h" +#include "wine/list.h"
extern HINSTANCE hsecur32 DECLSPEC_HIDDEN;
@@ -71,11 +70,6 @@ SecurePackage *SECUR32_findPackageW(PCWSTR packageName) DECLSPEC_HIDDEN; */ SecurePackage *SECUR32_findPackageA(PCSTR packageName) DECLSPEC_HIDDEN;
-/* A few string helpers; will return NULL if str is NULL. Free return with - * HeapFree */ -PWSTR SECUR32_AllocWideFromMultiByte(PCSTR str) DECLSPEC_HIDDEN; -PSTR SECUR32_AllocMultiByteFromWide(PCWSTR str) DECLSPEC_HIDDEN; - /* Initialization functions for built-in providers */ void SECUR32_initSchannelSP(void) DECLSPEC_HIDDEN; void SECUR32_initNegotiateSP(void) DECLSPEC_HIDDEN; diff --git a/dlls/secur32/thunks.c b/dlls/secur32/thunks.c index 7a59c4ee3ca..7087696ca35 100644 --- a/dlls/secur32/thunks.c +++ b/dlls/secur32/thunks.c @@ -58,6 +58,18 @@ SECURITY_STATUS SEC_ENTRY thunk_AcquireCredentialsHandleA( return ret; }
+static char *strdupWA( const WCHAR *str ) +{ + char *ret = NULL; + if (str) + { + int len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL ); + if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, len ))) + WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL ); + } + return ret; +} + SECURITY_STATUS SEC_ENTRY thunk_AcquireCredentialsHandleW( SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse, PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, @@ -70,15 +82,14 @@ SECURITY_STATUS SEC_ENTRY thunk_AcquireCredentialsHandleW( pvGetKeyArgument, phCredential, ptsExpiry); if (pszPackage) { - PSTR principal, package; + char *principal, *package;
- principal = SECUR32_AllocMultiByteFromWide(pszPrincipal); - package = SECUR32_AllocMultiByteFromWide(pszPackage); + principal = strdupWA(pszPrincipal); + package = strdupWA(pszPackage); ret = AcquireCredentialsHandleA(principal, package, fCredentialsUse, - pvLogonID, pAuthData, pGetKeyFn, pvGetKeyArgument, phCredential, - ptsExpiry); - heap_free(principal); - heap_free(package); + pvLogonID, pAuthData, pGetKeyFn, pvGetKeyArgument, phCredential, ptsExpiry); + RtlFreeHeap(GetProcessHeap(), 0, principal); + RtlFreeHeap(GetProcessHeap(), 0, package); } else ret = SEC_E_SECPKG_NOT_FOUND; @@ -103,24 +114,20 @@ SECURITY_STATUS SEC_ENTRY thunk_QueryCredentialsAttributesA( { if (package->provider->fnTableW.QueryCredentialsAttributesW) { - ret = package->provider->fnTableW.QueryCredentialsAttributesW( - cred, ulAttribute, pBuffer); + ret = package->provider->fnTableW.QueryCredentialsAttributesW( cred, ulAttribute, pBuffer); if (ret == SEC_E_OK) { switch (ulAttribute) { case SECPKG_CRED_ATTR_NAMES: { - PSecPkgCredentials_NamesW names = - (PSecPkgCredentials_NamesW)pBuffer; + PSecPkgCredentials_NamesW names = (PSecPkgCredentials_NamesW)pBuffer; SEC_WCHAR *oldUser = names->sUserName;
if (oldUser) { - names->sUserName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldUser); - package->provider->fnTableW.FreeContextBuffer( - oldUser); + names->sUserName = (WCHAR *)strdupWA(oldUser); + package->provider->fnTableW.FreeContextBuffer(oldUser); } break; } @@ -141,6 +148,18 @@ SECURITY_STATUS SEC_ENTRY thunk_QueryCredentialsAttributesA( return ret; }
+static WCHAR *strdupAW( const char *str ) +{ + WCHAR *ret = NULL; + if (str) + { + int len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); + if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) + MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len ); + } + return ret; +} + SECURITY_STATUS SEC_ENTRY thunk_QueryCredentialsAttributesW( PCredHandle phCredential, ULONG ulAttribute, void *pBuffer) { @@ -156,24 +175,20 @@ SECURITY_STATUS SEC_ENTRY thunk_QueryCredentialsAttributesW( { if (package->provider->fnTableA.QueryCredentialsAttributesA) { - ret = package->provider->fnTableA.QueryCredentialsAttributesA( - cred, ulAttribute, pBuffer); + ret = package->provider->fnTableA.QueryCredentialsAttributesA(cred, ulAttribute, pBuffer); if (ret == SEC_E_OK) { switch (ulAttribute) { case SECPKG_CRED_ATTR_NAMES: { - PSecPkgCredentials_NamesA names = - (PSecPkgCredentials_NamesA)pBuffer; + PSecPkgCredentials_NamesA names = (PSecPkgCredentials_NamesA)pBuffer; SEC_CHAR *oldUser = names->sUserName;
if (oldUser) { - names->sUserName = - (PSTR)SECUR32_AllocWideFromMultiByte(oldUser); - package->provider->fnTableA.FreeContextBuffer( - oldUser); + names->sUserName = (char *)strdupAW(oldUser); + package->provider->fnTableA.FreeContextBuffer(oldUser); } break; } @@ -254,13 +269,13 @@ SECURITY_STATUS SEC_ENTRY thunk_InitializeSecurityContextW( { if (package->provider->fnTableA.InitializeSecurityContextA) { - PSTR target = SECUR32_AllocMultiByteFromWide(pszTargetName); + char *target = strdupWA(pszTargetName);
ret = package->provider->fnTableA.InitializeSecurityContextA( phCredential, phContext, target, fContextReq, Reserved1, TargetDataRep, pInput, Reserved2, phNewContext, pOutput, pfContextAttr, ptsExpiry); - heap_free(target); + RtlFreeHeap(GetProcessHeap(), 0, target); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -332,14 +347,14 @@ SECURITY_STATUS SEC_ENTRY thunk_AddCredentialsW(PCredHandle hCredentials, { if (package->provider->fnTableA.AddCredentialsA) { - PSTR szPrincipal = SECUR32_AllocMultiByteFromWide(pszPrincipal); - PSTR szPackage = SECUR32_AllocMultiByteFromWide(pszPackage); + char *szPrincipal = strdupWA(pszPrincipal); + char *szPackage = strdupWA(pszPackage);
ret = package->provider->fnTableA.AddCredentialsA( cred, szPrincipal, szPackage, fCredentialUse, pAuthData, pGetKeyFn, pvGetKeyArgument, ptsExpiry); - heap_free(szPrincipal); - heap_free(szPackage); + RtlFreeHeap(GetProcessHeap(), 0, szPrincipal); + RtlFreeHeap(GetProcessHeap(), 0, szPackage); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -373,17 +388,15 @@ static PSecPkgInfoA _copyPackageInfoFlatWToA(const SecPkgInfoW *infoW) NULL, 0, NULL, NULL); bytesNeeded += commentLen; } - ret = heap_alloc(bytesNeeded); - if (ret) + if ((ret = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { - PSTR nextString = (PSTR)((PBYTE)ret + sizeof(SecPkgInfoA)); + char *nextString = (char *)ret + sizeof(SecPkgInfoA);
memcpy(ret, infoW, sizeof(SecPkgInfoA)); if (infoW->Name) { ret->Name = nextString; - WideCharToMultiByte(CP_ACP, 0, infoW->Name, -1, nextString, - nameLen, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, infoW->Name, -1, nextString, nameLen, NULL, NULL); nextString += nameLen; } else @@ -391,8 +404,7 @@ static PSecPkgInfoA _copyPackageInfoFlatWToA(const SecPkgInfoW *infoW) if (infoW->Comment) { ret->Comment = nextString; - WideCharToMultiByte(CP_ACP, 0, infoW->Comment, -1, nextString, - nameLen, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, infoW->Comment, -1, nextString, nameLen, NULL, NULL); } else ret->Comment = NULL; @@ -419,22 +431,19 @@ static SECURITY_STATUS thunk_ContextAttributesWToA(SecurePackage *package,
if (oldUser) { - names->sUserName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldUser); + names->sUserName = (WCHAR *)strdupWA(oldUser); package->provider->fnTableW.FreeContextBuffer(oldUser); } break; } case SECPKG_ATTR_AUTHORITY: { - PSecPkgContext_AuthorityW names = - (PSecPkgContext_AuthorityW)pBuffer; + PSecPkgContext_AuthorityW names = (PSecPkgContext_AuthorityW)pBuffer; SEC_WCHAR *oldAuth = names->sAuthorityName;
if (oldAuth) { - names->sAuthorityName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldAuth); + names->sAuthorityName = (WCHAR *)strdupWA(oldAuth); package->provider->fnTableW.FreeContextBuffer(oldAuth); } break; @@ -447,24 +456,19 @@ static SECURITY_STATUS thunk_ContextAttributesWToA(SecurePackage *package,
if (oldSigAlgName) { - info->sSignatureAlgorithmName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldSigAlgName); - package->provider->fnTableW.FreeContextBuffer( - oldSigAlgName); + info->sSignatureAlgorithmName = (WCHAR *)strdupWA(oldSigAlgName); + package->provider->fnTableW.FreeContextBuffer(oldSigAlgName); } if (oldEncAlgName) { - info->sEncryptAlgorithmName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldEncAlgName); - package->provider->fnTableW.FreeContextBuffer( - oldEncAlgName); + info->sEncryptAlgorithmName = (WCHAR *)strdupWA(oldEncAlgName); + package->provider->fnTableW.FreeContextBuffer(oldEncAlgName); } break; } case SECPKG_ATTR_PACKAGE_INFO: { - PSecPkgContext_PackageInfoW info = - (PSecPkgContext_PackageInfoW)pBuffer; + PSecPkgContext_PackageInfoW info = (PSecPkgContext_PackageInfoW)pBuffer; PSecPkgInfoW oldPkgInfo = info->PackageInfo;
if (oldPkgInfo) @@ -477,8 +481,7 @@ static SECURITY_STATUS thunk_ContextAttributesWToA(SecurePackage *package, } case SECPKG_ATTR_NEGOTIATION_INFO: { - PSecPkgContext_NegotiationInfoW info = - (PSecPkgContext_NegotiationInfoW)pBuffer; + PSecPkgContext_NegotiationInfoW info = (PSecPkgContext_NegotiationInfoW)pBuffer; PSecPkgInfoW oldPkgInfo = info->PackageInfo;
if (oldPkgInfo) @@ -491,35 +494,30 @@ static SECURITY_STATUS thunk_ContextAttributesWToA(SecurePackage *package, } case SECPKG_ATTR_NATIVE_NAMES: { - PSecPkgContext_NativeNamesW names = - (PSecPkgContext_NativeNamesW)pBuffer; - PWSTR oldClient = names->sClientName; - PWSTR oldServer = names->sServerName; + PSecPkgContext_NativeNamesW names = (PSecPkgContext_NativeNamesW)pBuffer; + WCHAR *oldClient = names->sClientName; + WCHAR *oldServer = names->sServerName;
if (oldClient) { - names->sClientName = (PWSTR)SECUR32_AllocMultiByteFromWide( - oldClient); + names->sClientName = (WCHAR *)strdupWA(oldClient); package->provider->fnTableW.FreeContextBuffer(oldClient); } if (oldServer) { - names->sServerName = (PWSTR)SECUR32_AllocMultiByteFromWide( - oldServer); + names->sServerName = (WCHAR *)strdupWA(oldServer); package->provider->fnTableW.FreeContextBuffer(oldServer); } break; } case SECPKG_ATTR_CREDENTIAL_NAME: { - PSecPkgContext_CredentialNameW name = - (PSecPkgContext_CredentialNameW)pBuffer; - PWSTR oldCred = name->sCredentialName; + PSecPkgContext_CredentialNameW name = (PSecPkgContext_CredentialNameW)pBuffer; + WCHAR *oldCred = name->sCredentialName;
if (oldCred) { - name->sCredentialName = - (PWSTR)SECUR32_AllocMultiByteFromWide(oldCred); + name->sCredentialName = (WCHAR *)strdupWA(oldCred); package->provider->fnTableW.FreeContextBuffer(oldCred); } break; @@ -560,11 +558,9 @@ SECURITY_STATUS SEC_ENTRY thunk_QueryContextAttributesA(PCtxtHandle phContext, { if (package->provider->fnTableW.QueryContextAttributesW) { - ret = package->provider->fnTableW.QueryContextAttributesW( - ctxt, ulAttribute, pBuffer); + ret = package->provider->fnTableW.QueryContextAttributesW( ctxt, ulAttribute, pBuffer); if (ret == SEC_E_OK) - ret = thunk_ContextAttributesWToA(package, ulAttribute, - pBuffer); + ret = thunk_ContextAttributesWToA(package, ulAttribute, pBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -588,27 +584,23 @@ static PSecPkgInfoW _copyPackageInfoFlatAToW(const SecPkgInfoA *infoA)
if (infoA->Name) { - nameLen = MultiByteToWideChar(CP_ACP, 0, infoA->Name, -1, - NULL, 0); + nameLen = MultiByteToWideChar(CP_ACP, 0, infoA->Name, -1, NULL, 0); bytesNeeded += nameLen * sizeof(WCHAR); } if (infoA->Comment) { - commentLen = MultiByteToWideChar(CP_ACP, 0, infoA->Comment, -1, - NULL, 0); + commentLen = MultiByteToWideChar(CP_ACP, 0, infoA->Comment, -1, NULL, 0); bytesNeeded += commentLen * sizeof(WCHAR); } - ret = heap_alloc(bytesNeeded); - if (ret) + if ((ret = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { - PWSTR nextString = (PWSTR)((PBYTE)ret + sizeof(SecPkgInfoW)); + WCHAR *nextString = (WCHAR *)(char *)ret + sizeof(SecPkgInfoW);
memcpy(ret, infoA, sizeof(SecPkgInfoA)); if (infoA->Name) { ret->Name = nextString; - MultiByteToWideChar(CP_ACP, 0, infoA->Name, -1, nextString, - nameLen); + MultiByteToWideChar(CP_ACP, 0, infoA->Name, -1, nextString, nameLen); nextString += nameLen; } else @@ -616,8 +608,7 @@ static PSecPkgInfoW _copyPackageInfoFlatAToW(const SecPkgInfoA *infoA) if (infoA->Comment) { ret->Comment = nextString; - MultiByteToWideChar(CP_ACP, 0, infoA->Comment, -1, nextString, - commentLen); + MultiByteToWideChar(CP_ACP, 0, infoA->Comment, -1, nextString, commentLen); } else ret->Comment = NULL; @@ -644,22 +635,19 @@ static SECURITY_STATUS thunk_ContextAttributesAToW(SecurePackage *package,
if (oldUser) { - names->sUserName = - (PSTR)SECUR32_AllocWideFromMultiByte(oldUser); + names->sUserName = (char *)strdupAW(oldUser); package->provider->fnTableW.FreeContextBuffer(oldUser); } break; } case SECPKG_ATTR_AUTHORITY: { - PSecPkgContext_AuthorityA names = - (PSecPkgContext_AuthorityA)pBuffer; + PSecPkgContext_AuthorityA names = (PSecPkgContext_AuthorityA)pBuffer; SEC_CHAR *oldAuth = names->sAuthorityName;
if (oldAuth) { - names->sAuthorityName = - (PSTR)SECUR32_AllocWideFromMultiByte(oldAuth); + names->sAuthorityName = (char *)strdupAW(oldAuth); package->provider->fnTableW.FreeContextBuffer(oldAuth); } break; @@ -672,25 +660,19 @@ static SECURITY_STATUS thunk_ContextAttributesAToW(SecurePackage *package,
if (oldSigAlgName) { - info->sSignatureAlgorithmName = - (PSTR)SECUR32_AllocWideFromMultiByte(oldSigAlgName); - package->provider->fnTableW.FreeContextBuffer( - oldSigAlgName); + info->sSignatureAlgorithmName = (char *)strdupAW(oldSigAlgName); + package->provider->fnTableW.FreeContextBuffer(oldSigAlgName); } if (oldEncAlgName) { - info->sEncryptAlgorithmName = - (PSTR)SECUR32_AllocWideFromMultiByte( - oldEncAlgName); - package->provider->fnTableW.FreeContextBuffer( - oldEncAlgName); + info->sEncryptAlgorithmName = (char *)strdupAW(oldEncAlgName); + package->provider->fnTableW.FreeContextBuffer(oldEncAlgName); } break; } case SECPKG_ATTR_PACKAGE_INFO: { - PSecPkgContext_PackageInfoA info = - (PSecPkgContext_PackageInfoA)pBuffer; + PSecPkgContext_PackageInfoA info = (PSecPkgContext_PackageInfoA)pBuffer; PSecPkgInfoA oldPkgInfo = info->PackageInfo;
if (oldPkgInfo) @@ -703,8 +685,7 @@ static SECURITY_STATUS thunk_ContextAttributesAToW(SecurePackage *package, } case SECPKG_ATTR_NEGOTIATION_INFO: { - PSecPkgContext_NegotiationInfoA info = - (PSecPkgContext_NegotiationInfoA)pBuffer; + PSecPkgContext_NegotiationInfoA info = (PSecPkgContext_NegotiationInfoA)pBuffer; PSecPkgInfoA oldPkgInfo = info->PackageInfo;
if (oldPkgInfo) @@ -717,35 +698,30 @@ static SECURITY_STATUS thunk_ContextAttributesAToW(SecurePackage *package, } case SECPKG_ATTR_NATIVE_NAMES: { - PSecPkgContext_NativeNamesA names = - (PSecPkgContext_NativeNamesA)pBuffer; - PSTR oldClient = names->sClientName; - PSTR oldServer = names->sServerName; + PSecPkgContext_NativeNamesA names = (PSecPkgContext_NativeNamesA)pBuffer; + char *oldClient = names->sClientName; + char *oldServer = names->sServerName;
if (oldClient) { - names->sClientName = (PSTR)SECUR32_AllocWideFromMultiByte( - oldClient); + names->sClientName = (char *)strdupAW(oldClient); package->provider->fnTableW.FreeContextBuffer(oldClient); } if (oldServer) { - names->sServerName = (PSTR)SECUR32_AllocWideFromMultiByte( - oldServer); + names->sServerName = (char *)strdupAW(oldServer); package->provider->fnTableW.FreeContextBuffer(oldServer); } break; } case SECPKG_ATTR_CREDENTIAL_NAME: { - PSecPkgContext_CredentialNameA name = - (PSecPkgContext_CredentialNameA)pBuffer; - PSTR oldCred = name->sCredentialName; + PSecPkgContext_CredentialNameA name = (PSecPkgContext_CredentialNameA)pBuffer; + char *oldCred = name->sCredentialName;
if (oldCred) { - name->sCredentialName = - (PSTR)SECUR32_AllocWideFromMultiByte(oldCred); + name->sCredentialName = (char *)strdupAW(oldCred); package->provider->fnTableW.FreeContextBuffer(oldCred); } break; @@ -786,11 +762,9 @@ SECURITY_STATUS SEC_ENTRY thunk_QueryContextAttributesW(PCtxtHandle phContext, { if (package->provider->fnTableA.QueryContextAttributesA) { - ret = package->provider->fnTableA.QueryContextAttributesA( - ctxt, ulAttribute, pBuffer); + ret = package->provider->fnTableA.QueryContextAttributesA(ctxt, ulAttribute, pBuffer); if (ret == SEC_E_OK) - ret = thunk_ContextAttributesAToW(package, ulAttribute, - pBuffer); + ret = thunk_ContextAttributesAToW(package, ulAttribute, pBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -819,11 +793,9 @@ SECURITY_STATUS SEC_ENTRY thunk_SetContextAttributesA(PCtxtHandle phContext, if (package->provider->fnTableW.SetContextAttributesW) { /* TODO: gotta validate size too! */ - ret = thunk_ContextAttributesWToA(package, ulAttribute, - pBuffer); + ret = thunk_ContextAttributesWToA(package, ulAttribute, pBuffer); if (ret == SEC_E_OK) - ret = package->provider->fnTableW.SetContextAttributesW( - ctxt, ulAttribute, pBuffer, cbBuffer); + ret = package->provider->fnTableW.SetContextAttributesW(ctxt, ulAttribute, pBuffer, cbBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -852,11 +824,9 @@ SECURITY_STATUS SEC_ENTRY thunk_SetContextAttributesW(PCtxtHandle phContext, if (package->provider->fnTableA.SetContextAttributesA) { /* TODO: gotta validate size too! */ - ret = thunk_ContextAttributesAToW(package, ulAttribute, - pBuffer); + ret = thunk_ContextAttributesAToW(package, ulAttribute, pBuffer); if (ret == SEC_E_OK) - ret = package->provider->fnTableA.SetContextAttributesA( - ctxt, ulAttribute, pBuffer, cbBuffer); + ret = package->provider->fnTableA.SetContextAttributesA(ctxt, ulAttribute, pBuffer, cbBuffer); } else ret = SEC_E_UNSUPPORTED_FUNCTION; @@ -876,11 +846,9 @@ SECURITY_STATUS SEC_ENTRY thunk_ImportSecurityContextA( SECURITY_STATUS ret; UNICODE_STRING package;
- TRACE("%s %p %p %p\n", debugstr_a(pszPackage), pPackedContext, Token, - phContext); + TRACE("%s %p %p %p\n", debugstr_a(pszPackage), pPackedContext, Token, phContext); RtlCreateUnicodeStringFromAsciiz(&package, pszPackage); - ret = ImportSecurityContextW(package.Buffer, pPackedContext, Token, - phContext); + ret = ImportSecurityContextW(package.Buffer, pPackedContext, Token, phContext); RtlFreeUnicodeString(&package); return ret; } @@ -890,11 +858,10 @@ SECURITY_STATUS SEC_ENTRY thunk_ImportSecurityContextW( PCtxtHandle phContext) { SECURITY_STATUS ret; - PSTR package = SECUR32_AllocMultiByteFromWide(pszPackage); + char *package = strdupWA(pszPackage);
- TRACE("%s %p %p %p\n", debugstr_w(pszPackage), pPackedContext, Token, - phContext); + TRACE("%s %p %p %p\n", debugstr_w(pszPackage), pPackedContext, Token, phContext); ret = ImportSecurityContextA(package, pPackedContext, Token, phContext); - heap_free(package); + RtlFreeHeap(GetProcessHeap(), 0, package); return ret; } diff --git a/dlls/secur32/wrapper.c b/dlls/secur32/wrapper.c index 7e36f293f62..4748de83d4f 100644 --- a/dlls/secur32/wrapper.c +++ b/dlls/secur32/wrapper.c @@ -18,8 +18,10 @@ */
#include <stdarg.h> +#include <stdlib.h> #include "windef.h" #include "winbase.h" +#include "winternl.h" #include "winnls.h" #include "sspi.h"
@@ -32,8 +34,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(secur32); * phSec->dwUpper) and a copy of realHandle (stored in phSec->dwLower). * SecHandle is equivalent to both a CredHandle and a CtxtHandle. */ -static SECURITY_STATUS SECUR32_makeSecHandle(PSecHandle phSec, - SecurePackage *package, PSecHandle realHandle) +static SECURITY_STATUS make_sec_handle(PSecHandle phSec, SecurePackage *package, PSecHandle realHandle) { SECURITY_STATUS ret;
@@ -41,8 +42,7 @@ static SECURITY_STATUS SECUR32_makeSecHandle(PSecHandle phSec,
if (phSec && package && realHandle) { - PSecHandle newSec = heap_alloc(sizeof(SecHandle)); - + PSecHandle newSec = malloc(sizeof(*newSec)); if (newSec) { *newSec = *realHandle; @@ -87,7 +87,7 @@ SECURITY_STATUS WINAPI AcquireCredentialsHandleA( ptsExpiry); if (ret == SEC_E_OK) { - ret = SECUR32_makeSecHandle(phCredential, package, &myCred); + ret = make_sec_handle(phCredential, package, &myCred); if (ret != SEC_E_OK) package->provider->fnTableW.FreeCredentialsHandle( &myCred); @@ -133,7 +133,7 @@ SECURITY_STATUS WINAPI AcquireCredentialsHandleW( ptsExpiry); if (ret == SEC_E_OK) { - ret = SECUR32_makeSecHandle(phCredential, package, &myCred); + ret = make_sec_handle(phCredential, package, &myCred); if (ret != SEC_E_OK) package->provider->fnTableW.FreeCredentialsHandle( &myCred); @@ -169,7 +169,7 @@ SECURITY_STATUS WINAPI FreeCredentialsHandle( ret = package->provider->fnTableW.FreeCredentialsHandle(cred); else ret = SEC_E_INVALID_HANDLE; - heap_free(cred); + free(cred); } else ret = SEC_E_INVALID_HANDLE; @@ -287,7 +287,7 @@ SECURITY_STATUS WINAPI InitializeSecurityContextA( phNewContext && phNewContext != phContext) { SECURITY_STATUS ret2; - ret2 = SECUR32_makeSecHandle(phNewContext, package, &myCtxt); + ret2 = make_sec_handle(phNewContext, package, &myCtxt); if (ret2 != SEC_E_OK) package->provider->fnTableA.DeleteSecurityContext(&myCtxt); } @@ -351,7 +351,7 @@ SECURITY_STATUS WINAPI InitializeSecurityContextW( phNewContext && phNewContext != phContext) { SECURITY_STATUS ret2; - ret2 = SECUR32_makeSecHandle(phNewContext, package, &myCtxt); + ret2 = make_sec_handle(phNewContext, package, &myCtxt); if (ret2 != SEC_E_OK) package->provider->fnTableW.DeleteSecurityContext(&myCtxt); } @@ -395,7 +395,7 @@ SECURITY_STATUS WINAPI AcceptSecurityContext( myCtxt.dwUpper = realCtxt->dwUpper; myCtxt.dwLower = realCtxt->dwLower; } - + ret = package->provider->fnTableW.AcceptSecurityContext( cred, phContext ? &myCtxt : NULL, pInput, fContextReq, TargetDataRep, &myCtxt, pOutput, pfContextAttr, ptsExpiry); @@ -403,7 +403,7 @@ SECURITY_STATUS WINAPI AcceptSecurityContext( phNewContext && phNewContext != phContext) { SECURITY_STATUS ret2; - ret2 = SECUR32_makeSecHandle(phNewContext, package, &myCtxt); + ret2 = make_sec_handle(phNewContext, package, &myCtxt); if (ret2 != SEC_E_OK) package->provider->fnTableW.DeleteSecurityContext( &myCtxt); @@ -468,7 +468,7 @@ SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext) ret = package->provider->fnTableW.DeleteSecurityContext(ctxt); else ret = SEC_E_INVALID_HANDLE; - heap_free(ctxt); + free(ctxt); } else ret = SEC_E_INVALID_HANDLE; @@ -690,7 +690,7 @@ SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo) { SECURITY_STATUS ret; - + TRACE("%s %p\n", debugstr_a(pszPackageName), ppPackageInfo); if (pszPackageName) { @@ -713,8 +713,8 @@ SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR *pszPackageName, package->infoW.Comment, -1, NULL, 0, NULL, NULL); bytesNeeded += commentLen; } - *ppPackageInfo = heap_alloc(bytesNeeded); - if (*ppPackageInfo) + /* freed with FreeContextBuffer */ + if ((*ppPackageInfo = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { PSTR nextString = (PSTR)((PBYTE)*ppPackageInfo + sizeof(SecPkgInfoA)); @@ -775,8 +775,8 @@ SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(SEC_WCHAR *pszPackageName, commentLen = lstrlenW(package->infoW.Comment) + 1; bytesNeeded += commentLen * sizeof(WCHAR); } - *ppPackageInfo = heap_alloc(bytesNeeded); - if (*ppPackageInfo) + /* freed with FreeContextBuffer */ + if ((*ppPackageInfo = RtlAllocateHeap(GetProcessHeap(), 0, bytesNeeded))) { PWSTR nextString = (PWSTR)((PBYTE)*ppPackageInfo + sizeof(SecPkgInfoW)); @@ -845,7 +845,7 @@ SECURITY_STATUS WINAPI ImportSecurityContextA(SEC_CHAR *pszPackage, { SECURITY_STATUS ret; SecurePackage *package = SECUR32_findPackageA(pszPackage); - + TRACE("%s %p %p %p\n", debugstr_a(pszPackage), pPackedContext, Token, phContext); if (package && package->provider) @@ -858,7 +858,7 @@ SECURITY_STATUS WINAPI ImportSecurityContextA(SEC_CHAR *pszPackage, pszPackage, pPackedContext, Token, &myCtxt); if (ret == SEC_E_OK) { - ret = SECUR32_makeSecHandle(phContext, package, &myCtxt); + ret = make_sec_handle(phContext, package, &myCtxt); if (ret != SEC_E_OK) package->provider->fnTableW.DeleteSecurityContext(&myCtxt); } @@ -893,7 +893,7 @@ SECURITY_STATUS WINAPI ImportSecurityContextW(SEC_WCHAR *pszPackage, pszPackage, pPackedContext, Token, &myCtxt); if (ret == SEC_E_OK) { - ret = SECUR32_makeSecHandle(phContext, package, &myCtxt); + ret = make_sec_handle(phContext, package, &myCtxt); if (ret != SEC_E_OK) package->provider->fnTableW.DeleteSecurityContext(&myCtxt); }