diff options
author | Greg Hudson <ghudson@mit.edu> | 2009-01-30 21:22:31 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2009-01-30 21:22:31 +0000 |
commit | d45b9dab3bd7327d63cc5b7580fc8738da7faee6 (patch) | |
tree | 046cf9b776764e41451788147edbef4112c446a1 /src | |
parent | cb834decad2d6dbe12549d20441b64e7e7e6672d (diff) | |
download | krb5-d45b9dab3bd7327d63cc5b7580fc8738da7faee6.tar.gz krb5-d45b9dab3bd7327d63cc5b7580fc8738da7faee6.tar.xz krb5-d45b9dab3bd7327d63cc5b7580fc8738da7faee6.zip |
Make output parameter value of krb5_rc_resolve_full well-defined on
error return.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21841 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/krb5/rcache/rc_base.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/lib/krb5/rcache/rc_base.c b/src/lib/krb5/rcache/rc_base.c index 24a895f7ea..ad69282a49 100644 --- a/src/lib/krb5/rcache/rc_base.c +++ b/src/lib/krb5/rcache/rc_base.c @@ -133,12 +133,16 @@ krb5_rc_default(krb5_context context, krb5_rcache *id) } -krb5_error_code krb5_rc_resolve_full(krb5_context context, krb5_rcache *id, char *string_name) +krb5_error_code krb5_rc_resolve_full(krb5_context context, krb5_rcache *idptr, + char *string_name) { char *type; char *residual; krb5_error_code retval; unsigned int diff; + krb5_rcache id; + + *idptr = NULL; if (!(residual = strchr(string_name,':'))) return KRB5_RC_PARSE; @@ -149,22 +153,23 @@ krb5_error_code krb5_rc_resolve_full(krb5_context context, krb5_rcache *id, char (void) strncpy(type, string_name, diff); type[residual - string_name] = '\0'; - if (!(*id = (krb5_rcache) malloc(sizeof(**id)))) { + if (!(id = (krb5_rcache) malloc(sizeof(*id)))) { FREE(type); return KRB5_RC_MALLOC; } - if ((retval = krb5_rc_resolve_type(context, id,type))) { + if ((retval = krb5_rc_resolve_type(context, &id,type))) { FREE(type); - FREE(*id); + FREE(id); return retval; } FREE(type); - if ((retval = krb5_rc_resolve(context, *id,residual + 1))) { - k5_mutex_destroy(&(*id)->lock); - FREE(*id); + if ((retval = krb5_rc_resolve(context, id,residual + 1))) { + k5_mutex_destroy(&id->lock); + FREE(id); return retval; } - (*id)->magic = KV5M_RCACHE; + id->magic = KV5M_RCACHE; + *idptr = id; return retval; } |