From febe23a3998142bc4cd4fd3febe3839b52ecbff9 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Tue, 31 Mar 2015 12:50:55 -0500 Subject: [PATCH] Improve and export krb5_principal_set_comp_string --- lib/krb5/libkrb5-exports.def.in | 1 + lib/krb5/principal.c | 9 +++++++-- lib/krb5/version-script.map | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/krb5/libkrb5-exports.def.in b/lib/krb5/libkrb5-exports.def.in index db5e665073..7632dc353d 100644 --- a/lib/krb5/libkrb5-exports.def.in +++ b/lib/krb5/libkrb5-exports.def.in @@ -497,6 +497,7 @@ EXPORTS krb5_principal_get_type krb5_principal_is_krbtgt krb5_principal_match + krb5_principal_set_comp_string krb5_principal_set_realm krb5_principal_set_type krb5_print_address diff --git a/lib/krb5/principal.c b/lib/krb5/principal.c index 69fa732199..051c8add70 100644 --- a/lib/krb5/principal.c +++ b/lib/krb5/principal.c @@ -63,6 +63,9 @@ host/admin@H5L.ORG #define princ_ncomp(P, N) ((P)->name.name_string.val[(N)]) #define princ_realm(P) ((P)->realm) +static krb5_error_code append_component(krb5_context, krb5_principal, + const char *, size_t); + /** * Frees a Kerberos principal allocated by the library with * krb5_parse_name(), krb5_make_principal() or any other related @@ -668,8 +671,10 @@ krb5_principal_set_comp_string(krb5_context context, const char *component) { char *s; - if (k >= princ_num_comp(principal)) - return ERANGE; + size_t i; + + for (i = princ_num_comp(principal); i <= k; i++) + append_component(context, principal, "", 0); s = strdup(component); if (s == NULL) return krb5_enomem(context); diff --git a/lib/krb5/version-script.map b/lib/krb5/version-script.map index d11de9a734..f472d1f44e 100644 --- a/lib/krb5/version-script.map +++ b/lib/krb5/version-script.map @@ -489,6 +489,7 @@ HEIMDAL_KRB5_2.0 { krb5_principal_get_realm; krb5_principal_get_type; krb5_principal_match; + krb5_principal_set_comp_string; krb5_principal_set_realm; krb5_principal_set_type; krb5_principal_is_krbtgt;