summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2009-01-30 21:22:31 +0000
committerGreg Hudson <ghudson@mit.edu>2009-01-30 21:22:31 +0000
commitd45b9dab3bd7327d63cc5b7580fc8738da7faee6 (patch)
tree046cf9b776764e41451788147edbef4112c446a1 /src
parentcb834decad2d6dbe12549d20441b64e7e7e6672d (diff)
downloadkrb5-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.c21
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;
}