summaryrefslogtreecommitdiff
path: root/source3/libads
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-03-15 21:53:53 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:18:37 -0500
commit7d77dd9db600a4b2ee11913bf8169224c2d9424a (patch)
treea54ae0114fc04edb2db561d83e39fbc5f35fb965 /source3/libads
parentca256664aa4b65902b01ddf83564b7602560bd08 (diff)
downloadsamba-7d77dd9db600a4b2ee11913bf8169224c2d9424a.tar.gz
samba-7d77dd9db600a4b2ee11913bf8169224c2d9424a.tar.bz2
samba-7d77dd9db600a4b2ee11913bf8169224c2d9424a.zip
r21847: Fix memory leaks in error paths (and in main code path in one case...)
in sasl bind. Wonder why coverity didn't find these ? Jeremy. (This used to be commit 89bdd30e4b2bb9dbc2ab57c54be8c6d01cae5a26)
Diffstat (limited to 'source3/libads')
-rw-r--r--source3/libads/sasl.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c
index 812f3961f1..bdc4f2e276 100644
--- a/source3/libads/sasl.c
+++ b/source3/libads/sasl.c
@@ -311,9 +311,9 @@ static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads)
int gss_rc, rc;
uint8 *p;
uint32 max_msg_size = 0;
- char *sname;
+ char *sname = NULL;
ADS_STATUS status;
- krb5_principal principal;
+ krb5_principal principal = NULL;
krb5_context ctx = NULL;
krb5_enctype enc_types[] = {
#ifdef ENCTYPE_ARCFOUR_HMAC
@@ -331,24 +331,32 @@ static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads)
initialize_krb5_error_table();
status = ADS_ERROR_KRB5(krb5_init_context(&ctx));
if (!ADS_ERR_OK(status)) {
+ SAFE_FREE(sname);
return status;
}
status = ADS_ERROR_KRB5(krb5_set_default_tgs_ktypes(ctx, enc_types));
if (!ADS_ERR_OK(status)) {
+ SAFE_FREE(sname);
+ krb5_free_context(ctx);
return status;
}
status = ADS_ERROR_KRB5(smb_krb5_parse_name(ctx, sname, &principal));
if (!ADS_ERR_OK(status)) {
+ SAFE_FREE(sname);
+ krb5_free_context(ctx);
return status;
}
- free(sname);
- krb5_free_context(ctx);
-
input_name.value = &principal;
input_name.length = sizeof(principal);
gss_rc = gss_import_name(&minor_status, &input_name, &nt_principal, &serv_name);
+
+ /* We've finished with principal and sname now. */
+ SAFE_FREE(sname);
+ krb5_free_principal(ctx, principal);
+ krb5_free_context(ctx);
+
if (gss_rc) {
return ADS_ERROR_GSS(gss_rc, minor_status);
}