1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ 2 /* 3 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved 4 */ 5 6 #include "k5-int.h" 7 #include <kadm5/admin.h> 8 #include <stdlib.h> 9 #include "server_internal.h" 10 11 kadm5_ret_t 12 kadm5_free_policy_ent(void *server_handle, kadm5_policy_ent_t val) 13 { 14 krb5_tl_data *tl_next; 15 16 _KADM5_CHECK_HANDLE(server_handle); 17 18 if (val == NULL) 19 return KADM5_OK; 20 21 free(val->policy); 22 free(val->allowed_keysalts); 23 for (; val->tl_data; val->tl_data = tl_next) { 24 tl_next = val->tl_data->tl_data_next; 25 free(val->tl_data->tl_data_contents); 26 free(val->tl_data); 27 } 28 memset(val, 0, sizeof(*val)); 29 return KADM5_OK; 30 } 31 32 kadm5_ret_t 33 kadm5_free_name_list(void *server_handle, char **names, int count) 34 { 35 _KADM5_CHECK_HANDLE(server_handle); 36 37 while (count--) 38 free(names[count]); 39 free(names); 40 return KADM5_OK; 41 } 42 43 /* XXX this ought to be in libkrb5.a, but isn't */ 44 kadm5_ret_t krb5_free_key_data_contents(context, key) 45 krb5_context context; 46 krb5_key_data *key; 47 { 48 int i, idx; 49 50 idx = (key->key_data_ver == 1 ? 1 : 2); 51 for (i = 0; i < idx; i++) 52 zapfree(key->key_data_contents[i], key->key_data_length[i]); 53 return KADM5_OK; 54 } 55 56 kadm5_ret_t kadm5_free_key_data(void *server_handle, 57 krb5_int16 *n_key_data, 58 krb5_key_data *key_data) 59 { 60 kadm5_server_handle_t handle = server_handle; 61 int i, nkeys = (int) *n_key_data; 62 63 _KADM5_CHECK_HANDLE(server_handle); 64 65 if (key_data == NULL) 66 return KADM5_OK; 67 68 for (i = 0; i < nkeys; i++) 69 krb5_free_key_data_contents(handle->context, &key_data[i]); 70 free(key_data); 71 return KADM5_OK; 72 } 73 74 kadm5_ret_t 75 kadm5_free_principal_ent(void *server_handle, kadm5_principal_ent_t val) 76 { 77 kadm5_server_handle_t handle = server_handle; 78 krb5_tl_data *tl; 79 int i; 80 81 _KADM5_CHECK_HANDLE(server_handle); 82 83 if (!val) 84 return KADM5_OK; 85 86 krb5_free_principal(handle->context, val->principal); 87 krb5_free_principal(handle->context, val->mod_name); 88 free(val->policy); 89 if (val->n_key_data) { 90 for (i = 0; i < val->n_key_data; i++) 91 krb5_free_key_data_contents(handle->context, &val->key_data[i]); 92 free(val->key_data); 93 } 94 95 while (val->tl_data) { 96 tl = val->tl_data->tl_data_next; 97 free(val->tl_data->tl_data_contents); 98 free(val->tl_data); 99 val->tl_data = tl; 100 } 101 return KADM5_OK; 102 } 103 104 kadm5_ret_t 105 kadm5_free_strings(void *server_handle, krb5_string_attr *strings, 106 int count) 107 { 108 int i; 109 110 _KADM5_CHECK_HANDLE(server_handle); 111 112 if (!strings) 113 return KADM5_OK; 114 115 for (i = 0; i < count; i++) { 116 free(strings[i].key); 117 free(strings[i].value); 118 } 119 free(strings); 120 return KADM5_OK; 121 } 122 123 kadm5_ret_t 124 kadm5_free_kadm5_key_data(krb5_context context, int n_key_data, 125 kadm5_key_data *key_data) 126 { 127 int i; 128 129 if (key_data == NULL) 130 return KADM5_OK; 131 132 for (i = 0; i < n_key_data; i++) { 133 krb5_free_keyblock_contents(context, &key_data[i].key); 134 krb5_free_data_contents(context, &key_data[i].salt.data); 135 } 136 free(key_data); 137 138 return KADM5_OK; 139 } 140