More consistent error checks in build_principal()

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:
Viktor Dukhovni
2012-06-11 17:54:25 +00:00
committed by Love Hornquist Astrand
parent a825143e73
commit 9ca0a2b62f

View File

@@ -747,30 +747,38 @@ append_component(krb5_context context, krb5_principal p,
return 0; return 0;
} }
static void static krb5_error_code
va_ext_princ(krb5_context context, krb5_principal p, va_list ap) va_ext_princ(krb5_context context, krb5_principal p, va_list ap)
{ {
krb5_error_code ret = 0;
while (1){ while (1){
const char *s; const char *s;
int len; int len;
len = va_arg(ap, int);
if(len == 0) if ((len = va_arg(ap, int)) == 0)
break; break;
s = va_arg(ap, const char*); s = va_arg(ap, const char*);
append_component(context, p, s, len); if ((ret = append_component(context, p, s, len)) != 0)
break;
} }
return ret;
} }
static void static krb5_error_code
va_princ(krb5_context context, krb5_principal p, va_list ap) va_princ(krb5_context context, krb5_principal p, va_list ap)
{ {
krb5_error_code ret = 0;
while (1){ while (1){
const char *s; const char *s;
s = va_arg(ap, const char*);
if(s == NULL) if ((s = va_arg(ap, const char*)) == NULL)
break;
if ((ret = append_component(context, p, s, strlen(s))) != 0)
break; break;
append_component(context, p, s, strlen(s));
} }
return ret;
} }
static krb5_error_code static krb5_error_code
@@ -778,9 +786,10 @@ build_principal(krb5_context context,
krb5_principal *principal, krb5_principal *principal,
int rlen, int rlen,
krb5_const_realm realm, krb5_const_realm realm,
void (*func)(krb5_context, krb5_principal, va_list), krb5_error_code (*func)(krb5_context, krb5_principal, va_list),
va_list ap) va_list ap)
{ {
krb5_error_code ret;
krb5_principal p; krb5_principal p;
p = calloc(1, sizeof(*p)); p = calloc(1, sizeof(*p));
@@ -794,9 +803,12 @@ build_principal(krb5_context context,
return krb5_enomem(context); return krb5_enomem(context);
} }
(*func)(context, p, ap); ret = func(context, p, ap);
if (ret == 0)
*principal = p; *principal = p;
return 0; else
krb5_free_principal(context, p);
return ret;
} }
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL