diff options
author | Andrew Bartlett <abartlet@samba.org> | 2007-08-09 06:26:19 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 15:01:35 -0500 |
commit | 233e4f72d63e074692662ac4f6a523ad8a893c57 (patch) | |
tree | 4e1bb8beeb820d5a5616a4e38dce606a74a171a5 /source4/auth/credentials | |
parent | 9fd3416452ac82d27dac7b8c16f6ad89f5551f6b (diff) | |
download | samba-233e4f72d63e074692662ac4f6a523ad8a893c57.tar.gz samba-233e4f72d63e074692662ac4f6a523ad8a893c57.tar.bz2 samba-233e4f72d63e074692662ac4f6a523ad8a893c57.zip |
r24282: Try to fix the occasional Samba4 crash in BASE-BENCH-READWRITE, as
seen in particular on opi.
This looked like a Heimdal problem, but I think it was simply that we
didn't do a talloc_reference() to keep tabs on the memory we were
using, and in between obtaining the pointer and using it, it was
assigned to unrelated memory.
Andrew Bartlett
(This used to be commit a650ad8b37d58ba64458a33313714d1abfc4850b)
Diffstat (limited to 'source4/auth/credentials')
-rw-r--r-- | source4/auth/credentials/credentials_krb5.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/source4/auth/credentials/credentials_krb5.c b/source4/auth/credentials/credentials_krb5.c index ab850c1307..2b5a5fe7f1 100644 --- a/source4/auth/credentials/credentials_krb5.c +++ b/source4/auth/credentials/credentials_krb5.c @@ -259,7 +259,8 @@ int cli_credentials_get_ccache(struct cli_credentials *cred, cli_credentials_set_machine_account(cred); } - if (cred->ccache_obtained >= cred->ccache_threshold) { + if (cred->ccache_obtained >= cred->ccache_threshold && + cred->ccache_obtained > CRED_UNINITIALISED) { *ccc = cred->ccache; return 0; } @@ -298,7 +299,7 @@ void cli_credentials_invalidate_client_gss_creds(struct cli_credentials *cred, * any cached credentials are now invalid */ if (obtained >= cred->client_gss_creds_obtained) { if (cred->client_gss_creds_obtained > CRED_UNINITIALISED) { - talloc_free(cred->client_gss_creds); + talloc_unlink(cred, cred->client_gss_creds); cred->client_gss_creds = NULL; } cred->client_gss_creds_obtained = CRED_UNINITIALISED; @@ -319,7 +320,7 @@ void cli_credentials_invalidate_ccache(struct cli_credentials *cred, * any cached credentials are now invalid */ if (obtained >= cred->ccache_obtained) { if (cred->ccache_obtained > CRED_UNINITIALISED) { - talloc_free(cred->ccache); + talloc_unlink(cred, cred->ccache); cred->ccache = NULL; } cred->ccache_obtained = CRED_UNINITIALISED; @@ -350,7 +351,8 @@ int cli_credentials_get_client_gss_creds(struct cli_credentials *cred, OM_uint32 maj_stat, min_stat; struct gssapi_creds_container *gcc; struct ccache_container *ccache; - if (cred->client_gss_creds_obtained >= cred->client_gss_creds_threshold) { + if (cred->client_gss_creds_obtained >= cred->client_gss_creds_threshold && + cred->client_gss_creds_obtained > CRED_UNINITIALISED) { *_gcc = cred->client_gss_creds; return 0; } |