]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Add ASN.1 encoder/decoder for UTF-8 strings
authorGreg Hudson <ghudson@mit.edu>
Fri, 19 Dec 2014 17:19:23 +0000 (12:19 -0500)
committerGreg Hudson <ghudson@mit.edu>
Wed, 22 Jul 2015 16:22:45 +0000 (12:22 -0400)
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

src/include/k5-int.h
src/lib/krb5/asn.1/asn1_k_encode.c
src/lib/krb5/krb/kfree.c
src/lib/krb5/libkrb5.exports

index bde084203d75485a89080daa977a7611c9d69b35..e05524f86aaa9dc00f68d6e83c9b2b39b39bdbaf 100644 (file)
@@ -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 {
index e173797ab7e70dc163002b4ff8f2156e3f966152..9e58389441ec4d59d2cb0fbb0c2e9cb5b6a394c1 100644 (file)
@@ -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);
index 26200dabeea9b73c32a7fe665c7c0d907e5826ff..f3af2600528c05fadecb05ff68ece6d8cec005a9 100644 (file)
@@ -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)
 {
index e25158c6b7eeaa888f99151ad7ed0d5f19cbd1b8..994ca34164e9bec9617f5e8a31e5872f40ca2f97 100644 (file)
@@ -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