From: Greg Hudson Date: Fri, 19 Dec 2014 17:19:23 +0000 (-0500) Subject: Add ASN.1 encoder/decoder for UTF-8 strings X-Git-Tag: krb5-1.14-alpha1~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0f63158c3b0e9ebfe76c56136a575b41ec12642;p=thirdparty%2Fkrb5.git Add ASN.1 encoder/decoder for UTF-8 strings Add functions to encode and decode SEQUENCE OF UTF8String into a null-terminated array of krb5_data pointers. This type is simple enough that we don't need specific tests for it. ticket: 8157 --- diff --git a/src/include/k5-int.h b/src/include/k5-int.h index bde084203d..e05524f86a 100644 --- a/src/include/k5-int.h +++ b/src/include/k5-int.h @@ -968,6 +968,9 @@ struct _krb5_authdata_context { typedef struct _krb5_authdata_context *krb5_authdata_context; +void +k5_free_data_ptr_list(krb5_data **list); + void KRB5_CALLCONV krb5int_free_data_list(krb5_context context, krb5_data *data); @@ -1494,6 +1497,9 @@ encode_krb5_kkdcp_message(const krb5_kkdcp_message *, krb5_data **); krb5_error_code encode_krb5_cammac(const krb5_cammac *, krb5_data **); +krb5_error_code +encode_utf8_strings(krb5_data *const *ut8fstrings, krb5_data **); + /************************************************************************* * End of prototypes for krb5_encode.c *************************************************************************/ @@ -1670,6 +1676,9 @@ decode_krb5_kkdcp_message(const krb5_data *, krb5_kkdcp_message **); krb5_error_code decode_krb5_cammac(const krb5_data *, krb5_cammac **); +krb5_error_code +decode_utf8_strings(const krb5_data *, krb5_data ***); + struct _krb5_key_data; /* kdb.h */ struct ldap_seqof_key_data { diff --git a/src/lib/krb5/asn.1/asn1_k_encode.c b/src/lib/krb5/asn.1/asn1_k_encode.c index e173797ab7..9e58389441 100644 --- a/src/lib/krb5/asn.1/asn1_k_encode.c +++ b/src/lib/krb5/asn.1/asn1_k_encode.c @@ -92,6 +92,7 @@ DEFCOUNTEDSTRINGTYPE(utf8string, char *, unsigned int, DEFCOUNTEDTYPE(utf8_data, krb5_data, data, length, utf8string); DEFOPTIONALTYPE(opt_utf8_data, nonempty_data, NULL, utf8_data); DEFPTRTYPE(utf8_data_ptr, utf8_data); +DEFNULLTERMSEQOFTYPE(seqof_utf8_data, utf8_data_ptr); DEFCOUNTEDSTRINGTYPE(object_identifier, char *, unsigned int, k5_asn1_encode_bytestring, k5_asn1_decode_bytestring, @@ -1793,3 +1794,6 @@ DEFSEQTYPE(cammac, krb5_cammac, cammac_fields); MAKE_ENCODER(encode_krb5_cammac, cammac); MAKE_DECODER(decode_krb5_cammac, cammac); + +MAKE_ENCODER(encode_utf8_strings, seqof_utf8_data); +MAKE_DECODER(decode_utf8_strings, seqof_utf8_data); diff --git a/src/lib/krb5/krb/kfree.c b/src/lib/krb5/krb/kfree.c index 26200dabee..f3af260052 100644 --- a/src/lib/krb5/krb/kfree.c +++ b/src/lib/krb5/krb/kfree.c @@ -692,6 +692,16 @@ krb5_free_fast_armored_req(krb5_context context, krb5_fast_armored_req *val) free(val); } +void +k5_free_data_ptr_list(krb5_data **list) +{ + int i; + + for (i = 0; list != NULL && list[i] != NULL; i++) + krb5_free_data(NULL, list[i]); + free(list); +} + void KRB5_CALLCONV krb5int_free_data_list(krb5_context context, krb5_data *data) { diff --git a/src/lib/krb5/libkrb5.exports b/src/lib/krb5/libkrb5.exports index e25158c6b7..994ca34164 100644 --- a/src/lib/krb5/libkrb5.exports +++ b/src/lib/krb5/libkrb5.exports @@ -47,6 +47,7 @@ decode_krb5_tgs_rep decode_krb5_tgs_req decode_krb5_ticket decode_krb5_typed_data +decode_utf8_strings encode_krb5_ad_kdcissued encode_krb5_ad_signedpath_data encode_krb5_ad_signedpath @@ -96,6 +97,7 @@ encode_krb5_tgs_rep encode_krb5_tgs_req encode_krb5_ticket encode_krb5_typed_data +encode_utf8_strings et_asn1_error_table et_k524_error_table et_kdb5_error_table @@ -117,6 +119,7 @@ k5_expand_path_tokens k5_expand_path_tokens_extra k5_free_algorithm_identifier k5_free_cammac +k5_free_data_ptr_list k5_free_otp_tokeninfo k5_free_kkdcp_message k5_free_pa_otp_challenge