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 45 krb5_free_key_data_contents(krb5_context context, krb5_key_data *key) 46 { 47 int i, idx; 48 49 idx = (key->key_data_ver == 1 ? 1 : 2); 50 for (i = 0; i < idx; i++) 51 zapfree(key->key_data_contents[i], key->key_data_length[i]); 52 return KADM5_OK; 53 } 54 55 kadm5_ret_t kadm5_free_key_data(void *server_handle, 56 krb5_int16 *n_key_data, 57 krb5_key_data *key_data) 58 { 59 kadm5_server_handle_t handle = server_handle; 60 int i, nkeys = (int) *n_key_data; 61 62 _KADM5_CHECK_HANDLE(server_handle); 63 64 if (key_data == NULL) 65 return KADM5_OK; 66 67 for (i = 0; i < nkeys; i++) 68 krb5_free_key_data_contents(handle->context, &key_data[i]); 69 free(key_data); 70 return KADM5_OK; 71 } 72 73 kadm5_ret_t 74 kadm5_free_principal_ent(void *server_handle, kadm5_principal_ent_t val) 75 { 76 kadm5_server_handle_t handle = server_handle; 77 krb5_tl_data *tl; 78 int i; 79 80 _KADM5_CHECK_HANDLE(server_handle); 81 82 if (!val) 83 return KADM5_OK; 84 85 krb5_free_principal(handle->context, val->principal); 86 krb5_free_principal(handle->context, val->mod_name); 87 free(val->policy); 88 if (val->n_key_data) { 89 for (i = 0; i < val->n_key_data; i++) 90 krb5_free_key_data_contents(handle->context, &val->key_data[i]); 91 free(val->key_data); 92 } 93 94 while (val->tl_data) { 95 tl = val->tl_data->tl_data_next; 96 free(val->tl_data->tl_data_contents); 97 free(val->tl_data); 98 val->tl_data = tl; 99 } 100 return KADM5_OK; 101 } 102 103 kadm5_ret_t 104 kadm5_free_strings(void *server_handle, krb5_string_attr *strings, 105 int count) 106 { 107 int i; 108 109 _KADM5_CHECK_HANDLE(server_handle); 110 111 if (!strings) 112 return KADM5_OK; 113 114 for (i = 0; i < count; i++) { 115 free(strings[i].key); 116 free(strings[i].value); 117 } 118 free(strings); 119 return KADM5_OK; 120 } 121 122 kadm5_ret_t 123 kadm5_free_kadm5_key_data(krb5_context context, int n_key_data, 124 kadm5_key_data *key_data) 125 { 126 int i; 127 128 if (key_data == NULL) 129 return KADM5_OK; 130 131 for (i = 0; i < n_key_data; i++) { 132 krb5_free_keyblock_contents(context, &key_data[i].key); 133 krb5_free_data_contents(context, &key_data[i].salt.data); 134 } 135 free(key_data); 136 137 return KADM5_OK; 138 } 139