Path: blob/main/crypto/krb5/src/lib/kadm5/misc_free.c
39537 views
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */1/*2* Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved3*/45#include "k5-int.h"6#include <kadm5/admin.h>7#include <stdlib.h>8#include "server_internal.h"910kadm5_ret_t11kadm5_free_policy_ent(void *server_handle, kadm5_policy_ent_t val)12{13krb5_tl_data *tl_next;1415_KADM5_CHECK_HANDLE(server_handle);1617if (val == NULL)18return KADM5_OK;1920free(val->policy);21free(val->allowed_keysalts);22for (; val->tl_data; val->tl_data = tl_next) {23tl_next = val->tl_data->tl_data_next;24free(val->tl_data->tl_data_contents);25free(val->tl_data);26}27memset(val, 0, sizeof(*val));28return KADM5_OK;29}3031kadm5_ret_t32kadm5_free_name_list(void *server_handle, char **names, int count)33{34_KADM5_CHECK_HANDLE(server_handle);3536while (count--)37free(names[count]);38free(names);39return KADM5_OK;40}4142/* XXX this ought to be in libkrb5.a, but isn't */43kadm5_ret_t44krb5_free_key_data_contents(krb5_context context, krb5_key_data *key)45{46int i, idx;4748idx = (key->key_data_ver == 1 ? 1 : 2);49for (i = 0; i < idx; i++)50zapfree(key->key_data_contents[i], key->key_data_length[i]);51return KADM5_OK;52}5354kadm5_ret_t kadm5_free_key_data(void *server_handle,55krb5_int16 *n_key_data,56krb5_key_data *key_data)57{58kadm5_server_handle_t handle = server_handle;59int i, nkeys = (int) *n_key_data;6061_KADM5_CHECK_HANDLE(server_handle);6263if (key_data == NULL)64return KADM5_OK;6566for (i = 0; i < nkeys; i++)67krb5_free_key_data_contents(handle->context, &key_data[i]);68free(key_data);69return KADM5_OK;70}7172kadm5_ret_t73kadm5_free_principal_ent(void *server_handle, kadm5_principal_ent_t val)74{75kadm5_server_handle_t handle = server_handle;76krb5_tl_data *tl;77int i;7879_KADM5_CHECK_HANDLE(server_handle);8081if (!val)82return KADM5_OK;8384krb5_free_principal(handle->context, val->principal);85krb5_free_principal(handle->context, val->mod_name);86free(val->policy);87if (val->n_key_data) {88for (i = 0; i < val->n_key_data; i++)89krb5_free_key_data_contents(handle->context, &val->key_data[i]);90free(val->key_data);91}9293while (val->tl_data) {94tl = val->tl_data->tl_data_next;95free(val->tl_data->tl_data_contents);96free(val->tl_data);97val->tl_data = tl;98}99return KADM5_OK;100}101102kadm5_ret_t103kadm5_free_strings(void *server_handle, krb5_string_attr *strings,104int count)105{106int i;107108_KADM5_CHECK_HANDLE(server_handle);109110if (!strings)111return KADM5_OK;112113for (i = 0; i < count; i++) {114free(strings[i].key);115free(strings[i].value);116}117free(strings);118return KADM5_OK;119}120121kadm5_ret_t122kadm5_free_kadm5_key_data(krb5_context context, int n_key_data,123kadm5_key_data *key_data)124{125int i;126127if (key_data == NULL)128return KADM5_OK;129130for (i = 0; i < n_key_data; i++) {131krb5_free_keyblock_contents(context, &key_data[i].key);132krb5_free_data_contents(context, &key_data[i].salt.data);133}134free(key_data);135136return KADM5_OK;137}138139140