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);
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
*************************************************************************/
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 {
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,
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);
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)
{
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
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
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