diff options
author | Jeremy Allison <jra@samba.org> | 2007-03-15 21:53:53 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:18:37 -0500 |
commit | 7d77dd9db600a4b2ee11913bf8169224c2d9424a (patch) | |
tree | a54ae0114fc04edb2db561d83e39fbc5f35fb965 /source3/libads | |
parent | ca256664aa4b65902b01ddf83564b7602560bd08 (diff) | |
download | samba-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.c | 18 |
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); } |