Blame src/tests/asn.1/krb5_decode_leak.c

Packit fd8b60
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
Packit fd8b60
/* tests/asn.1/krb5_decode_leak.c */
Packit fd8b60
/*
Packit fd8b60
 * Copyright (C) 2009 by the Massachusetts Institute of Technology.
Packit fd8b60
 * All rights reserved.
Packit fd8b60
 *
Packit fd8b60
 * Export of this software from the United States of America may
Packit fd8b60
 *   require a specific license from the United States Government.
Packit fd8b60
 *   It is the responsibility of any person or organization contemplating
Packit fd8b60
 *   export to obtain such a license before exporting.
Packit fd8b60
 *
Packit fd8b60
 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
Packit fd8b60
 * distribute this software and its documentation for any purpose and
Packit fd8b60
 * without fee is hereby granted, provided that the above copyright
Packit fd8b60
 * notice appear in all copies and that both that copyright notice and
Packit fd8b60
 * this permission notice appear in supporting documentation, and that
Packit fd8b60
 * the name of M.I.T. not be used in advertising or publicity pertaining
Packit fd8b60
 * to distribution of the software without specific, written prior
Packit fd8b60
 * permission.  Furthermore if you modify this software you must label
Packit fd8b60
 * your software as modified software and not distribute it in such a
Packit fd8b60
 * fashion that it might be confused with the original M.I.T. software.
Packit fd8b60
 * M.I.T. makes no representations about the suitability of
Packit fd8b60
 * this software for any purpose.  It is provided "as is" without express
Packit fd8b60
 * or implied warranty.
Packit fd8b60
 */
Packit fd8b60
Packit fd8b60
/*
Packit fd8b60
 * This program is intended to help detect memory leaks in the ASN.1
Packit fd8b60
 * decoder functions by exercising their failure paths.  The setup
Packit fd8b60
 * code for the test cases is copied from krb5_encode_test.c.
Packit fd8b60
 *
Packit fd8b60
 * This code does not actually detect leaks by itself; it must be run
Packit fd8b60
 * through a leak-detection tool such as valgrind to do so.  Simply
Packit fd8b60
 * running the program will exercise a bunch of ASN.1 encoder and
Packit fd8b60
 * decoder code paths but won't validate the results.
Packit fd8b60
 */
Packit fd8b60
Packit fd8b60
#include "k5-int.h"
Packit fd8b60
#include "com_err.h"
Packit fd8b60
#include "utility.h"
Packit fd8b60
#include "ktest.h"
Packit fd8b60
#include "debug.h"
Packit fd8b60
Packit fd8b60
krb5_context test_context;
Packit fd8b60
Packit fd8b60
/*
Packit fd8b60
 * Contrary to our usual convention, krb5_free_cred_enc_part is a
Packit fd8b60
 * contents-only free function (and is assumed to be by mk_cred and
Packit fd8b60
 * rd_cred) and we have no whole-structure free function for that data
Packit fd8b60
 * type.  So create one here.
Packit fd8b60
 */
Packit fd8b60
static void
Packit fd8b60
free_cred_enc_part_whole(krb5_context ctx,
Packit fd8b60
                         krb5_cred_enc_part *val)
Packit fd8b60
{
Packit fd8b60
    krb5_free_cred_enc_part(ctx, val);
Packit fd8b60
    free(val);
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
int
Packit fd8b60
main(int argc, char **argv)
Packit fd8b60
{
Packit fd8b60
    krb5_data *code;
Packit fd8b60
    krb5_error_code retval;
Packit fd8b60
    unsigned int i;
Packit fd8b60
Packit fd8b60
    retval = krb5_init_context(&test_context);
Packit fd8b60
    if (retval) {
Packit fd8b60
        com_err(argv[0], retval, "while initializing krb5");
Packit fd8b60
        exit(1);
Packit fd8b60
    }
Packit fd8b60
    init_access(argv[0]);
Packit fd8b60
Packit fd8b60
#define encode_run(value,type,typestring,description,encoder)
Packit fd8b60
Packit fd8b60
    /*
Packit fd8b60
     * Encode a value.  Then attempt to trigger most failure paths of
Packit fd8b60
     * the decoder function by passing in corrupt encodings, which we
Packit fd8b60
     * generate by perturbing each byte of the encoding in turn.  Some
Packit fd8b60
     * of the perturbed encodings are expected to decode successfully,
Packit fd8b60
     * so we need a free function to discard successful results.  Make
Packit fd8b60
     * sure to define a pointer named "tmp" of the correct type in the
Packit fd8b60
     * enclosing block.
Packit fd8b60
     */
Packit fd8b60
#define leak_test(value, encoder, decoder, freefn)              \
Packit fd8b60
    retval = encoder(&(value),&(code));                         \
Packit fd8b60
    if (retval) {                                               \
Packit fd8b60
        com_err("krb5_decode_leak", retval, "while encoding");  \
Packit fd8b60
        exit(1);                                                \
Packit fd8b60
    }                                                           \
Packit fd8b60
    for (i = 0; i < code->length; i++) {                        \
Packit fd8b60
        code->data[i] = (char)~((unsigned char)code->data[i]);  \
Packit fd8b60
        retval = decoder(code, &tmp);                           \
Packit fd8b60
        code->data[i] = (char)~((unsigned char)code->data[i]);  \
Packit fd8b60
        if (retval == 0)                                        \
Packit fd8b60
            freefn(test_context, tmp);                          \
Packit fd8b60
    }                                                           \
Packit fd8b60
    krb5_free_data(test_context, code);
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_authenticator */
Packit fd8b60
    {
Packit fd8b60
        krb5_authenticator authent, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_authenticator(&authent);
Packit fd8b60
        leak_test(authent, encode_krb5_authenticator,
Packit fd8b60
                  decode_krb5_authenticator, krb5_free_authenticator);
Packit fd8b60
Packit fd8b60
        ktest_destroy_checksum(&(authent.checksum));
Packit fd8b60
        ktest_destroy_keyblock(&(authent.subkey));
Packit fd8b60
        authent.seq_number = 0;
Packit fd8b60
        ktest_empty_authorization_data(authent.authorization_data);
Packit fd8b60
        leak_test(authent, encode_krb5_authenticator,
Packit fd8b60
                  decode_krb5_authenticator, krb5_free_authenticator);
Packit fd8b60
Packit fd8b60
        ktest_destroy_authorization_data(&(authent.authorization_data));
Packit fd8b60
        leak_test(authent, encode_krb5_authenticator,
Packit fd8b60
                  decode_krb5_authenticator, krb5_free_authenticator);
Packit fd8b60
        ktest_empty_authenticator(&authent);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ticket */
Packit fd8b60
    {
Packit fd8b60
        krb5_ticket tkt, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_ticket(&tkt);
Packit fd8b60
        leak_test(tkt, encode_krb5_ticket, decode_krb5_ticket,
Packit fd8b60
                  krb5_free_ticket);
Packit fd8b60
        ktest_empty_ticket(&tkt);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_encryption_key */
Packit fd8b60
    {
Packit fd8b60
        krb5_keyblock keyblk, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_keyblock(&keyblk);
Packit fd8b60
        leak_test(keyblk, encode_krb5_encryption_key,
Packit fd8b60
                  decode_krb5_encryption_key, krb5_free_keyblock);
Packit fd8b60
        ktest_empty_keyblock(&keyblk);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_enc_tkt_part */
Packit fd8b60
    {
Packit fd8b60
        krb5_ticket tkt;
Packit fd8b60
        krb5_enc_tkt_part *tmp;
Packit fd8b60
Packit fd8b60
        memset(&tkt, 0, sizeof(krb5_ticket));
Packit fd8b60
        tkt.enc_part2 = ealloc(sizeof(krb5_enc_tkt_part));
Packit fd8b60
        ktest_make_sample_enc_tkt_part(tkt.enc_part2);
Packit fd8b60
Packit fd8b60
        leak_test(*(tkt.enc_part2), encode_krb5_enc_tkt_part,
Packit fd8b60
                  decode_krb5_enc_tkt_part, krb5_free_enc_tkt_part);
Packit fd8b60
Packit fd8b60
        tkt.enc_part2->times.starttime = 0;
Packit fd8b60
        tkt.enc_part2->times.renew_till = 0;
Packit fd8b60
        ktest_destroy_address(&(tkt.enc_part2->caddrs[1]));
Packit fd8b60
        ktest_destroy_address(&(tkt.enc_part2->caddrs[0]));
Packit fd8b60
        ktest_destroy_authdata(&(tkt.enc_part2->authorization_data[1]));
Packit fd8b60
        ktest_destroy_authdata(&(tkt.enc_part2->authorization_data[0]));
Packit fd8b60
Packit fd8b60
        /* ISODE version fails on the empty caddrs field */
Packit fd8b60
        ktest_destroy_addresses(&(tkt.enc_part2->caddrs));
Packit fd8b60
        ktest_destroy_authorization_data(&(tkt.enc_part2->authorization_data));
Packit fd8b60
Packit fd8b60
        leak_test(*(tkt.enc_part2), encode_krb5_enc_tkt_part,
Packit fd8b60
                  decode_krb5_enc_tkt_part, krb5_free_enc_tkt_part);
Packit fd8b60
        ktest_empty_ticket(&tkt);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_enc_kdc_rep_part */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_rep kdcr;
Packit fd8b60
        krb5_enc_kdc_rep_part *tmp;
Packit fd8b60
Packit fd8b60
        memset(&kdcr, 0, sizeof(kdcr));
Packit fd8b60
Packit fd8b60
        kdcr.enc_part2 = ealloc(sizeof(krb5_enc_kdc_rep_part));
Packit fd8b60
        ktest_make_sample_enc_kdc_rep_part(kdcr.enc_part2);
Packit fd8b60
Packit fd8b60
        leak_test(*(kdcr.enc_part2), encode_krb5_enc_kdc_rep_part,
Packit fd8b60
                  decode_krb5_enc_kdc_rep_part, krb5_free_enc_kdc_rep_part);
Packit fd8b60
Packit fd8b60
        kdcr.enc_part2->key_exp = 0;
Packit fd8b60
        kdcr.enc_part2->times.starttime = 0;
Packit fd8b60
        kdcr.enc_part2->flags &= ~TKT_FLG_RENEWABLE;
Packit fd8b60
        ktest_destroy_addresses(&(kdcr.enc_part2->caddrs));
Packit fd8b60
Packit fd8b60
        leak_test(*(kdcr.enc_part2), encode_krb5_enc_kdc_rep_part,
Packit fd8b60
                  decode_krb5_enc_kdc_rep_part, krb5_free_enc_kdc_rep_part);
Packit fd8b60
Packit fd8b60
        ktest_empty_kdc_rep(&kdcr);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_as_rep */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_rep kdcr, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_kdc_rep(&kdcr);
Packit fd8b60
        kdcr.msg_type = KRB5_AS_REP;
Packit fd8b60
        leak_test(kdcr, encode_krb5_as_rep, decode_krb5_as_rep,
Packit fd8b60
                  krb5_free_kdc_rep);
Packit fd8b60
Packit fd8b60
        ktest_destroy_pa_data_array(&(kdcr.padata));
Packit fd8b60
        leak_test(kdcr, encode_krb5_as_rep, decode_krb5_as_rep,
Packit fd8b60
                  krb5_free_kdc_rep);
Packit fd8b60
Packit fd8b60
        ktest_empty_kdc_rep(&kdcr);
Packit fd8b60
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_tgs_rep */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_rep kdcr, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_kdc_rep(&kdcr);
Packit fd8b60
        kdcr.msg_type = KRB5_TGS_REP;
Packit fd8b60
        leak_test(kdcr, encode_krb5_tgs_rep, decode_krb5_tgs_rep,
Packit fd8b60
                  krb5_free_kdc_rep);
Packit fd8b60
Packit fd8b60
        ktest_destroy_pa_data_array(&(kdcr.padata));
Packit fd8b60
        leak_test(kdcr, encode_krb5_tgs_rep, decode_krb5_tgs_rep,
Packit fd8b60
                  krb5_free_kdc_rep);
Packit fd8b60
Packit fd8b60
        ktest_empty_kdc_rep(&kdcr);
Packit fd8b60
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ap_req */
Packit fd8b60
    {
Packit fd8b60
        krb5_ap_req apreq, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_ap_req(&apreq);
Packit fd8b60
        leak_test(apreq, encode_krb5_ap_req, decode_krb5_ap_req,
Packit fd8b60
                  krb5_free_ap_req);
Packit fd8b60
        ktest_empty_ap_req(&apreq);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ap_rep */
Packit fd8b60
    {
Packit fd8b60
        krb5_ap_rep aprep, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_ap_rep(&aprep);
Packit fd8b60
        leak_test(aprep, encode_krb5_ap_rep, decode_krb5_ap_rep,
Packit fd8b60
                  krb5_free_ap_rep);
Packit fd8b60
        ktest_empty_ap_rep(&aprep);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ap_rep_enc_part */
Packit fd8b60
    {
Packit fd8b60
        krb5_ap_rep_enc_part apenc, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_ap_rep_enc_part(&apenc);
Packit fd8b60
        leak_test(apenc, encode_krb5_ap_rep_enc_part,
Packit fd8b60
                  decode_krb5_ap_rep_enc_part, krb5_free_ap_rep_enc_part);
Packit fd8b60
Packit fd8b60
        ktest_destroy_keyblock(&(apenc.subkey));
Packit fd8b60
        apenc.seq_number = 0;
Packit fd8b60
        leak_test(apenc, encode_krb5_ap_rep_enc_part,
Packit fd8b60
                  decode_krb5_ap_rep_enc_part, krb5_free_ap_rep_enc_part);
Packit fd8b60
        ktest_empty_ap_rep_enc_part(&apenc);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_as_req */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_req asreq, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_kdc_req(&asreq);
Packit fd8b60
        asreq.msg_type = KRB5_AS_REQ;
Packit fd8b60
        asreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(asreq, encode_krb5_as_req, decode_krb5_as_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_pa_data_array(&(asreq.padata));
Packit fd8b60
        ktest_destroy_principal(&(asreq.client));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_destroy_principal(&(asreq.server));
Packit fd8b60
#endif
Packit fd8b60
        asreq.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        asreq.from = 0;
Packit fd8b60
        asreq.rtime = 0;
Packit fd8b60
        ktest_destroy_addresses(&(asreq.addresses));
Packit fd8b60
        ktest_destroy_enc_data(&(asreq.authorization_data));
Packit fd8b60
        leak_test(asreq, encode_krb5_as_req, decode_krb5_as_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_sequence_of_ticket(&(asreq.second_ticket));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_make_sample_principal(&(asreq.server));
Packit fd8b60
#endif
Packit fd8b60
        asreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(asreq, encode_krb5_as_req, decode_krb5_as_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
        ktest_empty_kdc_req(&asreq);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_tgs_req */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_req tgsreq, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_kdc_req(&tgsreq);
Packit fd8b60
        tgsreq.msg_type = KRB5_TGS_REQ;
Packit fd8b60
        tgsreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(tgsreq, encode_krb5_tgs_req, decode_krb5_tgs_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_pa_data_array(&(tgsreq.padata));
Packit fd8b60
        ktest_destroy_principal(&(tgsreq.client));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_destroy_principal(&(tgsreq.server));
Packit fd8b60
#endif
Packit fd8b60
        tgsreq.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        tgsreq.from = 0;
Packit fd8b60
        tgsreq.rtime = 0;
Packit fd8b60
        ktest_destroy_addresses(&(tgsreq.addresses));
Packit fd8b60
        ktest_destroy_enc_data(&(tgsreq.authorization_data));
Packit fd8b60
        leak_test(tgsreq, encode_krb5_tgs_req, decode_krb5_tgs_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_sequence_of_ticket(&(tgsreq.second_ticket));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_make_sample_principal(&(tgsreq.server));
Packit fd8b60
#endif
Packit fd8b60
        tgsreq.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(tgsreq, encode_krb5_tgs_req, decode_krb5_tgs_req,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
        ktest_empty_kdc_req(&tgsreq);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_kdc_req_body */
Packit fd8b60
    {
Packit fd8b60
        krb5_kdc_req kdcrb, *tmp;
Packit fd8b60
Packit fd8b60
        memset(&kdcrb, 0, sizeof(kdcrb));
Packit fd8b60
        ktest_make_sample_kdc_req_body(&kdcrb);
Packit fd8b60
        kdcrb.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(kdcrb, encode_krb5_kdc_req_body, decode_krb5_kdc_req_body,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_principal(&(kdcrb.client));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_destroy_principal(&(kdcrb.server));
Packit fd8b60
#endif
Packit fd8b60
        kdcrb.kdc_options |= KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        kdcrb.from = 0;
Packit fd8b60
        kdcrb.rtime = 0;
Packit fd8b60
        ktest_destroy_addresses(&(kdcrb.addresses));
Packit fd8b60
        ktest_destroy_enc_data(&(kdcrb.authorization_data));
Packit fd8b60
        leak_test(kdcrb, encode_krb5_kdc_req_body, decode_krb5_kdc_req_body,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
Packit fd8b60
        ktest_destroy_sequence_of_ticket(&(kdcrb.second_ticket));
Packit fd8b60
#ifndef ISODE_SUCKS
Packit fd8b60
        ktest_make_sample_principal(&(kdcrb.server));
Packit fd8b60
#endif
Packit fd8b60
        kdcrb.kdc_options &= ~KDC_OPT_ENC_TKT_IN_SKEY;
Packit fd8b60
        leak_test(kdcrb, encode_krb5_kdc_req_body, decode_krb5_kdc_req_body,
Packit fd8b60
                  krb5_free_kdc_req);
Packit fd8b60
        ktest_empty_kdc_req(&kdcrb);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_safe */
Packit fd8b60
    {
Packit fd8b60
        krb5_safe s, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_safe(&s);
Packit fd8b60
        leak_test(s, encode_krb5_safe, decode_krb5_safe, krb5_free_safe);
Packit fd8b60
Packit fd8b60
        s.timestamp = 0;
Packit fd8b60
        /* s.usec should be opted out by the timestamp */
Packit fd8b60
        s.seq_number = 0;
Packit fd8b60
        ktest_destroy_address(&(s.r_address));
Packit fd8b60
        leak_test(s, encode_krb5_safe, decode_krb5_safe, krb5_free_safe);
Packit fd8b60
        ktest_empty_safe(&s);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_priv */
Packit fd8b60
    {
Packit fd8b60
        krb5_priv p, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_priv(&p);
Packit fd8b60
        leak_test(p, encode_krb5_priv, decode_krb5_priv, krb5_free_priv);
Packit fd8b60
        ktest_empty_priv(&p);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_enc_priv_part */
Packit fd8b60
    {
Packit fd8b60
        krb5_priv_enc_part ep, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_priv_enc_part(&ep);
Packit fd8b60
        leak_test(ep, encode_krb5_enc_priv_part, decode_krb5_enc_priv_part,
Packit fd8b60
                  krb5_free_priv_enc_part);
Packit fd8b60
Packit fd8b60
        ep.timestamp = 0;
Packit fd8b60
        /* ep.usec should be opted out along with timestamp */
Packit fd8b60
        ep.seq_number = 0;
Packit fd8b60
        ktest_destroy_address(&(ep.r_address));
Packit fd8b60
        leak_test(ep, encode_krb5_enc_priv_part, decode_krb5_enc_priv_part,
Packit fd8b60
                  krb5_free_priv_enc_part);
Packit fd8b60
        ktest_empty_priv_enc_part(&ep);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_cred */
Packit fd8b60
    {
Packit fd8b60
        krb5_cred c, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_cred(&c);
Packit fd8b60
        leak_test(c, encode_krb5_cred, decode_krb5_cred, krb5_free_cred);
Packit fd8b60
        ktest_empty_cred(&c);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_enc_cred_part */
Packit fd8b60
    {
Packit fd8b60
        krb5_cred_enc_part cep, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_cred_enc_part(&cep;;
Packit fd8b60
        leak_test(cep, encode_krb5_enc_cred_part, decode_krb5_enc_cred_part,
Packit fd8b60
                  free_cred_enc_part_whole);
Packit fd8b60
Packit fd8b60
        ktest_destroy_principal(&(cep.ticket_info[0]->client));
Packit fd8b60
        ktest_destroy_principal(&(cep.ticket_info[0]->server));
Packit fd8b60
        cep.ticket_info[0]->flags = 0;
Packit fd8b60
        cep.ticket_info[0]->times.authtime = 0;
Packit fd8b60
        cep.ticket_info[0]->times.starttime = 0;
Packit fd8b60
        cep.ticket_info[0]->times.endtime = 0;
Packit fd8b60
        cep.ticket_info[0]->times.renew_till = 0;
Packit fd8b60
        ktest_destroy_addresses(&(cep.ticket_info[0]->caddrs));
Packit fd8b60
        cep.nonce = 0;
Packit fd8b60
        cep.timestamp = 0;
Packit fd8b60
        ktest_destroy_address(&(cep.s_address));
Packit fd8b60
        ktest_destroy_address(&(cep.r_address));
Packit fd8b60
        leak_test(cep, encode_krb5_enc_cred_part, decode_krb5_enc_cred_part,
Packit fd8b60
                  free_cred_enc_part_whole);
Packit fd8b60
        ktest_empty_cred_enc_part(&cep;;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_error */
Packit fd8b60
    {
Packit fd8b60
        krb5_error kerr, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_error(&kerr);
Packit fd8b60
        leak_test(kerr, encode_krb5_error, decode_krb5_error, krb5_free_error);
Packit fd8b60
Packit fd8b60
        kerr.ctime = 0;
Packit fd8b60
        ktest_destroy_principal(&(kerr.client));
Packit fd8b60
        ktest_empty_data(&(kerr.text));
Packit fd8b60
        ktest_empty_data(&(kerr.e_data));
Packit fd8b60
        leak_test(kerr, encode_krb5_error, decode_krb5_error, krb5_free_error);
Packit fd8b60
Packit fd8b60
        ktest_empty_error(&kerr);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_authdata */
Packit fd8b60
    {
Packit fd8b60
        krb5_authdata **ad, **tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_authorization_data(&ad;;
Packit fd8b60
        leak_test(*ad, encode_krb5_authdata, decode_krb5_authdata,
Packit fd8b60
                  krb5_free_authdata);
Packit fd8b60
        ktest_destroy_authorization_data(&ad;;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_padata_sequence and encode_typed_data */
Packit fd8b60
    {
Packit fd8b60
        krb5_pa_data **pa, **tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_pa_data_array(&pa);
Packit fd8b60
        leak_test(*pa, encode_krb5_padata_sequence,
Packit fd8b60
                  decode_krb5_padata_sequence, krb5_free_pa_data);
Packit fd8b60
        leak_test(*pa, encode_krb5_typed_data,
Packit fd8b60
                  decode_krb5_typed_data, krb5_free_pa_data);
Packit fd8b60
        ktest_destroy_pa_data_array(&pa);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_padata_sequence (empty) */
Packit fd8b60
    {
Packit fd8b60
        krb5_pa_data **pa, **tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_empty_pa_data_array(&pa);
Packit fd8b60
        leak_test(*pa, encode_krb5_padata_sequence,
Packit fd8b60
                  decode_krb5_padata_sequence, krb5_free_pa_data);
Packit fd8b60
        ktest_destroy_pa_data_array(&pa);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_etype_info */
Packit fd8b60
    {
Packit fd8b60
        krb5_etype_info_entry **info, **tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_etype_info(&info;;
Packit fd8b60
        leak_test(*info, encode_krb5_etype_info, decode_krb5_etype_info,
Packit fd8b60
                  krb5_free_etype_info);
Packit fd8b60
Packit fd8b60
        ktest_destroy_etype_info_entry(info[2]);      info[2] = 0;
Packit fd8b60
        ktest_destroy_etype_info_entry(info[1]);      info[1] = 0;
Packit fd8b60
        leak_test(*info, encode_krb5_etype_info, decode_krb5_etype_info,
Packit fd8b60
                  krb5_free_etype_info);
Packit fd8b60
Packit fd8b60
        ktest_destroy_etype_info_entry(info[0]);      info[0] = 0;
Packit fd8b60
        leak_test(*info, encode_krb5_etype_info, decode_krb5_etype_info,
Packit fd8b60
                  krb5_free_etype_info);
Packit fd8b60
Packit fd8b60
        ktest_destroy_etype_info(info);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /* encode_etype_info 2*/
Packit fd8b60
    {
Packit fd8b60
        krb5_etype_info_entry **info, **tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_etype_info2(&info;;
Packit fd8b60
        leak_test(*info, encode_krb5_etype_info2, decode_krb5_etype_info2,
Packit fd8b60
                  krb5_free_etype_info);
Packit fd8b60
Packit fd8b60
        ktest_destroy_etype_info_entry(info[2]);      info[2] = 0;
Packit fd8b60
        ktest_destroy_etype_info_entry(info[1]);      info[1] = 0;
Packit fd8b60
        leak_test(*info, encode_krb5_etype_info2, decode_krb5_etype_info2,
Packit fd8b60
                  krb5_free_etype_info);
Packit fd8b60
Packit fd8b60
        ktest_destroy_etype_info(info);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_pa_enc_ts */
Packit fd8b60
    {
Packit fd8b60
        krb5_pa_enc_ts pa_enc, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_pa_enc_ts(&pa_enc);
Packit fd8b60
        leak_test(pa_enc, encode_krb5_pa_enc_ts, decode_krb5_pa_enc_ts,
Packit fd8b60
                  krb5_free_pa_enc_ts);
Packit fd8b60
        pa_enc.pausec = 0;
Packit fd8b60
        leak_test(pa_enc, encode_krb5_pa_enc_ts, decode_krb5_pa_enc_ts,
Packit fd8b60
                  krb5_free_pa_enc_ts);
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_enc_data */
Packit fd8b60
    {
Packit fd8b60
        krb5_enc_data enc_data, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_enc_data(&enc_data);
Packit fd8b60
        leak_test(enc_data, encode_krb5_enc_data, decode_krb5_enc_data,
Packit fd8b60
                  krb5_free_enc_data);
Packit fd8b60
        ktest_destroy_enc_data(&enc_data);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_sam_challenge_2 */
Packit fd8b60
    {
Packit fd8b60
        krb5_sam_challenge_2 sam_ch2, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_sam_challenge_2(&sam_ch2);
Packit fd8b60
        leak_test(sam_ch2, encode_krb5_sam_challenge_2,
Packit fd8b60
                  decode_krb5_sam_challenge_2, krb5_free_sam_challenge_2);
Packit fd8b60
        ktest_empty_sam_challenge_2(&sam_ch2);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_sam_challenge_2 */
Packit fd8b60
    {
Packit fd8b60
        krb5_sam_challenge_2_body body, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_sam_challenge_2_body(&body);
Packit fd8b60
        leak_test(body, encode_krb5_sam_challenge_2_body,
Packit fd8b60
                  decode_krb5_sam_challenge_2_body,
Packit fd8b60
                  krb5_free_sam_challenge_2_body);
Packit fd8b60
        ktest_empty_sam_challenge_2_body(&body);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_sam_response_2 */
Packit fd8b60
    {
Packit fd8b60
        krb5_sam_response_2 sam_ch2, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_sam_response_2(&sam_ch2);
Packit fd8b60
        leak_test(sam_ch2, encode_krb5_sam_response_2,
Packit fd8b60
                  decode_krb5_sam_response_2, krb5_free_sam_response_2);
Packit fd8b60
        ktest_empty_sam_response_2(&sam_ch2);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_sam_response_enc_2 */
Packit fd8b60
    {
Packit fd8b60
        krb5_enc_sam_response_enc_2 sam_ch2, *tmp;
Packit fd8b60
Packit fd8b60
        ktest_make_sample_enc_sam_response_enc_2(&sam_ch2);
Packit fd8b60
        leak_test(sam_ch2, encode_krb5_enc_sam_response_enc_2,
Packit fd8b60
                  decode_krb5_enc_sam_response_enc_2,
Packit fd8b60
                  krb5_free_enc_sam_response_enc_2);
Packit fd8b60
        ktest_empty_enc_sam_response_enc_2(&sam_ch2);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_pa_for_user */
Packit fd8b60
    {
Packit fd8b60
        krb5_pa_for_user foru, *tmp;
Packit fd8b60
        ktest_make_sample_pa_for_user(&foru;;
Packit fd8b60
        leak_test(foru, encode_krb5_pa_for_user, decode_krb5_pa_for_user,
Packit fd8b60
                  krb5_free_pa_for_user);
Packit fd8b60
        ktest_empty_pa_for_user(&foru;;
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_pa_s4u_x509_user */
Packit fd8b60
    {
Packit fd8b60
        krb5_pa_s4u_x509_user s4u, *tmp;
Packit fd8b60
        ktest_make_sample_pa_s4u_x509_user(&s4u);
Packit fd8b60
        leak_test(s4u, encode_krb5_pa_s4u_x509_user,
Packit fd8b60
                  decode_krb5_pa_s4u_x509_user,
Packit fd8b60
                  krb5_free_pa_s4u_x509_user);
Packit fd8b60
        ktest_empty_pa_s4u_x509_user(&s4u);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ad_kdcissued */
Packit fd8b60
    {
Packit fd8b60
        krb5_ad_kdcissued kdci, *tmp;
Packit fd8b60
        ktest_make_sample_ad_kdcissued(&kdci);
Packit fd8b60
        leak_test(kdci, encode_krb5_ad_kdcissued,
Packit fd8b60
                  decode_krb5_ad_kdcissued,
Packit fd8b60
                  krb5_free_ad_kdcissued);
Packit fd8b60
        ktest_empty_ad_kdcissued(&kdci);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_ad_signedpath */
Packit fd8b60
    {
Packit fd8b60
        krb5_ad_signedpath sp, *tmp;
Packit fd8b60
        ktest_make_sample_ad_signedpath(&sp);
Packit fd8b60
        leak_test(sp, encode_krb5_ad_signedpath,
Packit fd8b60
                  decode_krb5_ad_signedpath,
Packit fd8b60
                  krb5_free_ad_signedpath);
Packit fd8b60
        ktest_empty_ad_signedpath(&sp);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_iakerb_header */
Packit fd8b60
    {
Packit fd8b60
        krb5_iakerb_header ih, *tmp;
Packit fd8b60
        ktest_make_sample_iakerb_header(&ih;;
Packit fd8b60
        leak_test(ih, encode_krb5_iakerb_header,
Packit fd8b60
                  decode_krb5_iakerb_header,
Packit fd8b60
                  krb5_free_iakerb_header);
Packit fd8b60
        ktest_empty_iakerb_header(&ih;;
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_iakerb_finished */
Packit fd8b60
    {
Packit fd8b60
        krb5_iakerb_finished ih, *tmp;
Packit fd8b60
        ktest_make_sample_iakerb_finished(&ih;;
Packit fd8b60
        leak_test(ih, encode_krb5_iakerb_finished,
Packit fd8b60
                  decode_krb5_iakerb_finished,
Packit fd8b60
                  krb5_free_iakerb_finished);
Packit fd8b60
        ktest_empty_iakerb_finished(&ih;;
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_fast_response */
Packit fd8b60
    {
Packit fd8b60
        krb5_fast_response fr, *tmp;
Packit fd8b60
        ktest_make_sample_fast_response(&fr);
Packit fd8b60
        leak_test(fr, encode_krb5_fast_response, decode_krb5_fast_response,
Packit fd8b60
                  krb5_free_fast_response);
Packit fd8b60
        ktest_empty_fast_response(&fr);
Packit fd8b60
    }
Packit fd8b60
    /****************************************************************/
Packit fd8b60
    /* encode_krb5_pa_fx_fast_reply */
Packit fd8b60
    {
Packit fd8b60
        krb5_enc_data enc, *tmp;
Packit fd8b60
        ktest_make_sample_enc_data(&enc;;
Packit fd8b60
        leak_test(enc, encode_krb5_pa_fx_fast_reply,
Packit fd8b60
                  decode_krb5_pa_fx_fast_reply, krb5_free_enc_data);
Packit fd8b60
        ktest_destroy_enc_data(&enc;;
Packit fd8b60
    }
Packit fd8b60
    krb5_free_context(test_context);
Packit fd8b60
    return 0;
Packit fd8b60
}