diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/krb5/krb/bld_princ.c | 86 |
1 files changed, 20 insertions, 66 deletions
diff --git a/src/lib/krb5/krb/bld_princ.c b/src/lib/krb5/krb/bld_princ.c index 8c17ab382b..ba411a6cd9 100644 --- a/src/lib/krb5/krb/bld_princ.c +++ b/src/lib/krb5/krb/bld_princ.c @@ -27,15 +27,9 @@ #include <stdarg.h> #include "k5-int.h" -/* Takes first component as argument for KIM API, - * which does not allow realms with zero components */ static krb5_error_code -krb5int_build_principal_va(krb5_context context, - krb5_principal princ, - unsigned int rlen, - const char *realm, - const char *first, - va_list ap) +build_principal_va(krb5_context context, krb5_principal princ, + unsigned int rlen, const char *realm, va_list ap) { krb5_error_code retval = 0; char *r = NULL; @@ -52,33 +46,25 @@ krb5int_build_principal_va(krb5_context context, if (!r) { retval = ENOMEM; } } - if (!retval && first) { - data[0].length = strlen(first); - data[0].data = strdup(first); - if (!data[0].data) { retval = ENOMEM; } - count++; - - /* ap is only valid if first is non-NULL */ - while (!retval && (component = va_arg(ap, char *))) { - if (count == size) { - krb5_data *new_data = NULL; - - size *= 2; - new_data = realloc ((char *) data, sizeof(krb5_data) * size); - if (new_data) { - data = new_data; - } else { - retval = ENOMEM; - } - } + while (!retval && (component = va_arg(ap, char *))) { + if (count == size) { + krb5_data *new_data = NULL; - if (!retval) { - data[count].length = strlen(component); - data[count].data = strdup(component); - if (!data[count].data) { retval = ENOMEM; } - count++; + size *= 2; + new_data = realloc(data, size * sizeof(krb5_data)); + if (new_data) { + data = new_data; + } else { + retval = ENOMEM; } } + + if (!retval) { + data[count].length = strlen(component); + data[count].data = strdup(component); + if (!data[count].data) { retval = ENOMEM; } + count++; + } } if (!retval) { @@ -110,37 +96,7 @@ krb5_build_principal_va(krb5_context context, const char *realm, va_list ap) { - char *first = va_arg(ap, char *); - - return krb5int_build_principal_va(context, princ, rlen, realm, first, ap); -} - -/* Takes first component as argument for KIM API, - * which does not allow realms with zero components */ -krb5_error_code KRB5_CALLCONV -krb5int_build_principal_alloc_va(krb5_context context, - krb5_principal *princ, - unsigned int rlen, - const char *realm, - const char *first, - va_list ap) -{ - krb5_error_code retval = 0; - - krb5_principal p = malloc(sizeof(krb5_principal_data)); - if (!p) { retval = ENOMEM; } - - if (!retval) { - retval = krb5int_build_principal_va(context, p, rlen, realm, first, ap); - } - - if (!retval) { - *princ = p; - } else { - free(p); - } - - return retval; + return build_principal_va(context, princ, rlen, realm, ap); } krb5_error_code KRB5_CALLCONV @@ -152,14 +108,12 @@ krb5_build_principal_alloc_va(krb5_context context, { krb5_error_code retval = 0; krb5_principal p; - char *first; p = malloc(sizeof(krb5_principal_data)); if (p == NULL) return ENOMEM; - first = va_arg(ap, char *); - retval = krb5int_build_principal_va(context, p, rlen, realm, first, ap); + retval = build_principal_va(context, p, rlen, realm, ap); if (retval) { free(p); return retval; |